文章目录
- 前言
- 一、MATLAB仿真代码
- 二、仿真结果画图
前言
首先使用MATLAB生成一段余弦信号,然后对其进行FFT变换,画出其频谱。
一、MATLAB仿真代码
代码如下:
f = [50, 100]; % 两个余弦波的频率
fs = 1000; % 采样率
Ts = 1/fs; % 采样时间间隔
L = 1000; % 信号长度,单位sample
t = (0:L-1)*Ts; % 时间向量
x1 = cos(2*pi*f(1)*t); % 余弦波1
x2 = cos(2*pi*f(2)*t); % 余弦波2
X = [x1; x2]; % 余弦波1和2组成矩阵,每行一个余弦波
% 时域波形画图
figure()
for i = 1:2
subplot(2,1,i)
plot(t(1:100),X(i,1:100),'LineWidth',1.5)
title(['余弦波',num2str(i),'的时域波形(f=',num2str(f(i)),'Hz)'])
grid on
xlabel('t/s')
ylabel('cos(2*pi*f*t)')
end
% 时域序列的长度不是2的次幂值,将其扩展为比当前长度大的下一个最小的2的次幂值。扩展的值为补零。
n = 2^nextpow2(L);
% 指定dim参数沿X的行(即对每个余弦信号)进行fft运算
dim = 2;
Y = fft(X,n,dim);
% 计算每个信号的双边幅度频谱和单边幅度频谱
P2 = abs(Y/L);
P1 = P2(:,1:n/2+1);
P1(:,2:end-1) = 2*P1(:,2:end-1);
% 在频域内,为单个图窗中的每一行绘制单边幅度频谱
figure()
for i=1:2
subplot(2,1,i)
plot(0:(fs/n):(fs/2-fs/n),P1(i,1:n/2),'LineWidth',1.5)
grid on
title(['余弦波',num2str(i),'的幅度谱(f=',num2str(f(i)),'Hz)'])
xlabel('频率(Hz)')
ylabel('频谱幅度|Y|')
end
二、仿真结果画图
时域波形图:
余弦波的频谱(单边谱):