Ano ang Ginagawa ng FFT sa MATLAB?

Ano Ang Ginagawa Ng Fft Sa Matlab



Ang Mabilis na Fourier Transform (FFT) ay tumutukoy sa isang lubos na na-optimize na bersyon ng Discrete Fourier Transform (DFT) na binabago ang mga discrete signal sa pamamagitan ng time domain sa frequency domain. Ang dalas ng nilalaman, yugto, at iba pang mga aspeto ng signal ay maaaring obserbahan sa pamamagitan ng FFT mga pagkalkula.

Ang artikulong ito ay magtuturo sa amin tungkol sa paggawa ng FFT sa MATLAB.

Pag-unawa sa FFT

Ang Mabilis na Fourier Transform (FFT) kumakatawan sa espesyal na pamamaraan na tumutulong sa amin na maunawaan ang mga signal sa ibang paraan. Karaniwan, ang mga signal ay ipinapakita bilang mga sequence ng mga numero na nagbabago sa paglipas ng panahon, ngunit may FFT, makikita natin kung ano ang iba't ibang frequency sa signal at kung gaano kalakas ang mga ito. Ito ay tulad ng pagsira ng isang senyas sa mga musikal na nota nito at nakikita kung gaano kalakas ang bawat nota.







Ang FFT algorithm ay gumagawa ng maraming kumplikadong matematika sa data ng signal. Kinukuha nito ang signal at hinahati ito sa mas maliliit na bahagi, pagkatapos ay kinakalkula ang mga frequency at ang kanilang lakas para sa bawat bahagi. Sa wakas, pinagsasama nito ang lahat ng mga resulta upang bigyan kami ng larawan ng dalas ng nilalaman ng signal, mga ugnayan ng phase, at iba pang mahahalagang katangian.



Ginagamit ang diskarteng ito sa maraming larangan dahil nakakatulong ito sa amin na pag-aralan at mas maunawaan ang mga signal. Halimbawa, sa pagpoproseso ng signal , pwede natin gamitin FFT upang i-filter ang hindi gustong ingay o makakita ng mga partikular na pattern. Sa pagsusuri ng audio , makikilala natin ang iba't ibang tunog o masusuri ang kalidad ng isang audio recording. Sa pagpoproseso ng imahe , FFT makakatulong sa amin na suriin ang mga spatial na frequency sa larawan. At sa telekomunikasyon, FFT ay ginagamit para sa epektibong pagpapadala at pagtanggap ng mga signal.



Paano Gamitin ang FFT sa MATLAB

Nagbibigay ang MATLAB ng built-in na function na tinatawag fft na nagpapahintulot sa amin na gumanap Mabilis na Fourier Transform (FFT) pagkalkula sa mga signal. Ang function na ito ay madaling gamitin at nag-aalok ng iba't ibang mga opsyon para sa pagsusuri at pagmamanipula ng mga signal sa frequency domain:





Ang syntax para sa paggamit ng FFT Ang mga function sa MATLAB ay ibinigay sa ibaba:

F = fft ( x )

F = fft ( x,n )

F = fft ( x,n, madilim )

dito:



F= fft(x) nagbubunga ng kalkulasyon ng Discrete Fourier Transform (DFT) ng x gamit ang Mabilis na Fourier Transform (FFT) algorithm.

  • Kung ang x ay kumakatawan sa isang vector, fft(x) nagbubunga ng Fourier transform ng vector.
  • Kung ang x ay kumakatawan sa isang matrix, fft(x) nagbibigay ng Fourier transform ng bawat column sa pamamagitan ng pagtrato sa bawat column bilang vector.

F = fft(x,n) nagbubunga ng n-point DFT. Ang F ay may kaparehong laki ng x kapag walang ibinigay na halaga.

  • Kung ang x ay isang vector at ang haba nito ay mas mababa sa n, ang x ay makakakuha ng padding na may mga trailing zero hanggang umabot ito sa n.
  • Kung ang x ay isang vector at ang haba nito ay lumampas sa n, ito ay pinutol sa ganoong haba n.
  • Kung ang x ay isang matrix, ang bawat column ay itinuturing bilang isang vector case.

F = fft(x,n,dim) nagbubunga ng Fourier Transform kasama ang ibinigay na dim na dim. Sabihin nating, fft(x, n, 2) nagbibigay ng n-point Fourier transform para sa bawat hilera kung ang x ay kumakatawan sa isang matrix.

Ang mga sumusunod na halimbawa ay naglalarawan sa paggawa ng FFT function sa MATLAB.

Halimbawa 1

Pwede natin gamitin FFT sa MATLAB upang ipakita ang pagbuo at pagsusuri ng isang senyas na may mga tiyak na bahagi ng dalas at random na ingay.

Halimbawa:

ls = 2000 ;

fs = 1500 ;

ts = 1 /fs;

tv = ( 0 :ls- 1 ) *ts;

f = 0.6 * wala ( 2 * pi * limampu *tv ) + 3 * randn ( laki ( tv ) ) + wala ( 2 * pi * 120 *tv ) ;

balangkas ( 1000 *tv ( 1 : limampu ) ,f ( 1 : limampu ) )

xlabel ( 'tv (ms)' )

ylabel ( 'f(tv)' )

pamagat ( ' Sirang Signal na mayroong Zero-Mean Random Noise' )

F = fft ( f ) ;

PS2 = abs ( F/ ls ) ;

PS1 = PS2 ( 1 : ls / 2 + 1 ) ;

