(37)使用MATLAB画出余弦波的频谱

文章目录


前言

首先使用MATLAB生成一段余弦信号,然后对其进行FFT变换,画出其频谱。


一、MATLAB仿真代码

代码如下:

c 复制代码
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

二、仿真结果画图

时域波形图:

余弦波的频谱(单边谱):


相关推荐
枫叶丹41 分钟前
【Qt开发】显示类控件(二)-> QLCDNumber
开发语言·qt
Flash.kkl4 分钟前
优先算法——专题十一:字符串
算法
励志不掉头发的内向程序员34 分钟前
STL库——AVL树
开发语言·c++·学习
晨非辰3 小时前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
励志码农4 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
天高云淡ylz5 小时前
子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问
开发语言·php
汉克老师7 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
希望20177 小时前
Golang Panic & Throw & Map/Channel 并发笔记
开发语言·golang
朗迹 - 张伟7 小时前
Golang安装笔记
开发语言·笔记·golang
yzx9910137 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化