问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Matlab标准FFT绘制方法(详细注释)

创作时间:
作者:
@小白创作中心

Matlab标准FFT绘制方法(详细注释)

引用
CSDN
1.
https://m.blog.csdn.net/m0_56841583/article/details/144265824

Matlab官方文档中有fft的使用例程。

命令行窗口输入help fft,回车。
点击fft的参考页超链接,跳转到页面。
这是一个带有噪声的信号示例,为了更好地分析,将噪声部分删除,并将代码打下来,便于大家使用分析。

  
% 完整代码
Fs = 1000;                              
T = 1/Fs;                  
L = 1500;             
t = (0:L-1)*T;
X = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
figure;
plot(1000*t,X)
title('Signal')
xlabel('t (milliseconds)')
ylabel('X(t)')
Y = fft(X);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
figure;
plot(f,P1) 
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')  

详细解释每一句的含义。

  
% 生成信号
Fs = 1000;                                   %采样率1000HZ                           
T = 1/Fs;                                    %采样周期即采样间隔              
L = 1500;                                    %采样总点数         
t = (0:L-1)*T;                               %时间向量,对应着每个采样点的时间值
X = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);    %模拟采样回来的信号
figure;                                      %新建图层
plot(1000*t,X)                               %画图
title('Signal')                              %更改图标题
xlabel('t (milliseconds)')                   %更改x坐标轴名称
ylabel('X(t)')                               %更改y坐标轴名称  

原始信号图,频率50Hz与120Hz混合的信号图。

  
% FFT代码
Y = fft(X);                                        %fft是快速傅里叶变换函数
P2 = abs(Y/L);  
%abs函数计算Y的绝对值,得到频谱的幅度。因为FFT的结果是复数,取绝对值可以得到幅度。
P1 = P2(1:L/2+1); %FFT结果是对称的,通常只关心正频率部分,取一半
P1(2:end-1) = 2*P1(2:end-1); 
%这里2:end-1,为什么没有处理索引1和索引end,是因为,索引1是直流分量,
%在P2 = abs(Y/L)已经处理过了。索引end是奈奎斯特频率,位于频谱的中间,
%并没有重复或对称,所以不需要乘2。
f = Fs*(0:(L/2))/L; %频率向量,表示每个元素对应的频率
figure;
plot(f,P1) 
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|') %绝对值为幅值  

从图中可以清晰看出两个频率50Hz与120Hz,并且50Hz的幅值对应0.7,120Hz的幅值对应1。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号