頻域分析原理
頻域分析最被大眾所熟知的可能是卡拉OK的音頻頻譜顯示,這里貼一個(gè)來自AVR單片機(jī)的項(xiàng)目 ,其中就用到了FFT來對(duì)語音信號(hào)進(jìn)行分析:
視頻中橫坐標(biāo)為頻率,縱坐標(biāo)為功率,而且能夠?qū)崟r(shí)的反映出語音的頻譜。
FFT是DFT(離散傅里葉變換)的加速算法,最早是由Cooley和Tukey在1965年提出 ,這里面用了很多的技巧,其方向是如何減小計(jì)算過程中所需要的乘法運(yùn)算,另外FFT一次可以計(jì)算N個(gè)點(diǎn),而且隨著N的增大,F(xiàn)FT優(yōu)勢就會(huì)非常明顯。DFT復(fù)雜度(按乘法數(shù)量來計(jì)算)是 ,而FFT復(fù)雜度是 ,參考 .
這里簡單的理解下DFT,假設(shè)我們有一個(gè)待測數(shù)字序列A(A序列是以fs采樣的N點(diǎn)信號(hào),采樣間隔為ts),假設(shè)此序列中暗含一個(gè)頻率為fa的正弦波信號(hào),但是此暗含的信號(hào)幅度和相位我們并不知道是多少,現(xiàn)在我們的目標(biāo)是求出此信號(hào)的的幅度和相位信息。
我們可以使用信號(hào)相關(guān)來解決此問題 ,構(gòu)造2個(gè)頻率均為fa,幅度均為1的正弦和余弦序列B和C,然后用這兩個(gè)序列分別和A序列相乘,然后濾波,最后輸出的兩個(gè)信號(hào)就可以求出幅度和相位,假設(shè)A序列中含有非fa頻率的信號(hào),相乘濾波后幅度為0,表示此序列中的非fa頻率信號(hào)都將被濾除,最后結(jié)果就只有和fa頻率相關(guān)信號(hào)被保留下來。
使用公式描述即:
A信號(hào)序列為:
B信號(hào)序列為:
C信號(hào)序列為:
則兩個(gè)輸出且濾波(信號(hào)求平均)后的結(jié)果是:
通過這兩個(gè)信號(hào)就可以求出X[i]中所含fa信號(hào)的幅度和相位:
式中,當(dāng)i=N時(shí),正弦信號(hào)和余弦信號(hào)相位需要是 的整數(shù)倍,這樣濾波器剛剛好將其他頻率的信號(hào)完全濾除掉,也就是說不會(huì)出現(xiàn)頻譜泄露,所以有: 將上式改寫如下: 若進(jìn)行N點(diǎn)的DFT計(jì)算,只要滿足上式了,就可以保證在第k個(gè)頻率點(diǎn)出現(xiàn)信號(hào),而不會(huì)在DFT中出現(xiàn)頻譜泄露問題。
程序驗(yàn)證
1%--------------------------------------------------------------------------
2% Edited by bbl
3% Date: 2021-10-31(yyyy-mm-dd)
4% FFT計(jì)算
5%--------------------------------------------------------------------------
6fa = 200.1953125e6; % 信號(hào)頻率,不出現(xiàn)頻譜混疊
7% fa = 200e6; % 信號(hào)頻率,出現(xiàn)頻譜混疊
8A0 = 1; % 信號(hào)幅度
9fs = 1e9; % 采樣率
10Nfft = 1024; % FFT點(diǎn)數(shù)
11wa = 2*pi*fa;
12ts = 1/fs;
13t = 0:ts:ts*(Nfft-1); % 構(gòu)造時(shí)間序列
14Vn = 1e-3*randn(1,Nfft); % 構(gòu)造噪聲
15y = A0*sin(wa*t)+Vn; % 構(gòu)造信號(hào)序列,加入了噪聲方便觀察
16X = fft(y, Nfft); % 計(jì)算FFT
17Amp = 2*abs(X)/Nfft; % 計(jì)算幅度
18Amp_log = 20*log10(Amp); % 幅度轉(zhuǎn)換為dB
19f = linspace(0, fs/2, Nfft/2+1)*1e-6;
20plot(f, Amp_log(1:Nfft/2+1), '-r', 'LineWidth', 1);
21grid on;
22ylim([-100,10]);
23ylabel('Amp/dBFS');
24xlabel('freq/MHz');
25title(sprintf('FFT, fs=%0.2fM Hz, fa=%0.8fM Hz', fs*1e-6,fa*1e-6));
仿真結(jié)果:
若將fa修改為200.1953125M,得到:
波形正常.
若將fa修改為200.0000000M,得到:
出現(xiàn)了頻譜混疊.
小程序?qū)崿F(xiàn)
電路設(shè)計(jì)小工具中實(shí)現(xiàn)的是計(jì)算fa值,使得在FFT計(jì)算過程中不會(huì)出現(xiàn)頻譜泄露,當(dāng)然也可以從給定輸出頻率計(jì)算出最接近的不會(huì)出現(xiàn)頻譜泄露問題的頻率點(diǎn)。本例中是輸入200MHz,查看最接近200MHz而不出現(xiàn)頻譜泄露的頻率點(diǎn):
也可以計(jì)算一個(gè)Bin內(nèi)的頻率帶寬:
當(dāng)然,此小程序能顯示當(dāng)前信號(hào)落在那個(gè)奈奎斯特區(qū)域:
表示fa信號(hào)落在第二奈奎斯特區(qū)域。
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634621 -
AVR
+關(guān)注
關(guān)注
11文章
1123瀏覽量
78642 -
頻域分析
+關(guān)注
關(guān)注
0文章
20瀏覽量
12733
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論