我是靠谱客的博主 活力发卡,最近开发中收集的这篇文章主要介绍Matlab使用fft画出信号频谱图的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

做雷原作业,需要对信号进行频谱分析,网上一搜太乱了,很多不是我想要的,特此整理。
DSP还没学到fft,就不对fft原理进行详细解释了,直接上代码。

fs=500;%采样率
f1=5;%信号频率
f2=10;%信号频率
T=1;%时宽1s
n=round(T*fs);%采样点个数
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,其时域波形图如下:

转换为频域的关键函数是X = fftshift(fft(x./(n)));一定注意需要除以总样本数n,然后用fftshift将曲线挪一下位置。
做完这步操作后,得出的是双边频谱,频率范围从-fs/2到fs/2,这是因为奈奎斯特采样定理,给定采样频率为fs,那么原信号的最大频率不超过fs/2。横坐标的点数和时域信号的采样点数相同,这由离散傅里叶变换的性质给出。

绘制频谱幅度图如下:

可以看到,直流分量的幅度是3,这与时域的幅度相同,5Hz和10Hz的幅度分别为0.5和1,这比时域的幅度减小了一半,这是由于这个频谱图是双边频谱。沿着x=0线“对折”过去加起来,就变成单边频谱,频域幅度就和时域幅度对应上了。

到此这篇关于Matlab使用fft画出信号频谱的文章就介绍到这了,更多相关Matlab画fft信号频谱内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是活力发卡为你收集整理的Matlab使用fft画出信号频谱图的方法的全部内容,希望文章能够帮你解决Matlab使用fft画出信号频谱图的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(201)

评论列表共有 0 条评论

立即
投稿
返回
顶部