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

 
 
> Как сдвинуть все элементы массива на 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
Ответов
azh
сообщение Dec 22 2007, 11:19
Сообщение #2


Участник
*

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



На самом деле, сдвиг всех элементов массива это только часть задачи (извиняюсь, что не сказал об этом сразу). Вся задача выглядит так:
1. Добавить очередной отчет с АЦП в буффер (на место первого элемента буффера, при этом все остальные элементы сдвинуть на 1, и последний "вытолкнуть" из буффера)
2. Посчитать ДПФ для этого буффера

Относительно оптимизации, почему-то время выполнения остается тем же самым (+0.01%), даже если использовать функцию circptr() и включить оптимизацию.
Go to the top of the page
 
+Quote Post
fontp
сообщение Dec 22 2007, 12:52
Сообщение #3


Эксперт
*****

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



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

Относительно оптимизации, почему-то время выполнения остается тем же самым (+0.01%), даже если использовать функцию circptr() и включить оптимизацию.



Ещё раз, у Вас неверная парадигма. Т.е. Вы смотрите на сдвиг с неверной стороны.

Правильная парадигма состоит в том, что Вы не двигаете отсчёты в памяти, а двигете их в мозгу.
При этом, с точки зрения последующей обработки (ДПФ), буфер не начинается с первого элемента массива, а начинается с некоторого, смещающегося на 1 на каждом такте обработки. Буфер для последующей обработки тогда должен иметь кольцевую адресацию. Но за то Вы не тратите время на сдвиг

Для эффективной реализации этой парадигмы и существуют кольцевые буфера. ДПФ ничего не меняет, если Вы его реализуете сами.

Если же у Вас блочная процедура ДПФ готовая, например из стандартной библиотеки, то кольцевые буфера Вам не помогут - там (в чужой библиотечной процедуре) не реализована кольцевая адресация. Кроме того, если у Вас ДПФ не для одной частоты, то время сдвига всё равно очень мало по сравнению с временем выполнения ДПФ и можно делать тупо в лоб, сдвигая элементы в памяти. Но в этом случае никакие кольцевые буфера Вам не помогут
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, 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
- - 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 Текстовая версия Сейчас: 11th August 2025 - 22:04
Рейтинг@Mail.ru


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