3.2 Spațierea și simetria frecvențelor în DFT/FFT

Deoarece intervalul de eșantionare este Δt secunde și dacă primul eșantion de date (k = 0) se presupune a fi la 0 secunde, al k-lea eșantion de date (k > 0, k întreg) este la kΔt secunde. În mod similar, rezoluția de frecvență fiind Δf (Δf =fs/N) înseamnă că al k-lea eșantion din DFT are loc la o frecvență de kΔf Hz. (De fapt, după cum veți vedea în curând, acest lucru este valabil doar până la aproximativ jumătate din numărul de eșantioane. Cealaltă jumătate reprezintă componente de frecvență negative). În funcție de cum numărul de eșantioane N este par sau impar, puteți avea o interpretare diferită a frecvenței corespunzătoare la al k-lea eșantion al DFT.

Numărul par de eșantioane

De exemplu, să presupunem că N este par și fie p = N/2. Tabelul următor arată frecvența la care corespunde fiecare element al secvenței de ieșire complexe X.

De exemplu, dacă N = 8, p = N/2 = 4, atunci

X [0] DC
X [1] Δf
X [2] 2Δf
X [3] 3Δf
X [4] 4Δf (Frecvența Nyquist)
X [5] -3Δf
X [6] -2Δf
X [7] -Δf

Aici, X[1] și X[7] vor avea aceeași magnitudine, X[2] și X[6] vor avea aceeași magnitudine, și X[3] și X[5] vor avea aceeași magnitudine. Diferența este că, în timp ce X[1], X[2] și X[3] corespund componentelor de frecvențe pozitive, X[5], X[6] și X[7] corespund componentelor de frecvență negativă. Rețineți că X[4] este la frecvența Nyquist. Următoarea ilustrație reprezintă această secvență complexă pentru N = 8.

Rețineți că al p-lea element X[p], corespunde frecvenței Nyquist. Înregistrările negative din coloana a doua dincolo de frecvența Nyquist reprezintă frecvențe negative.

O astfel de reprezentare, în care vedeți atât frecvențele pozitive, cât și cele negative, este cunoscută sub numele de transformare bilaterală.

Număr impar de eșantioane

Acum presupunem că N este impar. Fie p = (N-1)/2. Tabelul următor prezintă frecvența la care corespunde fiecare element al secvenței de ieșire complexe X.

Rețineți că atunci când N este impar, N/2 nu este un număr întreg și astfel nu există nici o componentă la frecvența Nyquist.

De exemplu, dacă N = 7, p = (N-1)/2 = (7-1)/2 = 3 și aveți

X[0] DC
X[1] Δf
X[2] 2Δf
X[3] 3Δf
X[4] -3Δf
X[5] -2Δf
X[6] -Δf

Acum X[1] și X[6] au aceeași magnitudine, X[2] și X[5] au aceeași magnitudine, și X[3] și X[4] au aceeași magnitudine. Dar, în timp ce X[1], X[2] și X[3] corespund frecvențelor pozitive, X[4], X[5] și X[6] corespund frecvențelor negative. Deoarece N este impar, nu există nici o componentă la frecvența Nyquist. Următoarea ilustrație reprezintă tabelul precedent pentru N = 7.

Aceasta este de asemenea o transformare bilaterală, deoarece aveți atât frecvențe pozitive, cât și cele negative.

Transformata Fourier rapidă

Implementarea directă a DFT

pe N eșantioane de date necesită aproximativ N2 operații complexe și este un proces consumator de timp. Totuși, când mărimea secvenței este o putere a lui 2,

N = 2 m pentru m = 1, 2, 3, ...

puteți implementa calculul DFT cu aproximativ Nlog2 (N) operații. Acest lucru face ca calculul DFT să fie mult mai rapid, iar literatura DSP se referă la acești algoritmi ca transformate Fourier rapide (FFT). FFT nu este altceva decât un algoritm rapid pentru calculul DFT atunci când numărul de eșantioane (N) este o putere a lui 2.

Avantajele FFT includ eficiența de viteză și memorie, deoarece VI-ul efectuează transformarea pe loc. Dimensiunea secvenței de intrare, totuși, trebuie să fie o putere a lui 2. DFT poate procesa eficient orice secvență de dimensiuni, dar DFT este mai lent decât FFT și folosește mai multă memorie, deoarece trebuie să stocheze rezultate intermediare în timpul procesării.

Umplerea cu zero

O tehnică folosită pentru a face dimensiunea secvenței de intrare egală cu o putere a lui 2 este de a adăuga zerouri la sfârșitul secvenței, astfel încât numărul total de eșantioane să fie egal cu următoarea putere mai mare a lui 2. De ex., dacă aveți 10 eșantioane ale unui semnal, puteți adăuga șase zerouri pentru a face numărul total de eșantioane egal cu 16 (= 24 - o putere a lui 2). Acest lucru este prezentat mai jos:

În plus, față de a face numărul total de eșantioane o putere a lui doi astfel încât este posibil calculul mai rapid prin utilizarea FFT, umplerea cu zero ajută și la creșterea rezoluției de frecvență (amintim că Δf = fs/N) prin creșterea numărului de eșantioane N.

VI-urile FFT în biblioteca de analiză

Biblioteca de analiză conține două VI-uri care calculează FFT-ul unui semnal: Real FFT și Complex FFT.

Diferența dintre cele două VI-uri este aceea că Real FFT calculează FFT-ul unui semnal cu valoare reală, în timp ce Complex FFT calculează FFT-ul unui semnal cu valoare complexă. Totuși, rețineți că ieșirile ambelor VI-uri sunt complexe.

