matlab 信号的频域分析

Posted 胡刚2021

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 信号的频域分析相关的知识,希望对你有一定的参考价值。

%画出频率为100Hz和300Hz的复合正弦波
Fs=5120;N=1024;
dt=1.0/5120;T=dt*N;
t=linspace(0, T, N);
x=10*sin(2*pi* 100 *t) + 10/3*sin(2*pi* 3*100 *t);
plot(t, x);

%对复合正弦波进行傅里叶变换,得到一个复数
y=fft(x, N);
a=real(y);b=imag(y);%a为y的实部,b为y的虚部
figure;
subplot(2, 1, 1);plot(a);
subplot(2, 1, 2);plot(b);

%A1为y的幅值,Q1为y的相位
A1=abs(y);
Q1=angle(y)*180/pi;%算出弧度,角度是angle(y),角度变弧度需要 *180/pi
figure;
subplot(2, 1, 1);plot(A1);
subplot(2, 1, 2);plot(Q1);


下面是频率为100Hz和300Hz的复合正弦波

傅里叶变换后的实部(上图)和虚部(下图)图

傅里叶变换后的幅值图(上图)和相位图(下图)

实际上,上面的幅值和相位图存在问题
问题1:显示了负频率部分

问题2:X坐标不是频率
问题3:幅值量纲未还原,幅值应该是 10,10/3

更改后的代码

%A1=abs(y);Q1=angle(y)*180/pi;
%figure;
%subplot(2, 1, 1);plot(A1);
%subplot(2, 1, 2);plot(Q1);%算出弧度,角度是angle(y),角度变弧度需要 *180/pi

f=linspace(0, Fs/2, N/2);%定义X坐标为频率,且频率的范围是[0, Fs/2]
A1=abs(y)/(N/2);%还原幅值的量纲,使它最终变为 1010/3
Q1=angle(y)*180/pi;%算出弧度,角度是angle(y),角度变弧度需要 *180/pi
figure;
subplot(2, 1, 1);
plot(f, A1(1:N/2));
subplot(2, 1, 2);
plot(f, Q1(1:N/2));


在之前的代码的基础上增加功率谱对数功率谱
功率谱就是对幅值进行平方
对数功率谱是对功率谱进行取对数运算

A2=A1.^2;%功率谱
P2=20*log10(A2);%对数功率谱,dB=20*log(P)
figure;
subplot(2, 1, 1);
plot(f, A2(1:N/2));%只画数组A2的[1,N/2]部分
subplot(2, 1, 2);
plot(f, P2(1:N/2));%只画数组P2的[1,N/2]部分

功率谱是上图,对数功率谱是下图,对数功率谱可以更加明显地看出来功率谱中幅值比较小地部分

下面是方波信号的功率谱和对数功率谱,可以非常明显的体会到为什么使用对数功率谱。

以上是关于matlab 信号的频域分析的主要内容,如果未能解决你的问题,请参考以下文章

随机过程 3 - 随机过程的频域分析1 - 功率谱

实验三 基于MATLAB的离散时间信号的频域分析

matlab 信号的频域分析

频域分析实践介绍

信噪比

信号实验(03)连续时间系统的频域分析