1.使用中值法对信号进行微分处理
1.1 正弦信号的微分处理
%生成正弦波信号
Fs=500;%采样频率是500Hz
T=1;%时间是1秒
dt=1.0/Fs;%step等于 1/500
N=T/dt;%数组的个数为N
t=linspace(0, T, N);%生成一个数组[0, 0.002, 0.004, 0.006,...,0.998, 1.000]
y=10*sin(2*pi* 5 *t);%生成频率为5Hz,幅值为10,时间为1秒的正弦波
subplot(2, 1, 1);
plot(t, y);
%给正弦波形信号做微分处理得到的是余弦波形
y1=y;
y1(1)=y(1);
for k=2:1:N-1
y1(k)=(y(k+1) - y(k-1))/(2*dt);
end
y1(N)=y(N);
subplot(2, 1, 2);
plot(t, y1);
上图是正弦信号波形,下图是对其进行微分的波形
1.2 方波信号的微分处理
t=0:0.001:50;
f=square(t);
subplot(2, 1, 1);
plot(t, f);%画出以数组t为横坐标,数组f为纵坐标组成的点,并用线将这些点连起来
axis([-1,51, -2, 3]);%设置X坐标的显示范围为[-1,11],Y坐标的显示范围为[-1,3],注意只有写在plot函数之后才会生效
%给方波形信号做微分处理
y=f;
dt=0.001;
y(1)=f(1);
for k=2:1:(50.0/0.001)
y(k)=(f(k+1) - f(k-1))/(2*dt);
end
y(50.0/0.001)=f(50.0/0.001);
subplot(2, 1, 2);
plot(t, y);
1.3 锯齿波信号的微分处理
t=0:0.001:10;
f=sawtooth(2*pi* 1 *t + (pi/2));
subplot(2,1,1);
plot(t,f,'r','LineWidth',3);
grid on;
axis([-0.5,10.5, -1.5,1.5]);
%给锯齿波形信号做微分处理
y=f;
dt=0.001;
y(1)=f(1);
for k=2:1:(10.0/0.001)
y(k)=(f(k+1) - f(k-1))/(2*dt);
end
y(10.0/0.001)=f(10.0/0.001);
subplot(2, 1, 2);
plot(t, y);
1.4 三角波信号的微分处理
t=0:0.001:10;
f=sawtooth(2*pi* 1 *t + (pi/2), 1/2);
subplot(2, 1, 1);
plot(t,f,'r','LineWidth',3);
grid on;
axis([-0.5,10.5, -1.5,1.5]);
%给三角波形信号做微分处理
y=f;
dt=0.001;
y(1)=f(1);
for k=2:1:(10.0/0.001)
y(k)=(f(k+1) - f(k-1))/(2*dt);
end
y(10.0/0.001)=f(10.0/0.001);
subplot(2, 1, 2);
plot(t, y);
2.使用梯形法给信号做数字积分
2.1 三角波信号的积分处理
t=0:0.001:10;
f=sawtooth(2*pi* 1 *t + (pi/2), 1/2);
subplot(2, 1, 1);
plot(t,f,'r','LineWidth',3);
grid on;
axis([-0.5,10.5, -1.5,1.5]);
%给三角波形信号做积分处理
y=f;
dt=0.001;
y(1)=0;
for k=2:1:(10.0/0.001)
y(k)=y(k-1) + (dt*(f(k)+f(k-1)))/2;
end
subplot(2, 1, 2);
plot(t, y);
2.2 方波形信号的积分处理
t=0:0.001:50;
f=square(t);
subplot(2, 1, 1);
plot(t, f);%画出以数组t为横坐标,数组f为纵坐标组成的点,并用线将这些点连起来
axis([-1,51, -2, 3]);%设置X坐标的显示范围为[-1,11],Y坐标的显示范围为[-1,3],注意只有写在plot函数之后才会生效
%给方波形信号做积分处理
y=f;
dt=0.001;
y(1)=0;
for k=2:1:(50.0/0.001)
y(k)=y(k-1) + (dt*(f(k)+f(k-1)))/2;
end
subplot(2, 1, 2);
plot(t, y);
3. 给三角波信号先做微分处理,再做积分处理
t=0:0.001:10;
f=sawtooth(2*pi* 1 *t + (pi/2), 1/2);
subplot(3, 1, 1);
plot(t,f,'r');
grid on;
%给三角波形信号做微分处理得到方波信号
y=f;
dt=0.001;
y(1)=f(1);
for k=2:1:(10.0/0.001)
y(k)=(f(k+1) - f(k-1))/(2*dt);
end
y(10.0/0.001)=f(10.0/0.001);
subplot(3, 1, 2);
plot(t, y);
%再给上面的方波做积分处理
y1=y;
dt=0.001;
y1(1)=0;
for k=2:1:(10.0/0.001)
y1(k)=y1(k-1) + (dt*(y(k)+y(k-1)))/2;
end
subplot(3, 1, 3);
plot(t, y1);
axis([0,10, -1,1]);
grid on;
现在我们利用定时器,让三角波信号动起来,动态观察三角波信号的微分和积分。
文章来源:https://www.toymoban.com/news/detail-449219.html
关键代码如下:文章来源地址https://www.toymoban.com/news/detail-449219.html
global chushixiangwei
chushixiangwei=0;
global mytimer
mytimer=timer('Period',1,'ExecutionMode','fixedDelay');
mytimer.TimerFcn={@my_callback_fcn};
function my_callback_fcn(hObject, eventdata, handles)
%生成三角波信号
t=0:0.001:10;
global chushixiangwei
f=sawtooth(2*pi* 1 *t + (pi/2) + chushixiangwei, 1/2);
chushixiangwei=chushixiangwei+0.5;
subplot(3, 1, 1);
plot(t,f,'r','LineWidth',3);
grid on;
%给三角波形信号做微分处理
y=f;
dt=0.001;
y(1)=f(1);
for k=2:1:(10.0/0.001)
y(k)=(f(k+1) - f(k-1))/(2*dt);
end
y(10.0/0.001)=f(10.0/0.001);
subplot(3, 1, 2);
plot(t, y);
%再做积分处理
y1=y;
dt=0.001;
y1(1)=0;
for k=2:1:(10.0/0.001)
y1(k)=y1(k-1) + (dt*(y(k)+y(k-1)))/2;
end
subplot(3, 1, 3);
plot(t, y1);
axis([0,10, -1,1]);
grid on;
function pushbutton1_Callback(hObject, eventdata, handles)
%先要找到所有的定时器,让它们先停下来
ts=timerfind;
if length(ts)>0
stop(ts);
end
%然后开启定时器
global mytimer;
start(mytimer);
function pushbutton2_Callback(hObject, eventdata, handles)
ts=timerfind;
if length(ts)>0
stop(ts);
delete(ts);
end
到了这里,关于matlab 实现信号的微分和积分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!