|
Как сдвинуть все элементы массива на 1, Оптимизация этого процесса |
|
|
|
Dec 21 2007, 11:31
|
Участник

Группа: Новичок
Сообщений: 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 память-память?
|
|
|
|
|
 |
Ответов
|
Jan 6 2008, 13:15
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Если речь идёт о скользящем ДПФ для немногих гармоник, то можно использовать идею, лежащую в основе фильтрации скользящего среднего CIC фильтрами. А именно, целочисленное скользящее среднее величины X вычисляется рекуррентно как
S(n) = S(n-1) + X(n) - X(n-M), M длина блока усреднения
Вычисления на границе устойчивости (для действительных чисел могут быть проблемы медленной потери устойчивости), но для целых чисел источник вычислительного шума отсутствует и вычисления абсолютно точные. Выкидываем уходящий отсчёт, добавляем входящий... имеем скользящую оценку среднего.
Далее для ДПФ заданной частоты - делаем два скользящих средних для целочисленных значений X(n)*sin(w*n) и X(n)*cos(w*n). Sin и Сos табличные и результаты умножений сохраняем в целочисленные линии задержки (лучше циклически адресуемые) для последующих рекуррентных вычислений. Получится скользящий ДПФ с точностью до комплексного фазового множителя (который при желании тоже можно учесть, но в большинстве случаев нас он не интересует, а интересует нас энергия) вычислительная сложность которого всего немногим более чем в 2 раза сложнее прямого блочного ДПФ или Герцеля. Это фатастика :-) Кто с ними сталкивался, узнает в этом сразу типа DDC, используемый для вычислений точных значений отсчётов ДПФ
|
|
|
|
Сообщений в этой теме
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 vadkudr Осталось добавить, что ДПФ сдвинутой по кольцу пос... Jan 5 2008, 04:48 Николай Z Цитата(dxp @ Dec 21 2007, 14:57) Не увере... Jan 5 2008, 08:32  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  TSerg Цитата(Николай Z @ Jan 5 2008, 11:32) Вы ... Jan 14 2008, 11:14   Николай Z Цитата(TSerg @ Jan 14 2008, 14:14) Кольце... Jan 14 2008, 13:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|