我试图定义一个函数,它是一系列矩形脉冲,脉冲的长度随每次重复而增加一个常数。脉冲之间的距离应该保持不变。我如何在MATLAB中做到这一点?

在素描d是脉冲之间的间隙,a是起始脉冲长度,l是长度增加的常数。
发布于 2020-10-30 01:51:09
迭代连续脉冲产生可变脉冲列
下面的方法使用迭代方法来创建脉冲序列信号。在每次迭代时,信号的一个循环被连接到数组名Full_Signal (在这种情况下)。Full_Signal将存储要绘制的整个信号。在这种情况下,循环被认为是高脉冲a+l,然后是非状态d。通过使用变量a、l、d、Max_Time和Number_Of_Cycles,可以调整信号的大小和属性。需要注意的是,ones(m,n)创建了一个包含m行和n列的数组。相似的zeros(m,n)遵循相同的结构,并生成一个零数组。参数a、l和d将与时间矢量规范成正比。

%Clearing the workspace%
clear;
clc;
clf;
%*********************************************************%
%ADJUSTABLE PARAMETERS%
%*********************************************************%
a = 15;
l = 1;
d = 40;
Max_Time = 100;
Number_Of_Cycles = 10;
%*********************************************************%
%Will hold the entire signal%
Full_Signal = [];
%Interatively concatenating cycles%
Cycle = 1;
while(Cycle < Number_Of_Cycles)
Duty_High = a + Cycle*(Cycle - 1);
Signal_Portion = [ones(1,Duty_High) zeros(1,d)];
Full_Signal = [Full_Signal Signal_Portion];
Cycle = Cycle + 1;
end
%Creating time scale/x-axis%
t = linspace(0,Max_Time,length(Full_Signal));
%Plotting the signal%
figure('Position', [300 400 500 100])
plot(t,Full_Signal);
axis([0 Max_Time 0 1.1]);
title("Variable Pulse Train");
xlabel("Time"); ylabel("Amplitude"); 扩展:使用插值来设置绘图密度和缩放到时间轴的单位。
或者,如果您希望变量a、l和d以时间为单位,则可以使用插值来设置Plotting_Density并保留相当清晰的绘图。使用函数interp1创建的插值允许您创建一个变化精度的时间向量,并相应地将信号映射到这个新的插值时间向量。

%Clearing the workspace%
clear;
clc;
clf;
%*********************************************************%
%ADJUSTABLE PARAMETERS%
%*********************************************************%
a = 15;
l = 1;
d = 40;
Max_Time = 1000;
Number_Of_Cycles = 10;
Plotting_Density = 0.0001;
%*********************************************************%
Number_Of_Cycles = Number_Of_Cycles + 1;
%Will hold the entire signal%
Full_Signal = [];
%Interatively concatenating cycles%
Cycle = 1;
while(Cycle < Number_Of_Cycles)
Duty_High = a + Cycle*(Cycle - 1);
Signal_Portion = [ones(1,Duty_High) zeros(1,d)];
Full_Signal = [Full_Signal Signal_Portion];
Cycle = Cycle + 1;
end
%Creating time scale/x-axis%
t = (0:1:length(Full_Signal)-1);
Interpolated_Time_Vector = (0:Plotting_Density:length(Full_Signal)-1);
Interpolated_Signal = interp1(t,Full_Signal,Interpolated_Time_Vector);
close all;
%Plotting the signal%
figure('Position', [300 400 500 100])
plot(Interpolated_Time_Vector,Interpolated_Signal);
axis([0 max(Interpolated_Time_Vector) 0 1.1]);
title("Variable Pulse Train");
xlabel("Time (s)"); ylabel("Amplitude"); 使用MATLAB R2019b运行的
https://stackoverflow.com/questions/64599408
复制相似问题