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

 
 
> Быстрая свертка! Как?, помогите, пожалуйста, с алгоритмом
coolibin
сообщение Oct 10 2007, 06:42
Сообщение #1


Местный
***

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



Нужен алгоритм быстрой свертки(желательно подробный). Если кто то опишет или даст линк, я буду только благодарен smile.gif


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
coolibin
сообщение Oct 12 2007, 11:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
shasik
сообщение Oct 12 2007, 12:13
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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(!). Опеределитесь, что Вам нужно!
А еще есть алгоритмы разбиения свертки длинного сигнала на несколько более коротких - секционирование называется. Обратите внимание на это.
Go to the top of the page
 
+Quote Post
coolibin
сообщение Oct 12 2007, 12:44
Сообщение #4


Местный
***

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



Цитата(shasik @ Oct 12 2007, 15:13) *
Уверены в правильности вычисления прямого и обратного(!) преобразования Фурье?

При пошаговой проверке спектры вычисляются правильно. Могу показать код

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


К тому времени когда запускается моя программа сигнал уже получен. Я работаю с уже с известными данными.


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
shasik
сообщение Oct 15 2007, 10:08
Сообщение #5


Местный
***

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



Почему
Код
uint uConvSize = get_length(uSizeA + uSizeB - 1);

а не просто
Код
uint uConvSize = uSizeA + uSizeB - 1;
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:58
Рейтинг@Mail.ru


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