PS1 ( 2 :end- 1 ) = 2 *PS1 ( 2 :end- 1 ) ;

f = fs* ( 0 : ( ls / 2 ) ) / ls ;

balangkas ( f, PS1 )

pamagat ( 'Amplitude Spectrum (Single-Sided) PS1 para sa f(t)' )

xlabel ( 'f(Hz)' )

ylabel ( '|PS1(f)|' )

Ang ibinigay na code ay bumubuo ng isang signal na may haba na 2000 sample (ls) , isang dalas ng sampling ng 1500 Hz (fs) , at a panahon ng sampling (ts) . Ang time vector (tv) ay nilikha batay sa mga parameter na ito. Ang signal f ay binubuo ng kumbinasyon ng mga sinusoidal na bahagi sa 50 Hz at 120 Hz, kasama ng zero-mean na random na ingay. Pagkatapos ay naka-plot ito ng isang segment ng unang 50 sample. Ang code ay higit pang nag-compute ng FFT ng signal at kinakalkula ang amplitude spectrum (PS1) . Sa wakas, ang amplitude spectrum ay naka-plot laban sa kaukulang mga frequency (f) sa Hz.

Halimbawa 2

Narito ang isa pang halimbawa na gumagamit ng FFT function sa MATLAB para sa Gaussian pulse transformation sa pamamagitan ng time domain sa frequency domain.

fs = 500 ;

ts = - 0.5 : 1 /fs: 0.5 ;

ls = haba ( ts ) ;

f = 1 / ( 4 * sqrt ( 2 * pi * 0.02 ) ) * ( exp ( -ts.^ 2 / ( 2 * 0.02 ) ) ) ;

balangkas ( ts,f )

xlabel ( 'Oras (t)' )

ylabel ( 'f(t)' )

pamagat ( 'Time Domain' )

hal = 2 ^ nextpow2 ( ls ) ;

f = fs* ( 0 : ( hal/ 2 ) ) /hal;

F = fft ( f,np ) ;

PF = abs ( F/np ) ;

balangkas ( f,PF ( 1 :hal./ 2 + 1 ) )

xlabel ( '(f)' )

ylabel ( '|PF(f)|' )

pamagat ( 'Dalas na Domain' )

Ang ibinigay na code ay bumubuo ng Gaussian pulse signal sa time domain at sinusuri ang dalas nitong nilalaman gamit ang Mabilis na Fourier Transform (FFT) sa MATLAB. Ang signal ng domain ng oras ay naka-plot, at pagkatapos ay ang FFT ay isinasagawa upang makuha ang representasyon ng frequency domain. Ang resulta amplitude spectrum ay naka-plot laban sa kaukulang mga frequency.

Halimbawa 3

Ang sumusunod na halimbawa ay bumubuo ng tatlong sinusoidal signal na may iba't ibang frequency at inilalagay ang mga ito sa time domain gamit ang FFT function sa MATLAB.

fs = 2500 ;

ts = 1 /fs;

ls = 3000 ;

t = ( 0 :ls- 1 ) *ts;

r1 = wala ( 3 * pi * 60 *t ) ;

r2 = wala ( 3 * pi * 140 *t ) ;

r3 = wala ( 3 * pi * 350 *t ) ;

f = [ r1; r2; r3 ] ;

para sa k = 1 : 3

subplot ( 3 , 1 ,k )

balangkas ( t ( 1 : 250 ) ,f ( k, 1 : 250 ) )

pamagat ( [ 'Walang hilera' , num2str ( k ) , ' (Domain ng Oras)' ] )

wakas

hal = 2 ^ nextpow2 ( ls ) ;

d = 2 ;

F = fft ( f, np, d ) ;

PS2 = abs ( F/ ls ) ;

PS1 = PS2 ( :, 1 :hal./ 2 + 1 ) ;

PS1 ( :, 2 :end- 1 ) = 2 *PS1 ( :, 2 :end- 1 ) ;

para sa k= 1 : 3

subplot ( 3 , 1 ,k )

balangkas ( 0 : ( fs/np ) : ( fs/ 2 -fs/np ) , PS1 ( k, 1 :hal./ 2 ) )

pamagat ( [ 'Walang hilera' , num2str ( k ) , '(Dalas na Domain)' ] )

wakas

Sa code sa itaas, tatlong sinusoidal wave, r1, r2, at r3 ang ipinapakita sa output window sa time domain. Ang frequency domain signal na 'PS1' ay nilikha sa pamamagitan ng paggamit ng FFT function sa mga wave upang kalkulahin ang bawat isa sa kanilang indibidwal na single-side amplitude spectra.

Konklusyon


Ang FFT ay isang mahalagang tool na tumutulong sa amin na maunawaan ang mga signal sa ibang paraan sa pamamagitan ng pagsusuri sa dalas ng nilalaman ng mga ito. Gamit ang built-in na function ng MATLAB, fft, gumaganap FFT nagiging maginhawa ang pag-compute sa mga signal. Binibigyang-daan kami ng function na ito na matutunan ang mahahalagang detalye tungkol sa iba't ibang frequency at ang relatibong intensity ng mga frequency na iyon sa pamamagitan ng pag-convert ng data mula sa time domain patungo sa frequency domain. Ang gabay sa itaas ay mahalaga para sa pagkakaroon ng mas malalim na pag-unawa sa mga katangian ng signal at paggawa ng matalinong mga desisyon sa iba't ibang mga aplikasyon.