MATLAB: и scaling


11

В MATLAB выходные данные функций fftи / или ifftфункций часто требуют дополнительной обработки перед рассмотрением для анализа.

Я слышал много разных мнений о том, что правильно:

  • пересчет

    Mathworks утверждает, что fftи ifftфункции основаны на следующих уравнениях:

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • Масштабирование по длине сигнала

    Мои коллеги обычно масштабируют данные с помощью сразу после обработки . (Мы не рассматриваем необработанные данные перед масштабированием.)1Nfft
    fft

    %% Perform fft
    X_f = fft (x, n_sample, 1) / n_sample; % fft должен быть нормализован по количеству выборок в данных. % Это соглашение было установлено разработчиком программного обеспечения (Mathworks).

    Это правильно?

    1. Если так, то почему ifftфункция MATLAB ожидает, что мы еще не масштабировали на ?1/N
    2. Существует ли ifftфункция или опция функции MATLAB, которая не масштабируется автоматически на ?1/N

    В качестве альтернативы, есть ли лучшее соглашение, которое мы должны использовать при размещении ? Например, поместив в вместо , или поместив в обоих уравнениях вместо ?1/N1/Nfftifft1/N1/N

  • Масштабирование по периоду выборки

    Я слышал , что fftи ifftфункции предполагают , что период выборки , и что для функций , чтобы быть правдой, то следующий будет необходимо применять:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN

Смотрите ссылки:

  • Ссылка 1 (см. Комментарий к Мэтту Шелистовски от доктора Сейса)
  • Ссылка 2 (см. Ответ Рика Россона против д-ра Сейса)
  • Ссылка 3 (см. Комментарий Мэтта (Сообщение: 7/16) и комментарий Poorya (14/16)
  • Ссылка 4 (см. Стр. 10, слайд [1,1])
  • Ссылка 5 (см. Стр. 8 + 9) [кажется, он использует обратное соглашение для fft и ifft].

Это правда?

Я особенно взволнован, потому что я не могу найти какие-либо уравнения DFT или DTFT в Википедии, которые включают период выборки.


2
Кстати, Кандо просто излагает это как есть (с MATLAB): но я должен сказать, что это аппаратное соглашение MATLAB для помещения DC в bin # 1 (или амплитуды частотного компонента в bin ) сводит меня с ума !!!! kk+1
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
Роберт Бристоу-Джонсон

Ответы:


6

Масштабирование прямого БПФ на 1 / N зависит от того, какой результат требуется для дальнейшего анализа: энергия (сохранение идентичности Парсеваля) или амплитуда (измерение высоты или вольт и т. Д.).

Если вы хотите измерить или проанализировать энергию, не масштабируйте на 1 / N, и более длинная синусоида с той же амплитудой приведет к большему результату БПФ, пропорциональному большей энергии более длинного сигнала.

Чуть чаще, если вы хотите измерить или проанализировать амплитуды, а затем получить более длинную синусоиду (таким образом, с большей суммарной энергией при той же самой амплитуде), чтобы получить примерно такой же результат БПФ, что и более короткий сигнал, вам нужно уменьшить масштаб. БПФ суммирование по пропорции, пропорциональной длине. Отношение может быть reference_length / N, которое иногда равно 1 / N, если усиление входного сигнала системы равно 1,0 для любых измерений или единиц, включая измерения временного интервала, которые вы решите использовать в своем дальнейшем анализе. Вам необходимо пропорционально уменьшать масштаб, потому что ДПФ является суммированием: чем больше вы суммируете аналогичные элементы, тем больше результат.

Так. Энергия или амплитуда. Какой ты хочешь?

Теперь, если вы уменьшите прямое FFT, то вам не следует масштабировать обратное, чтобы IFFT (FFT (x)) == x. Или наоборот.

Мне кажется, что 1 / sqrt (N) для масштабирования - это когда требуется формальная симметрия для какого-либо доказательства или когда создается какой-то аппаратный конвейер, где задержка и / или количество арифметических единиц / вентилей для ДПФ и для IDFT должен быть идентичным. Но вы не получите ни хорошего прямого измерения энергии, ни амплитуды для какого-либо типичного технического анализа.


Когда вы говорите: «Если вы хотите измерить энергию, то не масштабируйте на » ... не нужно ли мне масштабировать на чтобы преобразование было унитарным и сохраняло энергию? Или это потому, что мне нужно возвести в квадрат весь сигнал, чтобы получить энергию, которая эффективно дает ? Если это правда, однако, то , что является спектр масштабируется на самом деле показывает мне тогда? 1/N1/N1/N1/N
LCsa

Кроме того, когда вы говорите «таким образом, с большей энергией при той же амплитуде» ... вы бы не имели в виду «частоту»?
LCsa

7

Соглашение о масштабировании, используемое Matlab, распространено в DSP. Вы также можете использовать унитарную ДПФ, где как ДПФ, так и IDFT масштабируются с коэффициентом . Вы также можете использовать коэффициент для DFT и коэффициент для IDFT. Пока вы последовательны, это не имеет большого значения (кроме числовых соображений, особенно при использовании реализаций с фиксированной запятой). Таким образом, нет «лучших» соглашений, есть просто «соглашения», и вам просто нужно договориться о том, какой из них вы используете.1/N11/N1

Комментарий

% fft должен быть нормализован по количеству выборок в данных.
% Это соглашение было установлено разработчиком программного обеспечения (Mathworks).

неправильно. Никто не говорит, что вы должны нормализовать результат БПФ. Если вы хотите, вы можете это сделать.

Кроме того , FFT ничего не знаю о периоде выборки не предполагает . Обратите внимание, что ДПФ может использоваться для данных, которые являются дискретными по своей природе без какой-либо выборки. В зависимости от ваших данных и того, что вы хотите сделать с результатом, вы должны соответственно принять во вниманиеНапример, если вы хотите использовать DFT (реализованный FFT) для аппроксимации непрерывного преобразования Фурье, вы получите следующее выражение:TTT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

где - период выборки, - длина ДПФ, - сигнал непрерывного времени, а - его преобразование Фурье непрерывного времени. Правая часть - это просто ДПФ из выборок , масштабированная по , где мы предполагаем, что соответствующая часть находится в диапазоне , Подробнее об использовании ДПФ для аппроксимации непрерывного преобразования Фурье можно найти в этом ответе .N x ( t ) X ( ω ) ( 1 ) N x ( t ) T x ( t ) t [ 0 , N T ]TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]


