MATLAB: і масштабування


11

У MATLAB виводи fftта / або ifftфункції часто вимагають додаткової обробки, перш ніж їх розглядати для аналізу.

Я чув багато різних думок щодо того, що правильно:

  • Масштабування

    Mathworks стверджує, що fftі ifftфункції засновані на таких рівняннях:

    Х[к]=11н=1Nх[н]е-j2π(к-1)(н-1)N,де1кNх[н]=1Nк=1NХ[к]е+j2π(к-1)(н-1)N,де1нN
  • Масштабування за довжиною сигналу

    Мої однолітки зазвичай масштабують дані за допомогою відразу після обробки . (Ми не враховуємо необроблені дані перед масштабуванням.)1Nfft
    fft

    %% Виконайте ффт
    X_f = fft (x, n_sample, 1) / n_sample; % fft має бути нормалізовано за кількістю вибірок у даних. % Цю умову встановив розробник програмного забезпечення (Mathworks).

    Це правильно?

    1. Якщо так, то чому ifftфункція MATLAB очікує, що ми вже не масштабували на 1/N ?
    2. Чи є ifftфункція MATLAB або функція, яка не масштабується автоматично на 1/N ?

    Як варіант, чи є краща конвенція, яку ми повинні використовувати, розміщуючи 1/N ? Наприклад, розміщення 1/N в, fftа не ifft, або розміщення 1/N в обох рівняннях, а не 1/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
BTW, kando просто констатує його таким, яким він є (з MATLAB): але я мушу сказати, що ця провідна конвенція MATLAB ставить DC у бін №1 (або амплітуду частотної компоненти у bin ) веде мене на ебать нутс !!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
Роберт Брістоу-Джонсон

Відповіді:


6

Від того, чи слід масштабувати прямий FFT на 1 / N, залежить від того, який результат ви хочете для подальшого аналізу: енергія (збереження ідентичності Парсевала) або амплітуда (вимірювання висоти чи вольт тощо).

Якщо ви хочете виміряти або проаналізувати енергію, то не масштабуйте на 1 / N, і довший синусоїд тієї ж амплітуди дасть більший результат FFT, пропорційний більшої енергії більш тривалого сигналу.

Трохи частіше, якщо ви хочете виміряти або проаналізувати амплітуди, то для отримання більш тривалої синусоїди (таким чином, з більшою сумарною енергією з точно такою ж амплітудою) можна отримати приблизно такий же результат FFT, як і коротший сигнал, вам потрібно буде зменшити масштаб Підсумок FFT за співвідношенням, пропорційним довжині. Коефіцієнт може бути довідковою / довжиною / N, яка іноді дорівнює 1 / N, якщо посилення вводу системи становить 1,0 для будь-яких розмірів або одиниць, включаючи розміри часового інтервалу, які ви вирішите використовувати для подальшого аналізу. Вам потрібно масштабувати пропорційно, оскільки DFT - це підсумок: чим більше ви підсумовуєте подібні елементи, тим більший результат.

Тому. Енергія або амплітуда. Якого ти хочеш?

Тепер, якщо зменшити масштаб вперед FFT, ви не повинні масштабувати обернену, щоб IFFT (FFT (x)) == x. Або робити навпаки.

Мені здається, що 1 / sqrt (N) для масштабування чи то, коли потрібна формальна симетрія для певного доказування, або при побудові якогось апаратного трубопроводу, де затримка та / або кількість арифметичних одиниць / воріт для DFT і для IDFT потрібно бути ідентичним. Але ви не отримаєте ані хорошого прямого вимірювання ані енергії, ані амплітуди для будь-якого типового типу інженерного аналізу.


Коли ви говорите "якщо ви хочете виміряти енергію, то не масштабуйте на " ... чи не потрібно мені масштабувати на щоб перетворення було унітарним і зберігало енергію? Або це тому, що мені потрібно квадратувати весь сигнал, щоб отримати енергію, яка ефективно дає ? Якщо це правда, однак, то , що є спектр масштабується на насправді показує мені тоді? 1/N1/N1/N1/N
LCsa

Крім того, якщо говорити "таким чином, з більшою кількістю енергії з точно такою ж амплітудою" ... ти б не мав на увазі "частоту"?
LCsa

7

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

Коментар

% fft має бути нормалізовано за кількістю вибірок у даних.
% Цю умову встановив розробник програмного забезпечення (Mathworks).

неправильно. Ніхто не каже, що ви повинні нормалізувати результат FFT. Якщо ви хочете, ви можете це зробити.

