输入整形的matlab代码实现【新】

本文详细介绍了ZV输入整形的原理及MATLAB实现,通过二阶欠阻尼系统的仿真验证了其振动抑制效果。提供了一个简单的脚本函数fcnzv,用于ZV输入整形,并展示了整形前后信号的对比。阅读本文可了解输入整形技术如何优化输入轨迹并减少机械臂振动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

输入整形算法自己研究过一段时间,之前也在此平台分享过,不过写得比较抽象。有很多朋友询问输入整形的实现细节,这里用一种简单的方式分享下对于ZV输入整形的理解与实现,ZVD、EI输入整形实现原理类似。
输入整形技术可以对输入轨迹二次优化,对机械臂的振动抑制有良好的效果,其本质是一种特定频率的滤波器或者说陷波器。
ZV输入整形原理很多文章都有讨论,这里不再赘述。可参考文章:输入整形(Input Shaping)——一种振动抑制方法

程序

下面采用matlab的脚本函数实现,并针对二阶欠阻尼系统仿真验证。
如果本文对大家有用,希望点个赞鼓励一下

[y,ts] = gensig('sq',0.2,1,1/4000); % 方波给定
yis = [];

for n = 1:length(y)
    yis(n,1) = fcnzv(y(n),40);
end

figure;
stairs(ts,y,'color',[0.8500 0.3250 0.0980],'LineWidth',1.2);
hold on;
stairs(ts,yis,'-.','color',[0.4660 0.6740 0.1880],'LineWidth',1.2);
legend('方波','整形曲线')
xlabel('Time(s)');ylabel('Amp')
ylim([0 1.2])
grid on;

wn = 40*2*pi;
b = 0.1;
G = tf(wn^2,[1 2*b*wn wn^2]);
[y1, ts] = lsim(G,y,ts);
[y2, ts] = lsim(G,yis,ts);
figure;
plot(ts,y1,'color',[0.8500 0.3250 0.0980],'LineWidth',1.2);
hold on; grid on;
plot(ts,y2,'-.','color',[0.4660 0.6740 0.1880],'LineWidth',1.2);
legend('阶跃响应','整形曲线响应');
title('欠阻尼二阶系统的振动对比')
xlabel('Time(s)');ylabel('Amp')

function y = fcnzv(u,fs)
    persistent u_k_1   array_u 
    b = 0.1; wn = fs*2*pi;
    K = exp(-b*pi/(sqrt(1-b*b))); 
    T = pi/((wn*sqrt(1-b*b))); % 峰值时间
    f = 4000; % 采样频率
    t2 = fix(f*T);
    A1 = 1/(1+K);
    A2 = K/(1+K);
    if isempty(u_k_1); u_k_1 = 0;array_u = zeros(2000,1);end
    y = A1*u + A2*array_u(t2);
    for i = 2000:-1:2
        array_u(i) = array_u(i-1);
    end
    array_u(1) = u;
end

仿真结果

在这里插入图片描述
在这里插入图片描述

之前写的文章:输入整形 matlab仿真
本人知乎一木欢迎关注,以后也会在知乎分享一些想法。
一木

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值