реклама на сайте
подробности

 
 
> Как сдвинуть все элементы массива на 1, Оптимизация этого процесса
azh
сообщение Dec 21 2007, 11:31
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 17-05-07
Пользователь №: 27 781



Здравствуйте!

Кто-нибудь знает как можно оптимизировать сдвиг элементов массива на 1 (для Blackfin):
-------------------------------------------------------------------
void AddSample(short pBuffer[], short sValue, int nSize)
{
int i;
for (i = 1; i < nSize; i++)
{
pBuffer[nSize - i] = pBuffer[nSize - i - 1];
}
pBuffer[0] = sValue;
}
--------------------------------------------------------------------
Как-нибудь можно для этого использовать кольцевые буфферы или DMA память-память?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadkudr
сообщение Jan 5 2008, 04:48
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 20-11-07
Пользователь №: 32 502



Осталось добавить, что ДПФ сдвинутой по кольцу последовательности равен ДПФ несдвинутой умноженной на exp(-j*2*pi/N*n*k)
k - пробегает 0..N-1
n - величина сдвига
N - длина последовательности
:-)
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Jan 5 2008, 08:32
Сообщение #3


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(dxp @ Dec 21 2007, 14:57) *
Не уверен только, что требуемого результата можно добиться на ЯВУ, скорее всего придется реализовывать на асме.

Вы видимо ярый ненавистник ЯВУ... biggrin.gif
На самом деле все что можно написать на ассемблере - можно написать и на любом ЯВУ причем совершенно необязательно с потерей эффективности, но зато намного структурнее и понятнее.


Цитата(vadkudr @ Jan 5 2008, 07:48) *
Осталось добавить, что ДПФ сдвинутой по кольцу последовательности равен ДПФ несдвинутой умноженной на exp(-j*2*pi/N*n*k)
k - пробегает 0..N-1
n - величина сдвига
N - длина последовательности
:-)

Вы незаметили что у товарища вовсе не сдвиг по кольцу,
а вот что:
Цитата(azh @ Dec 22 2007, 14:19) *
Вся задача выглядит так:
1. Добавить очередной отчет с АЦП в буффер (на место первого элемента буффера, при этом все остальные элементы сдвинуть на 1, и последний "вытолкнуть" из буффера)
2. Посчитать ДПФ для этого буффера

и после каждого сдвига и добавления вся последовательность изменяется.

Сообщение отредактировал Николай Z - Jan 5 2008, 08:35
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 14 2008, 11:14
Сообщение #4





Guests






Цитата(Николай Z @ Jan 5 2008, 11:32) *
Вы незаметили что у товарища вовсе не сдвиг по кольцу,
а вот что:
и после каждого сдвига и добавления вся последовательность изменяется.


Кольцевой буфер как раз дает требуемую функциональность.
Замените "принять" новый и "вытолкнуть" старый элемент на "перезаписать старый новым и сместить указатель на новый" и все станет вполне очевидным.
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Jan 14 2008, 13:52
Сообщение #5


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(TSerg @ Jan 14 2008, 14:14) *
Кольцевой буфер как раз дает требуемую функциональность.
Замените "принять" новый и "вытолкнуть" старый элемент на "перезаписать старый новым и сместить указатель на новый" и все станет вполне очевидным.

дык о том и речь была. достаточно просто новый писать поверх самого старого и просто сдвигать указатель - классика работы кольцевого буфера без каких-либо перемещений элементов в нем.
Ровно так же и рассчеты надо строить - опираясь на указатель начала информации, если они нужны.

Сообщение отредактировал Николай Z - Jan 14 2008, 13:55
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- azh   Как сдвинуть все элементы массива на 1   Dec 21 2007, 11:31
- - rezident   А может проще ничего не двигать, а лишь модифициро...   Dec 21 2007, 11:45
- - dxp   Цитата(azh @ Dec 21 2007, 17:31) Кто-нибу...   Dec 21 2007, 11:57
|- - fontp   Цитата(dxp @ Dec 21 2007, 14:57) В этом п...   Dec 21 2007, 12:06
- - dtsar   Цитата(azh @ Dec 21 2007, 14:31) Здравств...   Dec 21 2007, 18:16
|- - azh   Спасибо за ответы! В help к VDSP++ написано, ...   Dec 21 2007, 18:40
|- - fontp   Цитата(azh @ Dec 21 2007, 21:40) Спасибо ...   Dec 22 2007, 10:26
- - rezident   А зачем вообще нужно сдвигать буфер? Почему нельзя...   Dec 21 2007, 22:37
|- - shasik   Цитата(rezident @ Dec 22 2007, 00:37) А з...   Dec 22 2007, 06:20
- - azh   На самом деле, сдвиг всех элементов массива это то...   Dec 22 2007, 11:19
|- - fontp   Цитата(azh @ Dec 22 2007, 14:19) На самом...   Dec 22 2007, 12:52
- - azh   Большое спасибо за разъяснения! Действительно,...   Dec 22 2007, 13:58
|- - dxp   Цитата(Николай Z @ Jan 5 2008, 14:32) Вы ...   Jan 5 2008, 10:11
||- - Николай Z   Цитата(dxp @ Jan 5 2008, 13:11) P.S. Може...   Jan 5 2008, 10:32
||- - Edmundo   Цитата(Николай Z @ Jan 5 2008, 13:32) Да ...   Jan 5 2008, 15:39
- - fontp   Если речь идёт о скользящем ДПФ для немногих гармо...   Jan 6 2008, 13:15
- - alexander55   Цитата(fontp @ Jan 6 2008, 16:15) S(n) = ...   Jan 14 2008, 10:46


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 06:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016