Majoritatea semnalelor din lumea reală sunt evaluate în mod real și, prin urmare, puteți utiliza Real FFT pentru majoritatea aplicațiilor. Desigur, puteți utiliza și Complex FFT, prin setarea părții imaginare a semnalului la zero. Un exemplu de aplicație în cazul în care ați putea utiliza Complex FFT este când semnalul constă atât în ​​componentă reală, cât și în imaginară. Un astfel de tip de semnal apare frecvent în domeniul telecomunicațiilor, unde modulați o formă de undă printr-o exponențială complexă. Procesul de modulare printr-o exponențială complexă are ca rezultat un semnal complex, după cum se arată mai jos:

Diagrama bloc de mai jos prezintă o versiune simplificată a modului în care puteți genera 10 cicluri de semnal complex:

Exercițiul 3-1

Obiectiv: Afișarea transformatei Fourier bilaterale și unilaterale a unui semnal utilizând Real FFT VI, și observarea efectul de aliasing în spectrul de frecvență.

1. Construiți panoul frontal al VI-ului și diagrama bloc după cum se arată mai jos.

Panoul frontal

Diagrama bloc

Funcția Array Size (Functions » Array subpalette) scalează ieșirea FFT cu numărul de eșantioane astfel încât să obțină amplitudinea corectă a componentelor de frecvență.

Funcția Sine Wave (Functions » Analiză » Signal Generation subpalette) generează o formă de undă sinusoidală în domeniul timp.

Funcția Real FFT (Functions » Analiză » Digital Signal Processing subpalette) calculează FFT a eșantioanelor de date de intrare. Ieșirea funcției Real FFT este împărțită la mărimea FFT (numărul de puncte de date) pentru a obține valorile corecte ale eșantionului.

Funcția Complex to Polar (Functions » Numeric » Complex subpalette) separă ieșirea complexă a FFT în componentele de magnitudine și de fază. Informația de fază este în unități de radiani. Aici afișați numai magnitudinea FFT.

Intervalul de frecvență Δf este dat prin împărțirea frecvenței de eșantionare la numărul de eșantioane.

2. Selectați frecvența (Hz) = 10, frecvența de eșantionare = 100 și numărul de eșantioane = 100. Rulați VI-ul.

Observați traseele formei de undă și spectrului de frecvență.

Deoarece frecvența de eșantionare = # de eșantioane = 100, efectuați eșantionarea pentru o secundă. Astfel, numărul de cicluri ale undei sinusoidale pe care le vedeți în forma de undă în timp este egal cu frecvența (Hz) pe care o selectați. În acest caz, veți vedea 10 cicluri. (Dacă modificați frecvența (Hz) la 5, veți vedea cinci cicluri.)

FFT bilaterală

3. Examinați spectrul de frecvențe (transformata Fourier). Veți observa două vârfuri, unul la 10 Hz și celălat la 90 Hz. Vârful la 90 Hz este de fapt frecvența negativă de 10 Hz. Ceea ce vedeți este cunoscut ca FFT bilaterală, deoarece arată atât frecvențele pozitive, cât și cele negative.

4. Rulați VI-ul cu frecvența (Hz) = 10 și apoi cu frecvența (Hz) = 20. Pentru fiecare caz, notați deplasarea ambelor vârfuri ale spectrului. De asemenea, observați trasarea domeniului timp pentru frecvența (Hz) = 10 și 20. Care dintre ele oferă o reprezentare mai bună a undelor sinusoidale? De ce?

5. Deoarece fs = 100 Hz, puteți eșantiona cu precizie numai semnale care au o frecvență < 50 Hz (frecvența Nyquist = fs/2). Modificați frecvența (Hz) la 48 Hz. Ar trebui să vedeți vârfurile la ± 48 Hz pe graficul spectrului.

6. Acum modificați frecvența (Hz) la 52 Hz. Există vreo diferență între rezultatul pasului 5 și ceea ce vedeți acum pe grafic?

Pentru că 52 > Nyquist, frecvența de 52 este alias la |100 - 52| = 48 Hz.

7. Modificați frecvența (Hz) la 30 Hz și 70 Hz și rulați VI-ul. Există vreo diferență între cele două cazuri? Explică de ce.

8. Salvați acest VI ca FFT_2sided.vi în biblioteca Lvspcex.llb.

FFT unilaterală

9. Modificați diagrama bloc a VI-lui așa cum se arată în diagrama următoare. Ați văzut că FFT a avut o repetare a informațiilor, deoarece conținea informații despre frecvențele pozitive și cele negative. Această modificare arată acum doar jumătate din punctele FFT (numai componentele frecvenței pozitive). Această reprezentare este cunoscută sub denumirea de FFT unilaterală. FFT unilaterală prezintă numai componentele frecvenței pozitive. Rețineți că trebuie să multiplicați componentele frecvenței pozitive cu doi pentru a obține amplitudinea corectă. Componenta DC, totuși, este lăsată neatinsă.

Funcția Egal cu 0? (Functions » Comparison subpalette) testează pentru a vedea dacă indexul matricei este egal cu zero. Dacă da, aceasta corespunde componentei DC și nu trebuie să fie înmulțită cu doi.

10. Rulați VI-ul cu următoarele valori: frecvența (Hz) = 30, frecvența de eșantionare = 100, # de eșantioane = 100.

11. Modificați valoarea frecvenței (Hz) la 70 și ruați VI-ul. Ai observat vreo diferență între acest lucru și rezultatul de la pasul 9?

12. Salvați VI-ul ca FFT_1sided.vi în biblioteca Lvspcex.llb.

Sfârșitul exercițiului 3-1

3.3. Spectrul de putere