Також FFT не передбачає нічого про період вибірки . Зауважте, що DFT може бути використаний для даних, дискретних за своєю природою, без участі вибірки. В залежності від ваших даних і про те , що ви хочете зробити з результатом, ви повинні прийняти до уваги відповідно. Наприклад, якщо ви хочете використовувати DFT (реалізований FFT) для наближення безперервного перетворення Фур'є, ви отримуєте таке вираження:TT

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

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


2
Для чого суперечка? Будь ласка, прокоментуйте.
Метт Л.

1
Я зазвичай голосую таємним голосуванням, але цього разу я буду виняток. залежно від того, що робити з DFT, звичайно є "кращі" конвенції, ніж інші. (але жодна
умова

5

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

Крім того, я не обмежую ні 0 k < N , вони можуть бути будь-якими цілими числами, тому що я в значній мірі фашистський відносно основного значення дискретної трансформації Фур'є: DFT і дискретна серія Фур'є - це одне і те саме. DFT відображає періодичну послідовність x [ n ] з періодом N в іншу періодичну послідовність X [ k ] також з періодом N і iDFT повертає її назад.0н<N0к<Nx[n]NX[k]N

так X [ k + N ] = X [ k ]

х[н+N]=х[н] нZ
Х[к+N]=Х[к] кZ

також кругові згортки або в "часовій області" ( ), або в "частотній області" ( X [ k ] ) визначаються послідовно з усіма умовами:х[н]Х[к]

W [ k ] X [ k ] N - 1 i =

год[н]х[н]i=0N-1год[i]х[н-i]=i=0N-1х[i]год[н-i]
W[к]Х[к]i=0N-1W[i]Х[к-i]=i=0N-1Х[i]W[к-i]

тому єдиною перевагою однієї конвенції над іншою (якщо припустити, що обидві конвенції є дійсними) може бути простість вираження деяких теорем.


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

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

має перевагу простоти щодо кругової згортки у "часовій області"

DЖТ{год[н]х[н]}=Н[к]Х[к]

але є масштабуючий фактор, про який потрібно потурбуватися, якщо ви переходите до "частотної області" :

iDЖТ{W[к]Х[к]}=1Nш[н]х[н]

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

н=0N-1|х[н]|2=1Nк=0N-1|Х[к]|2

і теорема про дуальність:

DЖТ{Х[н]}=Nх[-к]
iDЖТ{х[к]}=1NХ[-н]

інша загальна норма масштабування для DFT:

iDЖТ{Х[к]}х[н]к=0N-1Х[к]е+j2πкн/NDЖТ{х[н]}Х[к]=1Nн=0N-1х[н]е-j2πкн/N

еjωкнеj(2πк/N)нХ[к]х[н]кNА|Х[к]|=|Х[-к]|=|Х[N-к]|=А2

вона також має більшу простоту щодо кругової згортки в частотній області

iDЖТ{W[к]Х[к]}=ш[н]х[н]

але є масштабуючий фактор, про який потрібно потурбуватися, якщо ви перебуваєте у часовій області :

DЖТ{год[н]х[н]}=1NН[к]Х[к]

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

1Nн=0N-1|х[н]|2=к=0N-1|Х[к]|2

і теорема про дуальність:

DЖТ{Х[н]}=1Nх[-к]
iDЖТ{х[к]}=NХ[-н]

унітарне масштабування конвенція для ДПФА є ідентичною при масштабуванні з його зворотного і зберігає енергію через перетворення або зворотне перетворення:

DЖТ{х[н]}Х[к]1Nн=0N-1х[н]е-j2πкн/NiDЖТ{Х[к]}х[н]=1Nк=0N-1Х[к]е+j2πкн/N

згортання в часовій або частотній областях має однаковий коефіцієнт масштабування, про який слід турбуватися:

DЖТ{год[н]х[н]}=1NН[к]Х[к]

iDЖТ{W[к]Х[к]}=1Nш[н]х[н]

але теорема Парсевала не має ступеня масштабування.

н=0N-1|х[н]|2=к=0N-1|Х[к]|2

ні теорема про дуальність:

DЖТ{Х[н]}=х[-к]
iDЖТ{х[к]}=Х[-н]


Якщо говорити про конвенції DFT, то, як правило, йдеться лише про коефіцієнти масштабування, а не про неістотність індексації. Якщо ви думали, що я маю на увазі індексацію, коли я сказав, що це звичайна конвенція ДСП, то це було непорозуміння. Звичайно, я посилався на масштабування; індексація абсолютно не має значення, оскільки вона не має нічого спільного з визначенням DFT (і масштабування має).
Метт Л.

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

я міг би бути я, але цього разу це не так :) Але все-таки я не згоден з важливістю, яку ви надаєте індексації, але я ціную це особисте. Знову ж таки, немає жодної голоси, оскільки я ціную час, який ви вклали у відповідь.
Метт Л.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.