MATLAB仿真方波:周期,频谱,脉宽对信号影响(时频分析)

目录

前言

一. 生成方波以及仿真不同的周期

二. 方波的频谱与谱线

三. 方波脉冲宽度(脉宽)的仿真

总结


前言

信号处理可以把信号中蕴含的信息变得显然,其中的转变就包括映射(mapping)和变换(transform)。常见的就包括时域和频域的转变,时域表示信号随时间变化的函数,时间维度表征信号;频域通常蕴含傅里叶变换,频率维度表征信号。

进行时频分析的前提要求:

  • 适用于信号组成分量的频率不随时间变化的平稳信号;
  • 分析结果只能表示信号的频率成分和幅度
  • 不能给出频率出现和消失的时间
  • 不适用于频率随时间变化的非平稳信号。傅里叶变换是对信号的全局变换,不适用于信号的局部性能分析。

以下给出一个时域波形对应幅度谱的信号:

将上图中的时域波形进行倒置时,发现对应的频率幅度谱居然没有变化,如下:

一. 生成方波以及仿真不同的周期

MATLAB代码:

clear all; 
%清除代码中的classes | functions | global | import | java | mex | variables
clc  %清除命令行窗口中的所有文本,让屏幕变得干净

t=linspace(-2*pi,2*pi,500); %从-2pi~2pi中,等距离取500个点
x1=square(2*t); 
%方波函数,-1~1,改变此处的2可改变后续方波的周期
subplot(1,2,1) %一行两列的第一个图
plot(t/pi,x1,'b') %画方波图,横轴为t/pi,纵轴为x1,blue颜色图
grid on %显示主网格线

x2=square(4*t);
subplot(1,2,2) %一行两列的第一个图
plot(t/pi,x2,'r') %方波图,红色
grid on

运行结果:

对结果的解释:

  1. t在取点时,个数越多方波越正
  2. square函数可产生方波,系数变大,周期变小

二. 方波的频谱与谱线

MATLAB代码:

clear all;
clc

t=linspace(-2*pi,2*pi,500); %从-2pi~2pi中,等距离取500个点
x1=square(2*t); 
%方波函数,-1~1,改变此处的2可改变后续方波的周期
subplot(1,2,1) %一行两列的第一个图
plot(abs(fftshift(fft(x1)))) 
%对向量x1,fft快速傅里叶变换
%fftshift:将零频分量移动到数组中心,重新排列傅里叶变换
%abs:绝对值
grid on %显示主网格线

x2=square(4*t);
subplot(1,2,2) %一行两列的第一个图
plot(abs(fftshift(fft(x2))))  %频谱图
grid on

 运行结果:

对结果的解释:系数越大,周期越小,频谱分析中谱线之间的间距变大,感官上谱线更加稀疏。

三. 方波脉冲宽度(脉宽)的仿真

MATLAB代码:

clear all;
clc

t=linspace(-2*pi,2*pi,500); %从-2pi~2pi中,等距离取500个点
x=square(2*t);  %方波函数,-1~1,改变此处的2可改变后续方波的周期
N=length(x);
Fs=50; %采样频率为50Hz
f=(0:N-1)*Fs/N;  %将时间横坐标转换为频率横坐标
f2=(N/2:N-1)*Fs/N-Fs/2; %调整0频位置
subplot(2,2,1) %两行两列的第一个图
plot(t/pi,x) %方波图

subplot(2,2,2) %两行两列的第二个图
y=abs(fftshift(fft(x)));
%对向量x,fft快速傅里叶变换
%fftshift:将零频分量移动到数组中心,重新排列傅里叶变换
%abs:绝对值
y2=2*y(N/2:N-1)/N; %进行幅度矫正
plot(f2,y2)


x=square(2*t,75);  %75代表方波正的部分占比为75%
y=abs(fftshift(fft(x)));
y2=2*y(N/2:N-1)/N; %进行幅度矫正
subplot(2,2,3) %一行两列的第一个图
plot(t/pi,x) %方波图

subplot(2,2,4)
plot(f2,y2)

 运行结果:

对结果的解释:

  1. 从数学的角度,脉冲宽度=周期✖️占空比,理论上占空比越大,脉冲宽度越大
  2. 第一行的图占空比50%,第二行的图占空比75%,脉冲宽度增加,谱线变得稠密
  3. 改变脉冲宽度不影响频谱中的幅度大小
  4. 此仿真控制了变量:周期相等
  5. 测试时,注意幅度矫正和调整0频的位置 

总结

在我们现实生活中,许多天然或者人工的信号,如语音、音乐、雷达、声呐等,都是非平稳的信号。时间频率联合分析简称时频分析,主要着眼于真实信号组成成分的时变性,将一维时间信号以二维的时间-频率的形式表示出来,从而揭示信号有多少频率分量以及每个频率分量随时间的变化情况。

举一个鸟鸣声的例子:

