|
Быстрая свертка! Как?, помогите, пожалуйста, с алгоритмом |
|
|
|
 |
Ответов
|
Oct 12 2007, 11:39
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228

|
Что в этой свертке неправильно? Код void fast_conv(const double *pSigA, unsigned int uSizeA, const double *pSigB,unsigned int uSizeB, double *pSigR){ complex<double> *pSigACx, *pSigBCx; size_t i;
uint uConvSize = get_length(uSizeA + uSizeB - 1); pSigACx = new complex<double>[uConvSize]; pSigBCx = new complex<double>[uConvSize];
for(i = 0; i != uSizeA; i++){ pSigACx[i] = complex<double>(pSigA[i], 0.0); }
for(i = uSizeA; i != uConvSize; i++){ pSigACx[i] = complex<double>(0.0, 0.0); }
fft(pSigACx, uConvSize, false);
for(i = 0; i != uSizeB; i++){ pSigBCx[i] = complex<double>(pSigB[i], 0.0); }
for(i = uSizeB; i != uConvSize; i++){ pSigBCx[i] = complex<double>(0.0, 0.0); }
fft(pSigBCx, uConvSize, false);
for(i = 0; i != uConvSize; i++){ pSigACx[i] *= pSigBCx[i]; }
fft(pSigACx, uConvSize, true);
for(i = 0; i != uSizeA; i++){ pSigR[i] = pSigACx[i].real(); }
delete [] pSigACx; delete [] pSigBCx; } fft работает правильно!
Сообщение отредактировал coolibin - Oct 12 2007, 11:42
--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
|
|
|
|
|
Oct 12 2007, 12:13
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188

|
Цитата(coolibin @ Oct 12 2007, 14:39)  Что в этой свертке неправильно? Уверены в правильности вычисления прямого и обратного(!) преобразования Фурье? Цитата(coolibin @ Oct 11 2007, 11:23)  когда береш 100 000 точек сигнала и сворачиваешь с 8 000 точками коэф. фильтра, то всё равно приходится не мало ждать. Тем более результат после быстрой свертки хуже(может не правильно сворачивал) Вы уверены, что оно Вам надо? Пример: отсчеты сигнала приходят один раз в секунду. Фильтр длиной 8000. Т.е. когда будет получен 8000-й отсчет можно посчитать свертку и выплюнуть результат. Считать можно в лоб (всего то 8000). Если же применять fft в том виде, как это сделали Вы, то придется ждать пока не будет получен весь(!) сигнал и выполнять fft для сигналов длиной 100000(!). Опеределитесь, что Вам нужно! А еще есть алгоритмы разбиения свертки длинного сигнала на несколько более коротких - секционирование называется. Обратите внимание на это.
|
|
|
|
|
Oct 12 2007, 12:44
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228

|
Цитата(shasik @ Oct 12 2007, 15:13)  Уверены в правильности вычисления прямого и обратного(!) преобразования Фурье? При пошаговой проверке спектры вычисляются правильно. Могу показать код Цитата(shasik @ Oct 12 2007, 15:13)  Вы уверены, что оно Вам надо? Пример: отсчеты сигнала приходят один раз в секунду. Фильтр длиной 8000. Т.е. когда будет получен 8000-й отсчет можно посчитать свертку и выплюнуть результат. Считать можно в лоб (всего то 8000). Если же применять fft в том виде, как это сделали Вы, то придется ждать пока не будет получен весь(!) сигнал и выполнять fft для сигналов длиной 100000(!). Опеределитесь, что Вам нужно! А еще есть алгоритмы разбиения свертки длинного сигнала на несколько более коротких - секционирование называется. Обратите внимание на это. К тому времени когда запускается моя программа сигнал уже получен. Я работаю с уже с известными данными.
--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
|
|
|
|
|
Oct 15 2007, 10:08
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188

|
Почему Код uint uConvSize = get_length(uSizeA + uSizeB - 1); а не просто Код uint uConvSize = uSizeA + uSizeB - 1;
|
|
|
|
Сообщений в этой теме
coolibin Быстрая свертка! Как? Oct 10 2007, 06:42 DRUID3 Цитата(coolibin @ Oct 10 2007, 09:42) Нуж... Oct 10 2007, 09:12 fontp Цитата(DRUID3 @ Oct 10 2007, 13:12) Сверт... Oct 10 2007, 12:20 rloc Цитата(coolibin @ Oct 10 2007, 10:42) Нуж... Oct 15 2007, 11:55  shasik В Matlab'e приведенный выше пример полностью п... Oct 15 2007, 13:58 coolibin ЦитатаИ здесь есть очень симпатичная книга по быст... Oct 11 2007, 08:23 fontp Цитата(coolibin @ Oct 11 2007, 12:23) ссы... Oct 11 2007, 09:42 DRUID3 Цитата(coolibin @ Oct 11 2007, 11:23) ссы... Oct 11 2007, 09:50 Oldring Цитата(coolibin @ Oct 10 2007, 10:42) Нуж... Oct 11 2007, 10:00 coolibin Цитатассылка не битая, просто надо посидеть и разо... Oct 11 2007, 10:57   Grt При вычислении свертки, нужно обязательно учитыват... Oct 12 2007, 14:13    coolibin Цитата(Grt @ Oct 12 2007, 17:13) При вычи... Oct 15 2007, 08:10    coolibin Цитата(shasik @ Oct 15 2007, 13:08) Почем... Oct 15 2007, 13:36 shasik Цитата(coolibin @ Oct 12 2007, 14:39) Что... Oct 18 2007, 08:05  coolibin Цитата(shasik @ Oct 18 2007, 11:05) Ну, т... Oct 18 2007, 08:21 coolibin Алгоритм описаный здесь http://alglib.sources.ru/f... Oct 16 2007, 06:36 shasik Цитата(coolibin @ Oct 16 2007, 09:36) Алг... Oct 22 2007, 10:00 coolibin А никто не скажет, когда применять быструю свертку... Oct 23 2007, 07:03 shasik Цитата(coolibin @ Oct 23 2007, 10:03) А н... Oct 23 2007, 07:26  coolibin Цитата(shasik @ Oct 23 2007, 10:26) ЗЫ: Е... Oct 23 2007, 08:00   fontp Цитата(coolibin @ Oct 23 2007, 12:00) А ч... Oct 23 2007, 08:19   shasik Цитата(coolibin @ Oct 23 2007, 11:00) А ч... Oct 23 2007, 11:43 Ole2 Подскажите пожалуйста, откуда берется выигрыш при ... Dec 3 2010, 15:54 fontp QUOTE (Ole2 @ Dec 3 2010, 18:54) Подскажи... Dec 3 2010, 20:43 Ole2 Ну ладно…
Пусть мы имеем отсчеты квадратурного (ко... Dec 4 2010, 18:54 fontp QUOTE (Ole2 @ Dec 4 2010, 21:54) Ну ладно... Dec 4 2010, 19:41 :-) http://www.williamspublishing.com/PDF/5-8459-0710-... Dec 4 2010, 20:22 Ole2 Если делать БПФ поблочно, то конечно, выигрыш буде... Dec 5 2010, 10:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|