В MATLAB выходные данные функций fft
и / или ifft
функций часто требуют дополнительной обработки перед рассмотрением для анализа.
Я слышал много разных мнений о том, что правильно:
пересчет
Mathworks утверждает, что
fft
иifft
функции основаны на следующих уравнениях:Масштабирование по длине сигнала
Мои коллеги обычно масштабируют данные с помощью сразу после обработки . (Мы не рассматриваем необработанные данные перед масштабированием.)
fft
fft
%% Perform fft
X_f = fft (x, n_sample, 1) / n_sample; % fft должен быть нормализован по количеству выборок в данных. % Это соглашение было установлено разработчиком программного обеспечения (Mathworks).Это правильно?
- Если так, то почему
ifft
функция MATLAB ожидает, что мы еще не масштабировали на ? - Существует ли
ifft
функция или опция функции MATLAB, которая не масштабируется автоматически на ?
В качестве альтернативы, есть ли лучшее соглашение, которое мы должны использовать при размещении ? Например, поместив в вместо , или поместив в обоих уравнениях вместо ?
fft
ifft
- Если так, то почему
Масштабирование по периоду выборки
Я слышал , что
fft
иifft
функции предполагают , что период выборки , и что для функций , чтобы быть правдой, то следующий будет необходимо применять:
Смотрите ссылки:
- Ссылка 1 (см. Комментарий к Мэтту Шелистовски от доктора Сейса)
- Ссылка 2 (см. Ответ Рика Россона против д-ра Сейса)
- Ссылка 3 (см. Комментарий Мэтта (Сообщение: 7/16) и комментарий Poorya (14/16)
- Ссылка 4 (см. Стр. 10, слайд [1,1])
- Ссылка 5 (см. Стр. 8 + 9) [кажется, он использует обратное соглашение для fft и ifft].
Это правда?
Я особенно взволнован, потому что я не могу найти какие-либо уравнения DFT или DTFT в Википедии, которые включают период выборки.
Ответы:
Масштабирование прямого БПФ на 1 / N зависит от того, какой результат требуется для дальнейшего анализа: энергия (сохранение идентичности Парсеваля) или амплитуда (измерение высоты или вольт и т. Д.).
Если вы хотите измерить или проанализировать энергию, не масштабируйте на 1 / N, и более длинная синусоида с той же амплитудой приведет к большему результату БПФ, пропорциональному большей энергии более длинного сигнала.
Чуть чаще, если вы хотите измерить или проанализировать амплитуды, а затем получить более длинную синусоиду (таким образом, с большей суммарной энергией при той же самой амплитуде), чтобы получить примерно такой же результат БПФ, что и более короткий сигнал, вам нужно уменьшить масштаб. БПФ суммирование по пропорции, пропорциональной длине. Отношение может быть reference_length / N, которое иногда равно 1 / N, если усиление входного сигнала системы равно 1,0 для любых измерений или единиц, включая измерения временного интервала, которые вы решите использовать в своем дальнейшем анализе. Вам необходимо пропорционально уменьшать масштаб, потому что ДПФ является суммированием: чем больше вы суммируете аналогичные элементы, тем больше результат.
Так. Энергия или амплитуда. Какой ты хочешь?
Теперь, если вы уменьшите прямое FFT, то вам не следует масштабировать обратное, чтобы IFFT (FFT (x)) == x. Или наоборот.
Мне кажется, что 1 / sqrt (N) для масштабирования - это когда требуется формальная симметрия для какого-либо доказательства или когда создается какой-то аппаратный конвейер, где задержка и / или количество арифметических единиц / вентилей для ДПФ и для IDFT должен быть идентичным. Но вы не получите ни хорошего прямого измерения энергии, ни амплитуды для какого-либо типичного технического анализа.
источник
Соглашение о масштабировании, используемое Matlab, распространено в DSP. Вы также можете использовать унитарную ДПФ, где как ДПФ, так и IDFT масштабируются с коэффициентом . Вы также можете использовать коэффициент для DFT и коэффициент для IDFT. Пока вы последовательны, это не имеет большого значения (кроме числовых соображений, особенно при использовании реализаций с фиксированной запятой). Таким образом, нет «лучших» соглашений, есть просто «соглашения», и вам просто нужно договориться о том, какой из них вы используете.1/N−−√ 11/N 1
Комментарий
неправильно. Никто не говорит, что вы должны нормализовать результат БПФ. Если вы хотите, вы можете это сделать.
Кроме того , FFT ничего не знаю о периоде выборки не предполагает . Обратите внимание, что ДПФ может использоваться для данных, которые являются дискретными по своей природе без какой-либо выборки. В зависимости от ваших данных и того, что вы хотите сделать с результатом, вы должны соответственно принять во вниманиеНапример, если вы хотите использовать DFT (реализованный FFT) для аппроксимации непрерывного преобразования Фурье, вы получите следующее выражение:TT T
где - период выборки, - длина ДПФ, - сигнал непрерывного времени, а - его преобразование Фурье непрерывного времени. Правая часть - это просто ДПФ из выборок , масштабированная по , где мы предполагаем, что соответствующая часть находится в диапазоне , Подробнее об использовании ДПФ для аппроксимации непрерывного преобразования Фурье можно найти в этом ответе .N x ( t ) X ( ω ) ( 1 ) N x ( t ) T x ( t ) t ∈ [ 0 , N T ]T N x(t) X(ω) (1) N x(t) T x(t) t∈[0,NT]
источник
тем более, что речь идет о соглашении, я не буду подкреплять нелепое соглашение MATLAB и отвечу только правильными и надлежащими соглашениями или соглашениями. то есть индексирование MATLAB для DFT не является правильным и правильным, но я в значительной степени агностик в отношении того, какое из трех общих соглашений о масштабировании.
кроме того, я не ограничиваю и , они могут быть любыми целыми числами, потому что я в значительной степени фанатичен в отношении фундаментального значения дискретного преобразования Фурье: DFT и дискретные ряды Фурье - это одно и то же самое. DFT отображает периодическую последовательность с периодом в другую периодическую последовательность также с периодом и iDFT отображает ее обратно.0≤n<N 0≤k<N x[n] N X[k] N
так что
также круговая свертка во «временной области» ( ) или «частотной области» ( ) определяется в соответствии со всеми соглашениями:X [ k ]x[n] X[k]
таким образом, единственное преимущество одного соглашения над другим (при условии, что оба соглашения действительны) может заключаться в простоте выражения некоторых из теорем.
наиболее распространенное соглашение о масштабировании для DFT:
имеет преимущество простоты в отношении круговой свертки во «временной области»
но есть фактор масштабирования, о котором вам нужно беспокоиться, если вы свернетесь в «частотной области» :
Теорема Парсеваля имеет масштабный фактор, о котором нужно беспокоиться.
и теорема двойственности:
другое общее соглашение о масштабировании для DFT:
имеет то преимущество, что концептуально немного ближе к ряду Фурье, где - базисные функции Фурье, а - коэффициенты Фурье. поэтому, если вы посмотрите на необработанные данные во временной области и увидите синусоиду с циклами в буфере из выборок и с амплитудой (от нуля до пика) , это будет означать, что .ejωkn≜ej(2πk/N)n X[k] x[n] k N A ∣∣X[k]∣∣=∣∣X[−k]∣∣=∣∣X[N−k]∣∣=A2
он также имеет больше простоты в отношении круговой свертки в частотной области
но есть фактор масштабирования, о котором вам нужно беспокоиться, если вы свернуты во временной области :
Теорема Парсеваля имеет масштабный фактор, о котором нужно беспокоиться.
и теорема двойственности:
Соглашение об унитарном масштабировании для ДПФ идентично при масштабировании с обратным и сохраняет энергию при преобразовании или обратном преобразовании:
свертка либо во временной области, либо в частотной области имеет одинаковый коэффициент масштабирования, о котором следует беспокоиться:
но теорема Парсеваля не имеет масштабного фактора, о котором нужно беспокоиться.
также не теорема двойственности:
i D F T { x [ k ] } = X
источник
max(abs(X))
функцию, чтобы найти, где находится спектральный пик, и вы забыли вычесть1
из возвращенного индекса, и вы будете делать с ним математические вычисления. это проблема. и грустный в этом. начало индексации имеет такое же отношение к « определению ДПФ», как и масштабирование. это связано с тем, что бухгалтерия требуется или нет.