此图为鸟鸣声信号时域波形,信号能量在时间轴上的分布

此图为功率谱-傅里叶变换的平方:信号能量在频率轴上的分布

此图为时频分析:鸟鸣声频率随着时间的推移不断下降。

在许多工程应用场合,信号往往是非平稳的,其统计量是时变函数,这时仅仅了解信号在时域或频域的全局特性是远远不够的,需要知道信号频谱随时间变化的情况。为了分析和处理非平稳信号,人们对傅立叶分析进行了推广甚至根本性的革命,提出并发展了一系列新的信号处理理论,联合时频分析就是其中一种重要的方法。

联合时频分析的基本思想是设计时间和频率的联合函数,利用它可以同时描述信号在不同时间和频率的能量密度和强度。目前时频分析方法已经广泛应用于通信、自动化、雷达、声纳、生物、天文、医学、地球物理和故障诊断等几乎所有技术领域。常用的信号时频分析方法包括短时傅立叶变换、Wigner-Ville 分布和小波变换。

  • 15
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 可以使用MATLAB中的"square"函数生成周期方波信号,其基本语法如下: ``` square(w*t,duty) ``` 其中,w为角频率,t为时间,duty为占空比。根据题意,周期为0.2ms,则角频率为2*pi/0.2ms=31.4159rad/ms;为40μs,则占空比为40μs/200μs=0.2。因此,代码如下: ``` t = 0:0.01:0.2; % 时间从0开始,步长为0.01,到0.2结束 f = 31.4159; % 角频率 duty = 20; % 占空比20% y = square(2*pi*f*t,duty); % 生成方波信号 plot(t,y); % 绘制波形图 ylim([-1.5 1.5]); % 设置y轴范围 xlabel('Time (ms)'); % 设置x轴标签 ylabel('Amplitude'); % 设置y轴标签 title('Periodic Square Wave'); % 设置图像标题 ``` 运行后,将会显示周期为0.2ms,为40μs的周期方波信号的波形图。 ### 回答2: 要生成周期为0.2ms,为40μs的周期方波信号,可以使用MATLAB中的函数`square`来实现。 首先,我们需要确定方波的频率,频率的倒数即为周期。由于周期为0.2ms,所以频率为1/0.2e-3 = 5000Hz。 然后,我们需要确定方波为40μs,所以我们需要在周期的一半时间内保持方波的高电平或低电平。周期的一半时间为0.2ms / 2 = 0.1ms,即100μs。 接下来,我们可以使用`square`函数生成周期为0.1ms,为40μs的方波信号。代码如下: ```matlab % 设置参数 frequency = 5000; % 方波的频率,单位为Hz pulseWidth = 40e-6; % 方波,单位为s period = 1 / frequency; % 方波周期,单位为s halfPeriod = period / 2; % 方波周期的一半时间,单位为s % 生成方波信号 t = 0:1e-6:period; % 时间序列,步长为1μs waveform = square(2 * pi * frequency * t, pulseWidth / period * 100); % 绘制方波图形 plot(t * 1000, waveform); xlim([0 period * 1000]); ylim([-1.5 1.5]); xlabel('时间 (ms)'); ylabel('幅度'); title('周期方波信号'); ``` 上述代码中,我们首先设置了方波的频率、等参数。然后,通过定义时间序列`t`,使用`square`函数生成方波信号。最后,通过`plot`函数绘制方波图形,并设置合适的坐标轴范围和图形标题。 运行代码后,可以得到一个周期为0.2ms,为40μs的周期方波信号的图形。 ### 回答3: 要在MATLAB中生成一个周期为0.2毫秒,为40微秒的周期方波信号,我们可以使用以下代码: ```matlab % 设置信号参数 周期 = 0.2e-3; % 周期为0.2毫秒(单位秒) = 40e-6; % 为40微秒(单位秒) % 生成时间轴 时间轴 = 0:周期/1000:周期; % 时间轴从0开始,每个点的间隔为周期的1/1000 时间轴(end) = []; % 去除最后一个多余的点,确保时间轴长度为1000 % 生成方波信号 方波信号 = square(2*pi/周期*时间轴, /周期*100); % 使用MATLAB的square函数生成方波信号 % 可视化方波信号 plot(时间轴, 方波信号); xlim([0, 周期]); ylim([-1.5, 1.5]); xlabel('时间(秒)'); ylabel('幅度'); title('周期方波信号'); ``` 这段代码首先设置了信号周期(0.2毫秒)和(40微秒)。接下来,生成了一个时间轴,时间轴的起点为0,终点为一个周期的长度(0.2毫秒),间隔为周期长度的1/1000。然后,使用MATLAB的`square`函数生成了一个周期方波信号,其中的参数2*pi/周期表示方波的频率,/周期*100表示方波的占空比。最后,使用`plot`函数将方波信号可视化出来。 运行这段代码,你将会得到一个周期为0.2毫秒,为40微秒的周期方波信号的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值