目录
一、背景
二、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):