збито фазовим спектром!


9

Дуже простий експеримент MATLAB:

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x))));  

І ось результат: введіть тут опис зображення

Тепер внесено незначну зміну до вищевказаного фрагмента коду; скорочення тривалості часу лише на 1 зразок:

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1 - 1/fs;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x)))); 

А фазовий спектр стає абсолютно божевільним:

введіть тут опис зображення

Запитання:

  1. У першому сюжеті я сподівався побачити нульову фазу у біні 700, що відповідає позитивній частоті 200 у цьому прикладі. Здається, це не так. По-друге, я не розумію лінійних частин графіка на графіку 1. Я ціную фазові компоненти, які потенційно можуть існувати через так званий числовий шум, але як тоді цей шум може бути таким "лінійним" у фазі?

  2. У другому сюжеті, чому видалення лише одного зразка могло б настільки різко вплинути на фазовий графік?

  3. Чи я тут роблю щось принципово неправильне?

Відповіді:


18

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

Малюнки можуть допомогти. Ось сюжети величини та фази для першого випробування:

x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

введіть тут опис зображення

введіть тут опис зображення

А другий:

x = Cos[2.0 \[Pi] 200 Range[0, 1 - 1/1000, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

введіть тут опис зображення

введіть тут опис зображення

То що тут відбувається? Другий - це найлегше пояснити. По-перше, ЗПТ другого має всюди нульову амплітуду, за винятком двох піків, видимих ​​у спектрі величин; це випливає, оскільки визначення FFT з використанням 1000 точок передачі даних повертає частоти форми за , і, отже, ваш сигнал падає точно на відрив частоти. Як результат, в інших 998 точок ваш сигнал цілком обумовлений машинним шумом через помилки з плаваючою комою, а значить, ваш фазовий спектр є нісенітницею, оскільки це буквально фаза псевдовипадкових чисел.к/10000к999 рік

Однак для першого визначення FFT охоплює частоти форми для , тоді як частота вашого сигналу - , що не має форми . В результаті ваш сигнал розширюється спектральним витоком , і він буде ненульовим майже скрізь. Я не буду коментувати фізичну форму фазового сюжету, але скажу, що він допускає закриту аналітичну форму.к/10010к1000200/1000к/1001

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

ДОДАТОК: Ось кілька фотографій з Mathematica, які ілюструють принцип, який я зазначив у попередньому пункті:

hue = Compile[{{z, _Complex}}, {(1.0 Arg[-z] + \[Pi])/(2 \[Pi]), 
Exp[1 - Max[Abs[z], 1]], Min[Abs[z], 1]}, 
CompilationTarget -> "C", RuntimeAttributes -> {Listable}];
L = 500;
data = Table[Boole[x <= 11 && y <= 11], {x, L}, {y, L}];
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-5, -5}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-4, -4}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {0, 0}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення

Усі три зображення є двовимірними перетвореннями Фур'є одного і того ж вхідного сигналу ( квадратних площі 1, оброблених нулями довжиною ), але входи циклично обертаються на 5, 4 і 0, і 200 точок даних. Спектри величин (кодуються яскравістю пікселів) однакові, але фазові спектри зовсім інші! Фазове кодування робиться так, що 1 карти червоного кольору, карти зеленого кольору, карти блакитного кольору та11×11500×500i-1-iкарти на фіолетовий. Це те, що я маю на увазі, коли кажу, що фазові спектри інваріантно не зміщуються і тому не піддаються візуальному розумінню людини. Наприклад, при циклічному зсуві 200 точок даних неможливо сказати, що відбувається у фазі, оскільки це просто виглядає статично, але вхідний сигнал не є складнішим, ніж інші випадки введення.


0

Якщо ви хочете змінити частоту сигналу або довжину FFT, щоб сигнал змінювався між періодичним і не зовсім періодичним у діафрагмі FFT, і не хочете бачити, як змінюється фаза відрізка величини для цього сигналу, можна посилати початкову фазу сигналу до центру, якщо діафрагма FFT замість початку (для породженого sin (t), в центр масиву FFT поставити t = 0).


-1

Сайт Gaussian Waves детально розповідає про частину фази та її випадкову поведінку: лише питання помилки з плаваючою комою, як сказав DumpsterDoofus

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.