阶跃函数卷积自己_如何看待大神/老师说“阶跃响应曲线调参并不准确”的观点?...

使用K-Mean均值算法进行聚类只是一种判断干扰因素的手段,不是最终目的

近期有几个特别热衷于调参的小伙伴问我,“那些大神/老师总说通过阶跃响应曲线来调PID参数并不正确,是这样吗”。

7b974a6723b20617e237b8154334083e.png

我难以揣测这背后到底有着多少对于数学的恶意,也无法猜测这其中掺杂了多少不懂装懂的尴尬。 但是既然大家对这些工具的恶意这么大,索性今天也就不计字数,给大家粗略解释一下PID-Analyzer和PIDtoolbox的阶跃响应形状不同的原因,以及其背后的反卷积原理。

01

为什么同一个LOG会出现截然不同的结果?

简单来说,这是因为 PID-Analyzer直接输出全部阶跃响应帧的平均结果,而 PIDtoolbox启用了根据稳定时长筛选阶跃响应帧的算法来控制分析数据的质量

d8bcee8e5ab0293d1c9c9e0b157d0937.png

在PIDtoolbox内看起来还算正常的log,在PID-analyzer里则完全超调查阅代码可知,PID-analyzer在进行维纳反卷积之后直接对全部阶跃响应帧进行了求平均,并进行了图像绘制。
def wiener_deconvolution(self, input, output, cutfreq):      # input/output are two-dimensional 输入输出信号均为二维信号  pad = 1024 - (len(input[0]) % 1024)                        # padding to power of 2, increases transform speed 将 padding设置为2的幂次数以提高变换速度  input = np.pad(input, [[0,0],[0,pad]], mode='constant')    # 指定输入信号及模式,下为输出信号  output = np.pad(output, [[0, 0], [0, pad]], mode='constant')  H = np.fft.fft(input, axis=-1)  G = np.fft.fft(output,axis=-1)  freq = np.abs(np.fft.fftfreq(len(input[0]), self.dt))  sn = self.to_mask(np.clip(np.abs(freq), cutfreq-1e-9, cutfreq))  len_lpf=np.sum(np.ones_like(sn)-sn)  sn=self.to_mask(gaussian_filter1d(sn,len_lpf/6.))  sn= 10.*(-sn+1.+1e-9)       # +1e-9 to prohibit 0/0 situations  Hcon = np.conj(H)  deconvolved_sm = np.real(np.fft.ifft(G * Hcon / (H * Hcon + 1./sn),axis=-1))  # 此为反卷积核心公式  return deconvolved_sm  # 将阶跃响应结果返回输出def stack_response(self, stacks, window):  # 绘制阶跃响应曲线  inp = stacks['input&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值