2
Для чего нужен понижающий голос? Прокомментируйте, пожалуйста.
Мэтт Л.

1
Я обычно голосую тайным голосованием, но на этот раз сделаю исключение. в зависимости от того, что вы делаете с DFT, безусловно, существуют «лучшие» соглашения, чем другие. (но ни одно соглашение не лучше, чем другие при любых обстоятельствах.)
Роберт Бристоу-Джонсон

5

тем более, что речь идет о соглашении, я не буду подкреплять нелепое соглашение MATLAB и отвечу только правильными и надлежащими соглашениями или соглашениями. то есть индексирование MATLAB для DFT не является правильным и правильным, но я в значительной степени агностик в отношении того, какое из трех общих соглашений о масштабировании.

кроме того, я не ограничиваю и , они могут быть любыми целыми числами, потому что я в значительной степени фанатичен в отношении фундаментального значения дискретного преобразования Фурье: DFT и дискретные ряды Фурье - это одно и то же самое. DFT отображает периодическую последовательность с периодом в другую периодическую последовательность также с периодом и iDFT отображает ее обратно.0n<N0k<Nx[n]NX[k]N

так что

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

также круговая свертка во «временной области» ( ) или «частотной области» ( ) определяется в соответствии со всеми соглашениями:X [ k ]x[n]X[k]

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

таким образом, единственное преимущество одного соглашения над другим (при условии, что оба соглашения действительны) может заключаться в простоте выражения некоторых из теорем.


наиболее распространенное соглашение о масштабировании для DFT:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

имеет преимущество простоты в отношении круговой свертки во «временной области»

DFT{h[n]x[n]}=H[k]X[k]

но есть фактор масштабирования, о котором вам нужно беспокоиться, если вы свернетесь в «частотной области» :

iDFT{W[k]X[k]}=1Nw[n]x[n]

Теорема Парсеваля имеет масштабный фактор, о котором нужно беспокоиться.

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

и теорема двойственности:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

другое общее соглашение о масштабировании для DFT:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

имеет то преимущество, что концептуально немного ближе к ряду Фурье, где - базисные функции Фурье, а - коэффициенты Фурье. поэтому, если вы посмотрите на необработанные данные во временной области и увидите синусоиду с циклами в буфере из выборок и с амплитудой (от нуля до пика) , это будет означать, что .ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

он также имеет больше простоты в отношении круговой свертки в частотной области

iDFT{W[k]X[k]}=w[n]x[n]

но есть фактор масштабирования, о котором вам нужно беспокоиться, если вы свернуты во временной области :

DFT{h[n]x[n]}=1NH[k]X[k]

Теорема Парсеваля имеет масштабный фактор, о котором нужно беспокоиться.

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

и теорема двойственности:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

Соглашение об унитарном масштабировании для ДПФ идентично при масштабировании с обратным и сохраняет энергию при преобразовании или обратном преобразовании:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

свертка либо во временной области, либо в частотной области имеет одинаковый коэффициент масштабирования, о котором следует беспокоиться:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

но теорема Парсеваля не имеет масштабного фактора, о котором нужно беспокоиться.

n=0N1|x[n]|2=k=0N1|X[k]|2

также не теорема двойственности:

i D F T { x [ k ] } = X

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


Говоря о соглашениях DFT, обычно речь идет только о коэффициентах масштабирования, а не об отсутствии индексации. Если вы думали, что я имел в виду индексирование, когда я сказал, что это общее соглашение DSP, то это было недоразумение. Конечно, я ссылался на масштабирование; индексирование совершенно не имеет значения, потому что оно не имеет ничего общего с определением ДПФ (а масштабирование имеет).
Мэтт Л.

это не чертовски "не проблема", когда в MATLAB вы используете max(abs(X))функцию, чтобы найти, где находится спектральный пик, и вы забыли вычесть 1из возвращенного индекса, и вы будете делать с ним математические вычисления. это проблема. и грустный в этом. начало индексации имеет такое же отношение к « определению ДПФ», как и масштабирование. это связано с тем, что бухгалтерия требуется или нет.
Роберт Бристоу-Джонсон

мог бы быть я, но на этот раз это не так :) Но, тем не менее, я не согласен с тем значением, которое вы придаете индексации, но я ценю, что это личное. Опять же, нет негатива, потому что я ценю время, которое вы вложили в ответ.
Мэтт Л.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.