MATLAB产生任意信号波形(多周期线性扫频信号)

目录

一、背景

二、MATLAB代码

2.1、单周期时间设置

2.2、三个周期的时间设置

2.3、全部MATLAB代码

2.4、加上频谱

2.5、仿真结果


一、背景

写论文时需要仿真多个周期的线性扫频信号,但是网上的代码多是一个周期,后面试了挺多方法的,后面使用MOD函数时间t求余实现多个周期循环。

二、MATLAB代码

2.1、单周期时间设置

单周期时间设置:仿真的单周期时间默认为1,如果修改单周期时间为x,修改1为x,同时修改mod(t,1)为mod(t,x),即是对x求余即可实现以x为周期的多周期波形。

t=0:0.00001:1-0.00001;%单个周期时间设置

2.2、三个周期的时间设置

 三个周期的时间设置,其他n个周期可以对应修改3为n即可产生n个周期的波形

t=0:0.00001:3-0.00001;%3个周期时间设置

2.3、全部MATLAB代码

t=0:0.00001:3-0.00001;%3对应3个周期,0.00001为精度
f0=5;%扫频起始频率
fe=100;%扫频截止频率
x=chirp(mod(t,1),f0,1,fe);%1代表的是单周期时间
subplot(3,1,1);plot(t,x);title('三个周期的线性扫频信号波形');xlabel('时间(s)');ylabel('幅度(V)');

ft=f0+(fe-f0)*mod(t,1);
subplot(3,1,2);plot(t,ft);title('线性扫频信号频率-时间图');xlabel('时间(s)');ylabel('频率(Hz)');

2.4、加上频谱

如果想要加上频谱。因为求频谱时对多个周期求频谱有一些问题,所以这里针对单周期进行求频谱。之前的代码有问题,修改:

subplot(3,1,3);plot(f(1:N/2),cxf(1:N/2)); axis([0 150 0 1]);

为plot(cxf),可以直接对cxf进行画图即可。下面是修改后的代码。

subplot(3,1,3);plot(cxf); axis([0 150 0 1]);
t=0:0.00001:3-0.00001;%3对应3个周期,0.00001为精度
f0=5;%扫频起始频率
fe=100;%扫频截止频率
x=chirp(mod(t,1),f0,1,fe);%1代表的是单周期时间
subplot(3,1,1);plot(t,x);title('三个周期的线性扫频信号波形');xlabel('时间(s)');ylabel('幅度(V)');

ft=f0+(fe-f0)*mod(t,1);
subplot(3,1,2);plot(t,ft);title('线性扫频信号频率-时间图');xlabel('时间(s)');ylabel('频率(Hz)');

t=0:0.00001:1;%求频谱时不能对多周期的求,对1个周期进行FFT
x=chirp(t,f0,1,fe);
C1=fft(x);     %对载波信号进行傅里叶变换 
cxf=abs(C1);           %进行傅里叶变换  
cxf=cxf/max(cxf);%归一化
% subplot(3,1,3);plot(f(1:N/2),cxf(1:N/2)); axis([0 150 0 1]); %错误代码
subplot(3,1,3);plot(cxf); axis([0 150 0 1]); %正确代码
title('线性扫频信号归一化频谱');xlabel('频率(Hz)');ylabel('功率');

2.5、仿真结果

仿真结果(3个周期的起始频率为5,结束频率为100):

MATLAB产生任意信号波形(多周期线性扫频信号)_第1张图片

 

 

你可能感兴趣的:(MATLAB)