БПФ ровно как и ДПФ работает с периодической функцией. На вход БПФ подается один период функции. А при изменение числа отсчётов путем добавления нулей мы изменяем функцию. Тем самым она не соответствует исходной. Поэтому на БПФ мы и видим искажения сами испортили и видим что испортили. И не надо винить в этом БПФ.
добавление нулей не искажает сигнал, и соответственно спектр тоже никак не искажается.
Добавление нулей позволяет интерполировать спектр. Любая дискретная функция имеет непрерывный периодический спектр. Использование дпф возвращает дискретные значения спектра на заданной сетке частот. Добавление нулей к сигналу позволяет интерполировать спектр, приближаясь к непрерывному и показывает как ведет себя непрерывный спектр вашего дискретного сигнала между отсчетами дискретизации дпф. Мы ничего не портим а наоборот можем увидеть боковые лепестки которые есть в реальности, но не видны на выходе дпф.
Тогда вопрос снимается интерполяция это приближение. А приближать я могу как мне нравится. Если я захочу то я смогу сделать интерполяцию именно гладкой.
В статье Линейная и циклическая свертка на рис.5 " Вычисление циклической свертки с применением БПФ " показано,что последовательности БПФ a и b имеют одинаковую длину N.
Как быть если последовательности имею разную длину? Например при фильтрации, размер преобразования Фурье для сигнала- 2048, а размер преобразования Фурье КИХ фильтра- 512. Как можно умножить поэлементно эти два массива,чтобы получить отфильтрованый сигнал? Нужно к последующим 512 отсчетам также применять ту же "маску" фильтра?
различают циклическую и линейную свертку. Линейная свертка может быть выполнена через циклическую если добить последовательности нулями (к тому который 2048 нужно добавить 512 нулей а к массиву который длиной 512 надо добавить 2048 нулей) т.е. сделать их равной длины и дальше фильтровать при помощи дпф
Пусть входной сигнал 2048 отсчетов.Пусть размер фильтра 512 отсчетов.
Тогда размер сигнала после фильтрации(линейной свертки),если не ошибаюсь 2048+512=2560 отсчетов
Вопрос,откуда взялись еще (2560-2048)=512 отсчетов в выходном сигнале?
В них содержится мусор,который можно отбросить?
Или это как-то связано с задержкой КИХ-фильтра, но пока точно не могу понять каким образом
Чтобы понять откуда взялось еще 511 отсчетов посмотрите рисунки 1 и 2 статьи про свертку. На рисунке 2 показан пример свертки массива 4 отсчета и импульсной характеристики в 3 отсчета. На выходе получилось 6 отсчетов. В вашем случае при фильтрации сигнала 2048 отсчетов фильтром 512 получите на выходе линейной свертки 2048+512-1 = 2599 отсчетов. Вы можете без зазрения совести отбросить последние 511 и получите результат фильтрации вашего сигнала (такой результат возвращают функции filter в матлабе например). Но есть нюанс. Дело в том что ваш фильтр имеет групповую задержку. Это означает, что после фильтрации сигнал будет сдвинут по времени относительно исходного. Вы можете из результата свертки 2599 отсчетов выбрать 2048 отсчетов но не отбрасыванием последний 511, а выбрать начиная с 128 до 2599-127, тогда ваш сигнал на выходе фильтра не будет сдвинут относительно исходного поскольку вы учли групповую задержку.