#Andre 0 9 марта, 2009 Опубликовано 9 марта, 2009 · Жалоба Здравствуйте! Если кто сталкивался - помогите. Задача: ПОТОКОВАЯ обработка сигнала длинным фильтром с заданной ПЕРЕДАТОЧНОЙ ф-й. Решение: БПФ, Секционированная свертка, алгоритм перекрытия с накоплением (Нусбаумер,Богнер,Блейхут). Длина фильтра L. Выбранное перекрытие 2. Отработал алгоритм в MathCad: задал произвольную ИМПУЛЬСНУЮ ф-ю, удвоил дополнив нулями и через БПФ вычислил весовую функцию преобразования (L комлексных чисел) (1). На длинном (10 секций) тесте (набор ступенек) убедился, что моя свертка и классическая линейная - совпадают. Теперь по условию задачи задаю нужную ПЕРЕДАТОЧНУЮ ф-ю (L/2 комлексных чисел). Через ОБПФ получаю ИМПУЛЬСНУЮ ф-ю (L вещественных чисел), дополняю нулями и далее по (1). Все опять совпадает кроме главного: В качестве тестовой ПЕРЕДАТОЧНОЙ ф-и выбрал ФНЧ т.е. вещественную последовательность вида 1,1...1,0,0.....0. При малой длинне единичного интервала (полоса пропускания) должен визуально наблюдать сглаживание ступенй, а этого нет. Крутые ступени и дребезг на переходах . Где ошибаюсь? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 10 марта, 2009 Опубликовано 10 марта, 2009 · Жалоба Ничего вобщем-то непонятно. Рисунки(графики) в студию. Вообще не понял, что же Вы там дополнили нулями в процессе непрерывной свертки... хм... P.S.: и вообще, не мешало бы понакрутить ухи тому кто первым в литературе орисал трюк с дополнением нулями и не удостоился дальше растолковать, что область его правильных решений это очень частный случай... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 10 марта, 2009 Опубликовано 10 марта, 2009 · Жалоба >что область его правильных решений это очень частный случай... Поясните это, пожалуйста. Предполагаю, что в исходной проблеме наверняка в алгоритме или в реализации неточность. Реализация никогда не работала, а ответ случайно получался удобоваримый при отладке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
#Andre 0 11 марта, 2009 Опубликовано 11 марта, 2009 · Жалоба Ничего вобщем-то непонятно. Рисунки(графики) в студию. Вообще не понял, что же Вы там дополнили нулями в процессе непрерывной свертки... хм... P.S.: и вообще, не мешало бы понакрутить ухи тому кто первым в литературе орисал трюк с дополнением нулями и не удостоился дальше растолковать, что область его правильных решений это очень частный случай... Секционированная свертка,алгоритм перекрытия с накоплением: Режем входную последовательность x на перекрывающиеся куски xi. Далее yi=IFFT(FFT(xi)*W), W=FFT(h || 0...0), где h - импульсная функция фильтра. Из полученного yi отбрасываем бракованный кусок, а остаток на выход. Повторяем до бесконечности. Получаем линейную свертку h*x. Дополнение нулями позволяет обыграть тот факт, что просто IFFT(FFT(xi)*FFT(h)) есть циклическая свертка. Нам же нужна линейная. Вроде классика. Ухи крутить - не допрыгнуть. Предполагаю, что в исходной проблеме наверняка в алгоритме или в реализации неточность. Реализация никогда не работала, а ответ случайно получался удобоваримый при отладке. Какая случайность? При тестировании выбираю случайный сигнал и случайную же имульсную ф-ю и сравниваю истинную свертку и секционированную. Раз за разом дельта 10е-12. Нет. У меня сомнение- правильно ли я делаю, когда исходную передаточную ф-ю R употребляю так: W=FFT(IFFT( R ) || 0...0) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 11 марта, 2009 Опубликовано 11 марта, 2009 · Жалоба Понимаете, прямые и быстрые свертки от одних и тех же данных либо совпадают, либо нет. Когда они значительно не совпадают - есть дыра в алгоритме. В деле секционирования сверток нули дополняются во временной области. В частотной области производится только умножение спектров. поэтому W1=(FFT( R, 0...0) ) -- Нет, но выше сами все написали. Тогда отладка просто требуется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 11 марта, 2009 Опубликовано 11 марта, 2009 · Жалоба В качестве тестовой ПЕРЕДАТОЧНОЙ ф-и выбрал ФНЧ т.е. вещественную последовательность вида 1,1...1,0,0.....0. При малой длинне единичного интервала (полоса пропускания) должен визуально наблюдать сглаживание ступенй, а этого нет. Крутые ступени и дребезг на переходах . Где ошибаюсь? Заранее спасибо. Да нигде Вы вроде не ошибаетесь:). И кто Вам сказал, что вы должны наблюдать полное сглаживание СТУПЕНЕЙ?:). При подаче на вход фильтра ступенчатого сигнала, на выходе Вы увидите переходную ф-ю фильтра. Для КИХ ФНЧ это и будет скачок с длительностью 2/L (примерно) и осцилляциями перед и после скачка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
#Andre 0 12 марта, 2009 Опубликовано 12 марта, 2009 · Жалоба И кто Вам сказал, что вы должны наблюдать полное сглаживание СТУПЕНЕЙ?. При подаче на вход фильтра ступенчатого сигнала, на выходе Вы увидите переходную ф-ю фильтра. Для КИХ ФНЧ это и будет скачок с длительностью 2/L (примерно) и осцилляциями перед и после скачка. Может быть вы правы. Признаюсь: меня смущает насколько W=FFT(IFFT( R ), 0..0) (1) не похожа на простую в трактовке R. Да, эти спектры разного разрешения, но чтобы настолько разниться формой! В этой связи у меня еще вопрос. В процессе быстрой свертки мы имеем дармовую возможность копить спектральную оценку входного сигнала S. Это привлекательно с точки зрения адаптивной фильтрации, когда S влияет или подменяет R . Но S такой же размерности как и W. И, если ошибки нет, и переход R->W корректен (1), то как выглядит преобразование S -> R? Нет указаний :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться