Я пробовал разные коды преобразования Фурье на синусоидальных волнах, и все они генерируют распределенный спектр с резонансом на частоте сигнала, когда они теоретически должны отображать одну полосу.
Частота дискретизации оказывает небольшое влияние (здесь 10 кГц), однако количество циклов:
Один цикл:
100 циклов:
100000 циклов:
Похоже, преобразование Фурье сходится только для бесконечного числа циклов, почему это так? Разве временное окно ровно одного цикла не должно приносить те же результаты, что и N циклов?
Применение: Это как из любопытства, так и потому, что я хочу узнать, насколько шаговая реакция системы первого порядка будет вызывать резонанс механической сборки. Поэтому мне нужно точное преобразование Фурье ответа ... которому я больше не доверяю. Что я мог бы сделать, чтобы улучшить точность, основываясь на случае «синусоиды»?
PS: Эти конкретные скриншоты основаны на коде здесь .
источник
Ответы:
Это оконный артефакт.
Связанный код дополняет образец сигнала 10000 нулями, так что длина равна степени двух.
Обратите внимание, что в приведенном выше коде FFT берется с размером FFT,
NFFT
который на следующую степень на 2 больше, чем длина сигнала (в данном случае, 16 384). Из документации Mathworksfft()
:Это означает, что вы на самом деле не берете БПФ «синусоидальной волны» - вы берете БПФ синусоиды с плоским сигналом после нее.
Это эквивалентно взятию БПФ синусоиды, умноженной на функцию квадратного окна. Спектр БПФ представляет собой свертку частотного спектра синусоидальной волны (импульсной функции) с частотным спектром прямоугольной волны (sinc (f).)
Если вы измените его
L = 16,384
так, что сигнал не будет заполнен нулями, вы будете наблюдатьperfect
БПФ.Другие ключевые слова для поиска: "Спектральная утечка", "Оконная функция", "Окно Хэмминга".
Редактировать: Я убрал некоторые материалы, которые я написал по этой теме еще в университете, которые идут существенно более подробно. Я разместил это в своем блоге .
источник