Перейти к содержанию
    

Секционированная свертка

Здравствуйте! Если кто сталкивался - помогите. Задача: ПОТОКОВАЯ обработка сигнала длинным фильтром с заданной ПЕРЕДАТОЧНОЙ ф-й. Решение: БПФ, Секционированная свертка, алгоритм перекрытия с накоплением (Нусбаумер,Богнер,Блейхут). Длина фильтра L. Выбранное перекрытие 2.

Отработал алгоритм в MathCad: задал произвольную ИМПУЛЬСНУЮ ф-ю, удвоил дополнив нулями и через БПФ вычислил весовую функцию преобразования (L комлексных чисел) (1). На длинном (10 секций) тесте (набор ступенек) убедился, что моя свертка и классическая линейная - совпадают.

Теперь по условию задачи задаю нужную ПЕРЕДАТОЧНУЮ ф-ю (L/2 комлексных чисел). Через ОБПФ получаю ИМПУЛЬСНУЮ ф-ю (L вещественных чисел), дополняю нулями и далее по (1). Все опять совпадает кроме главного: В качестве тестовой ПЕРЕДАТОЧНОЙ ф-и выбрал ФНЧ т.е. вещественную последовательность вида 1,1...1,0,0.....0. При малой длинне единичного интервала (полоса пропускания) должен визуально наблюдать сглаживание ступенй, а этого нет. Крутые ступени и дребезг на переходах . Где ошибаюсь?

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего вобщем-то непонятно. Рисунки(графики) в студию. Вообще не понял, что же Вы там дополнили нулями в процессе непрерывной свертки... хм...

 

P.S.: и вообще, не мешало бы понакрутить ухи тому кто первым в литературе орисал трюк с дополнением нулями и не удостоился дальше растолковать, что область его правильных решений это очень частный случай...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>что область его правильных решений это очень частный случай...

Поясните это, пожалуйста.

 

Предполагаю, что в исходной проблеме наверняка в алгоритме или в реализации неточность. Реализация никогда не работала, а ответ случайно получался удобоваримый при отладке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего вобщем-то непонятно. Рисунки(графики) в студию. Вообще не понял, что же Вы там дополнили нулями в процессе непрерывной свертки... хм...

 

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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понимаете, прямые и быстрые свертки от одних и тех же данных либо совпадают, либо нет. Когда они значительно не совпадают - есть дыра в алгоритме.

 

В деле секционирования сверток нули дополняются во временной области. В частотной области производится только умножение спектров.

 

поэтому

W1=(FFT( R, 0...0) )

 

--

 

Нет, но выше сами все написали. Тогда отладка просто требуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В качестве тестовой ПЕРЕДАТОЧНОЙ ф-и выбрал ФНЧ т.е. вещественную последовательность вида 1,1...1,0,0.....0. При малой длинне единичного интервала (полоса пропускания) должен визуально наблюдать сглаживание ступенй, а этого нет. Крутые ступени и дребезг на переходах . Где ошибаюсь?

Заранее спасибо.

 

Да нигде Вы вроде не ошибаетесь:). И кто Вам сказал, что вы должны наблюдать полное сглаживание СТУПЕНЕЙ?:). При подаче на вход фильтра ступенчатого сигнала, на выходе Вы увидите переходную ф-ю фильтра. Для КИХ ФНЧ это и будет скачок с длительностью 2/L (примерно) и осцилляциями перед и после скачка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И кто Вам сказал, что вы должны наблюдать полное сглаживание СТУПЕНЕЙ?. При подаче на вход фильтра ступенчатого сигнала, на выходе Вы увидите переходную ф-ю фильтра. Для КИХ ФНЧ это и будет скачок с длительностью 2/L (примерно) и осцилляциями перед и после скачка.

Может быть вы правы. Признаюсь: меня смущает насколько W=FFT(IFFT( R ), 0..0) (1) не похожа на простую в трактовке R. Да, эти спектры разного разрешения, но чтобы настолько разниться формой!

В этой связи у меня еще вопрос. В процессе быстрой свертки мы имеем дармовую возможность копить спектральную оценку входного сигнала S. Это привлекательно с точки зрения адаптивной фильтрации, когда S влияет или подменяет R . Но S такой же размерности как и W. И, если ошибки нет, и переход R->W корректен (1), то как выглядит преобразование S -> R? Нет указаний :(.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...