Matlab使用fft畫出信號頻譜圖的方法
做雷原作業(yè),需要對信號進行頻譜分析,網(wǎng)上一搜太亂了,很多不是我想要的,特此整理。
DSP還沒學到fft,就不對fft原理進行詳細解釋了,直接上代碼。
fs=500;%采樣率
f1=5;%信號頻率
f2=10;%信號頻率
T=1;%時寬1s
n=round(T*fs);%采樣點個數(shù)
t=linspace(0,T,n);%時域橫坐標
x = 3+cos(2*pi*f1*t) + 2.*cos(2*pi*f2*t);%形成三頻信號,注意第二個頻率信號幅度為2,直流幅度為3
figure(1);
plot(t,x);%畫時域圖
xlabel("t/s")
grid on
X = fftshift(fft(x./(n))); %用fft得出離散傅里葉變換
f=linspace(-fs/2,fs/2-1,n);%頻域橫坐標,注意奈奎斯特采樣定理,最大原信號最大頻率不超過采樣頻率的一半
figure(2)
plot(f,abs(X));%畫雙側頻譜幅度圖
xlabel("f/Hz")
ylabel("幅度")
grid on
顯然,該信號有三個頻率分量,直流(0頻),5Hz和10Hz,對應的幅度分別為3、1、2,其時域波形圖如下:

轉換為頻域的關鍵函數(shù)是X = fftshift(fft(x./(n)));一定注意需要除以總樣本數(shù)n,然后用fftshift將曲線挪一下位置。
做完這步操作后,得出的是雙邊頻譜,頻率范圍從-fs/2到fs/2,這是因為奈奎斯特采樣定理,給定采樣頻率為fs,那么原信號的最大頻率不超過fs/2。橫坐標的點數(shù)和時域信號的采樣點數(shù)相同,這由離散傅里葉變換的性質給出。
繪制頻譜幅度圖如下:

可以看到,直流分量的幅度是3,這與時域的幅度相同,5Hz和10Hz的幅度分別為0.5和1,這比時域的幅度減小了一半,這是由于這個頻譜圖是雙邊頻譜。沿著x=0線“對折”過去加起來,就變成單邊頻譜,頻域幅度就和時域幅度對應上了。
到此這篇關于Matlab使用fft畫出信號頻譜的文章就介紹到這了,更多相關Matlab畫fft信號頻譜內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Scala函數(shù)式編程專題--scala基礎語法介紹
這篇文章主要介紹了scala基礎語法的的相關資料,文中講解非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-06-06
微信支付jsapi缺少參數(shù) total_fee 錯誤分析與解決方法
這篇文章主要介紹了微信支付jsapi缺少參數(shù) total_fee 錯誤分析與解決方法,需要的朋友可以參考下2018-03-03
詳解windows 環(huán)境下搭建electricSearch+kibana
這篇文章主要介紹了windows 環(huán)境下搭建electricSearch+kibana,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05

