精华内容
下载资源
问答
  • 阶跃函数卷积自己
    千次阅读
    2021-04-22 01:49:33

    与冲激函数、阶跃函数的卷积

    信号与系统总 复 习 第一章 绪论 1、信号的概念 2、分类:典型的连续时间信号: 指数、正弦、复指数、抽样、钟形、δ(t), u(t), eat, sin(ω0t), Sa(kt) 3、信号的运算: 移位、反褶、尺度变换、微分运算、相加、相乘 4、奇异信号: 单位斜变、 阶跃、冲激(特性)、冲击偶 5、信号的分解: 脉冲分量、 6、系统模型及其分类 7、线性是不变系统的基本特性: 线性(叠加性、均匀性)、时不变特性、微分特性、因果特性 8、系统分析方法: 输入输出描述法、状态变量描述法 两对关系式 第一章 绪论 系统分析过程 (一)冲激响应 h (t) 1)定 义 系统在单位冲激信号δ(t) 的激励下产生的零状态响应。 2)求 解 形式与齐次解相同 第二章 第三章 傅立叶变换 周期信号的傅立叶级数 三角函数形式、指数形式 典型信号的频谱:Gτ(t),δ(t), u(t), Sa(t) 傅立叶变换 非周期信号的傅立叶变换 傅立叶变换的性质 对称性,线性、尺度变换特性、时移性(符号相同),频移性(符号相反) 奇偶虚实性、微分特性、积分特性 卷积定理 周期信号的傅立叶变换——与单脉冲 信号的傅立叶级数的系数的关系 抽样信号的傅立叶变换——与抽样脉冲序列的傅氏变换及原连续信号的 傅立叶变换的关系 抽样定理 时域抽样定理、频域抽样定理——注意2倍关系!! 第三章 傅立叶变换 周期信号的傅立叶级数 指数形式傅立叶级数的傅里叶系数 傅立叶变换特性主要内容 第三章 典型周期信号傅立叶变换 周期单位冲激序列的傅里叶变换 周期矩形脉冲序列的傅氏变换 (二) 抽样信号的傅立叶变换 1、 矩形脉冲抽样 即 p(t) 为周期矩形脉冲 2、 单位冲激抽样 即 p(t) 为周期冲激脉冲 总结 周期信号的傅立叶变换 第四章 拉普拉斯变换、 连续时间系统的s域分析 定义: 单边拉氏变换、双边、收敛域、常用函数的拉氏变换 拉氏变换的性质 线性、原函数微分、原函数积分、时域平移、s域平移、尺度变换、初值、终值 卷积特性 拉氏逆变换 部分分式展开法(求系数) 系统函数H(s) 定义(两种定义方式) 求解(依据两种定义方式) 第四章 拉普拉斯变换、 连续时间系统的s域分析 三.一些常用函数的拉氏变换 4.tnu(t) 第四章 因果系统的s域判决条件: 稳定系统:H(s)的全部极点位于s平面左半平面(不包括虚轴); 不稳定系统:H(s)的极点落于s平面的右半平面,或在虚轴上具有二阶以上的极点; 临界稳定系统: H(s)的极点落于s平面的虚轴上,且只有一阶极点。 第五章 掌握基本概念 第七章 离散时间系统的时域分析 序列的概念、离散时间信号的运算 相加、相乘、序列移位、反褶、尺度倍乘、差分、累加 常系数线性差分方程的求解 迭代法 时域经典法:齐次解+特解 零输入响应+零状态响应 离散时间系统的冲激响应与阶跃响应 单位样值响应h(n)的定义与求解 由h(n)判定离散系统的因果性与稳定性 离散卷积(卷积和) 定义、性质、计算 (一)离散卷积(卷积和)定义 (四)利用卷积和求系统的零状态响应 h(k)与系统稳定性 对于因果系统的稳定条件: 第八章 z变换、离散时间系统的z域分析 Z变换 定义(双边、单边)、典型序列z变换(δ(n), u(n), n u(n ), an u(n), sin(ω0n) u(n )) 收敛域(左边,右边,双边,有限长) 性质(线性,位移,初值,终值,卷积和) 逆z变换方法 长除法、部分分式展开法(左边,右边,双边,有限长序列的表示方法,课件例题) 差分方程的z变换求解方法 系统函数的定义H(z) 非周期信号的傅立叶变换(频谱) 定义,性质(对称性,线性、尺度变换特性、时移性,频移性、卷积性等) 典型信号的频谱(Gτ(t),δ(t), u(t), Sa(kt) ) 周期信号、抽样信号的傅立叶变换 信号的拉氏变换 定义,性质(微分,延时,s域平移,初值,终值、卷积) 典型信号的拉氏变换(δ(t), u(t), e-at, t e-at ) 拉氏逆变换(部分因式分解法)(注意收敛域) 系统部分(连续系统) 微分方程 系统方框图 微分方程的建立与求解 时域法 拉氏变换法(s域元件模型) h(t), H(s)系统函数的概念与求解 用卷积法求系统零状态响应 时域法 s 域法 连续系统稳定性,因果性的判定 系

    更多相关内容
  • (9)平滑滤波器 模糊器 离散高斯模糊:DiscreteGaussianImageFilter,高斯分布被离散化后,用一个卷积核表示,然后卷积核在图像上进行卷积。这种方法存在的固有缺陷:方差大的高斯核需要更大的kernel size去编码,...

    54d53f065357e9047a6eddab840e4e12.png

    做视觉的都知道opencv,但它只能处理2D的图像。对于医学图像处理,那就不得不祭出ITK(Insight Segmentation and Registration Toolkit)了(python下可以使用SimpleITK),这是一个非常强悍的3D分割和配准开源工具箱。下图是它所涉及的类别。

    070015bbba23e51c0907e279a792f23a.png

    有必要花点时间对他里面的图像处理相关接口进行一次梳理,一方面可以系统性的了解整个图像处理和立体视觉相关的知识框架,也方便后面的使用。以下链接是官方函数说明手册,非常详细,本文制作部分梳理和解释,详细内容请参考以下文档。

    https://itk.org/ItkSoftwareGuide.pdf​itk.org

    1.Reading and Writing Images

    这个就不多少了,dcm,nii.gz,nrrd,mha,mhd等几乎所有的医学影像的常见格式都支持。

    2.Filtering

    (1)阈值滤波器

    二值阈值:BinaryThresholdImageFilter,阈值后得到二值图像
    通用阈值:ThresholdImageFilter,阈值后,阈值范围内的图像保持不变,阈值范围外被设定为固定值。(有点像clip操作,更通用)

    (2)边缘检测器

    Canny边缘检测:CannyEdgeDetectionImageFilter,一种经典的边缘检测滤波器

    (3)强制转换和灰度映射

    • 线性映射:
    CastImageFilter:最简单,类型强壮,比如int转float
    RescaleIntensityImageFilter:对范围进行重新映射,需输入转换后的最大值和最小值
    ShiftScaleImageFilter:灰度上的平移和尺度变换,需输入平移量和尺度变化量
    NormalizeImageFilter:归一化,减均值除方差。
    • 非线性映射:
    SigmoidImageFilter,用Sigmoid函数进行映射,注意不是标准sigmoid函数,需要输入β和α参数:

    6a03c2c3a13b1ff67ce8abebd7836d88.png

    (4)梯度

    梯度幅度:GradientMagnitudeImageFilter
    带平滑的梯度幅度:GradientMagnitudeRecursiveGaussianImageFilter,求梯度之前为了降低噪声的影响,通常会先做一个高斯滤波平滑,边缘提取效果会更好。
    无平滑偏导:DerivativeImageFilter,计算沿某一轴方向上的偏导。

    (5)二阶导

    不平滑直接求导会放大很多噪声,尤其是二阶导。可以使用RecursiveGaussianImageFilter进行计算。

    递归高斯滤波器:RecursiveGaussianImageFilter,一种快速的IIR高斯滤波器
    拉普拉斯滤波器:LaplacianRecursiveGaussianImageFilter,直接计算二阶导

    (6)邻域滤波

    均值滤波:MeanImageFilter
    中值滤波:MedianImageFilter

    (7)数学形态学

    • 二值形态学
    腐蚀:BinaryErodeImageFilter
    膨胀:BinaryDilateImageFilter
    可通过BinaryBallStructuringElement设置形态学操作子的大小
    • 灰度形态学:
    腐蚀:GrayscaleErodeImageFilter
    膨胀:GrayscaleDilateImageFilter
    仍是使用BinaryBallStructuringElement设置形态学操作子的大小

    (8)投票滤波器

    投票的含义:领域内哪种类别多听谁,有点像投票。这叫投票操作。

    二值中值滤波:BinaryMedianImageFilter,在二值图像上进行中值滤波,管用的二值图降噪(投票机制,周围相似哪个类别多就听谁,而不需要再排序)
    二值空洞填充:VotingBinaryHoleFillingImageFilter,通过投票的方式实现的空洞填充操作。这种方式还有助于平滑边界。滤波效果本质上和边缘曲率有关系。
    迭代空洞填充:VotingBinaryIterativeHoleFillingImageFilter,迭代运行上一个函数,有平滑边缘和空洞填充的效果。

    (9)平滑滤波器

    • 模糊器
    离散高斯模糊:DiscreteGaussianImageFilter,高斯分布被离散化后,用一个卷积核表示,然后卷积核在图像上进行卷积。这种方法存在的固有缺陷:方差大的高斯核需要更大的kernel size去编码,导致大方差高斯滤波计算量很大。 递归IIR高斯滤波:SmoothingRecursiveGaussianImageFilter,为解决离散高斯滤波的固有缺陷,通过IIR滤波器,近似实现高斯卷积和求导。不同方差的高斯滤波都可以通过固定大小的卷积核实现。还可设置对其一阶或二阶导进行高斯滤波(可以通过这个实现二阶导) 二项模糊:BinomialBlurImageFilter,计算每个维度上的最邻近平均,迭代进行,迭代次数越多结果越接近使用高斯核进行滤波的结果。
    • 局部模糊
    GaussianBlurImageFunctionZ:文档中没有具体介绍
    • 边缘保持平滑

    边缘保持的目的:一般的平滑,都会吧梯度大的地方削弱,所以边界信息也会丢失。保边去噪希望值去除孤立点噪声,保持边缘。

    各向异性扩散:把图像看作热量场,每个pixel看做热流,根据和邻域像素的灰度差,决定是否向旁边扩散。和某个方向的邻域像素的灰度差异越大,向这个方向的扩散速度越慢。扩散过程就是在平滑图像,但是平滑的区域不会向边界扩散,从而达到保边的效果。 梯度各向异性扩散:GradientAnisotropicDiffusionImageFilter,利用梯度控制扩散速率。扩散系数和梯度成反比。即传统的PM扩散。边缘增强特性,边缘对比度增加。 曲率各向异性扩散:CurvatureAnisotropicDiffusionImageFilter。曲率在图像里面其实代表二阶导(梯度的变化),二阶导相比于一阶导的精细细节反映能力更好,而对大边界的反应能力差一些。因此该滤波器对对对比敏感度更低,但是可以保持更细节的结构信息。
    曲率流:CurvatureFlowImageFilter,
    最小最大曲率流
    双边滤波
    • 向量和色彩图像的边缘保持平滑
    向量梯度各向异性扩散
    向量曲率各向异性扩散
    彩图的梯度各向异性扩散
    彩图的曲率各向异性扩散
    • 距离场

    丹尼尔松距离场:DanielssonDistanceMapImageFilter,丹尼尔松提出的,

    (10)几何变换

    (11)频域

    (12)表面提取

    3.配准

    4.分割

    5.统计

    未完待续...

    展开全文
  • 本文的主要思路如下:1 从测量飞船的例子开始假设 表示第 时刻测量到的宇宙飞船位置。由于信号存在干扰,我们取...求 时刻前 次测量的期望 则,期望求解如下: 当 : 上面的积分运算过程被定义为卷积运算,标记为 ,...

    4e79efd339816563c2cbf9cc86231ff7.png

    本文的主要思路如下:

    2458c92b388b0ddda32cbeab574ee410.png

    1 从测量飞船的例子开始

    假设

    表示第
    时刻测量到的宇宙飞船位置。由于信号存在干扰,我们取该时刻的前
    次测量结果的期望作为该次测量的最终结果。我们用
    表示这
    次测量里的一个时刻,我们假设
    时刻对应的权重为
    ,则
    越接近
    ,它应越重要。这里所有的值都是标量。求
    时刻前
    次测量的期望

    32808df137c444155659a9cae50a0d20.png

    则,期望求解如下:

    上面的积分运算过程被定义为卷积运算,标记为

    ,其中
    对应卷积核(概率密度函数),
    对应输入。

    在计算机科学中离散卷积更符合实际情况,即上诉第一个公式,此时

    对应概率质量函数。

    直观理解:卷积运算表示前

    次输入的加权平均,这里的
    表示关注范围

    2 卷积运算

    2.1 卷积核翻转

    飞船的例子描述的是1D的情况,如果扩展到2D,考虑采用2D卷积核,那么:

    其中:

    • :输入的2D数据,例如一张灰度图片
    • :2D卷积核,如果卷积核下标超出卷积核范围那么设置为得到的值恒为0

    假设

    ,即:

    那么:

    从结果上看,卷积操作为:卷积核分别沿着45°、135°轴翻转180°,然后沿着输入的左上角依次滑动,每移动一次,计算一次加权平均值。

    翻转卷积核之后的过程如下:

    73646031e7c90bff04579522bcec3d8a.gif

    2.2 卷积核不翻转

    上述卷积操作需要对卷积核进行翻转再运算,这样的操作满足卷积运算的交换律。但是在神经网络中,交换律不是很重要的性质。通常神经网络库会实现一个互相关函数,和卷积运算几乎一样,除了没有对卷积核翻转。

    通过互相关函数,卷积核在滑动操作时不需要翻转。现在主流框架实现的方法都是上述互相关函数。后面值的卷积也都是互相关函数

    2.3 卷积运算的特点

    1. 稀疏交互

    如图2.3.1 所示,卷积操作中,一个输入单元只和部分输入单元发生交互,一个输出单元也之和部分输出单元发生交互;而如图2.3.2所示,全连接操作中,每个输入单元都和所有输出单元发生交互

    cf2db996eacf6dc465d23c0a10441799.png
    图2.3.1 卷积操作

    eadb368065d466a5b34ded5eeffbd45a.png
    图2.3.2 全连接操作

    2. 参数共享

    卷积运算中多个运算使用相同的参数(同一个卷积核)。而全连接中每个运算都使用自己的参数,每个参数都只使用一次

    3. 等变表示

    假设有平移函数

    (例如:
    )、卷积函数
    、卷积结果
    。根据卷积公式,卷积操作满足
    ,即:

    如果输入数据向某个方向平移多少个单位,卷积操作输出数据同样向同一个方向移动同样的单位长度

    b4bd841f9cbe2e2ee9b76c1a7920638c.png
    图2.3.3 平移等变,卷积操作向右(蓝->红)减小输入,输出同样向右减小输出

    3 卷积的变体

    3.1 多通道卷积

    针对多通道输入以及多通道输出,卷积操作变体如下:

    其中:

    • :第
      通道的
      列的输出值
    • :第
      通道的
      列的输入值
    • :第
      个卷积核的第
      通道的
      列的输入值

    3.2 调整卷积步幅

    调整步幅,假设stride=s,那么卷积公式变体如下:

    3.3 原始图象不同填充方法

    1. valid卷积:卷积核只允许访问V中能够完整包含卷积核的位置,这种操作会缩小输出尺寸,缩小大小为
      ,例如卷积核为3x3,那么长宽分别缩小2,2
    2. same卷积:为了保证输出尺寸不变,输入的图像先用0填充,保证输出的shape和输入的实际shape一样
    3. full卷积:上面的操作都会导致边缘像素被访问的次数变少,也就相当于忽略了弱化了边缘像素的作用,所以full卷积就是保证每个像素被访问次数都是一致的。所以输出图像的宽度=m+k-1

    4 卷积求导

    结合以上几种卷积变体,卷积前向通用公式如下:

    在反向传播过程中会得到该输出的误差为:

    4.1 针对卷积核求导

    为了更好理解,这里假设输入输出通道数=1,stride=1,所以:

    所以,上述也是卷积操作,输入

    ,卷积核
    ,过程类似下图:

    6db879629ac3af85e8301fa72ae61324.png
    图4.1.1 误差为输入,前向输入为卷积核的卷积操作示意图

    4.2 针对输入求导

    为了更好理解,这里假设输入输出通道数=1,stride=1,所以:

    同样也属于卷积操作,上述过程类似下图:

    01deb962ffb3814c187c47acde94c418.png
    图4.2.1 以误差为输入,翻转后的卷积核为卷积核的卷积操作
    展开全文
  • “使用K-Mean均值算法进行聚类只是一种判断干扰因素的手段,不是最终目的”近期有几个特别热衷于调参的小伙伴问我,“那些大神/老师总说通过阶跃响应曲线来调PID参数并不正确,是这样吗”。我难以揣测这背后到底有着...

    使用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'] * window  outp = stacks['gyro'] * window  thr = stacks['throttle'] * window  deconvolved_sm = self.wiener_deconvolution(inp, outp, self.cutfreq)[:, :self.rlen]  delta_resp = deconvolved_sm.cumsum(axis=1)  max_thr = np.abs(np.abs(thr)).max(axis=1)  avr_in = np.abs(np.abs(inp)).mean(axis=1)  max_in = np.max(np.abs(inp), axis=1)  avr_t = stacks['time'].mean(axis=1)  return delta_resp, avr_t, avr_in, max_in, max_thr

    摘自PID-Analyzer_v0.52.py

    而PIDtoolbox在完成反卷积之后,使用stepinfo()函数对阶跃响应质量进行了提取,并随后以稳定时间为指标对所有阶跃响应帧进行了筛选,以完成质量控制过程。如下所示。
    j = 0;rateHigh = 0;for i=1:size(SPseg,1)  waitbar(i/size(SPseg,1),hw,['computing step response functions... ']);   a=fft(GYseg(i,:).*hamming(length(GYseg(i,:)))');% output, use hann or hamming taper  b=fft(SPseg(i,:).*hamming(length(SPseg(i,:)))');% input, use hann or hamming taper  G=a/length(a);  H=b/length(b);  Hcon=conj(H);       imp=real(ifft((G .* Hcon) ./ (H .* Hcon + .0001)))'; % impulse response function, .0001 to avoid divide by 0  impf =  smooth(imp, lograte*10); % minor smoothing  resptmp(i,:) = cumsum(impf); % integrate impulse resp functions  resptmp(i,:)=resptmp(i,:)-resptmp(i,1);  a=stepinfo(resptmp(i,1:wnd)); % gather info about quality of step resp function 抓取阶跃响应质量  if a.SettlingMin>.5 && a.SettlingMin<=1 && a.SettlingMax>1 && a.SettlingMax<2 %Quality control 质量控制过程    j=j+1;    stepresponse(j,:)=resptmp(i,1:1+wnd);     if max(abs(SPseg(i,:))) >= rateHighThreshold      rateHigh(j,:)=1;    else      rateHigh(j,:)=0;    end  end        t = 0:1/lograte:StepRespDuration_ms;% time in ms        end
    摘自PIDtoolbox/PTstepcalc.m 也就是说,某些情况下, 对阶跃响应帧进行质量筛选,是导致同一段LOG在两个工具内跑出完全不一样结果的主要原因

    02

    那PIDtoolbox的结果还是正确的吗?

    部分是 - 前提是要理解为何我们能计算出阶跃响应。已知输入输出信号的时域曲线,将其变换到复频域后,使用(输出/输入)便可求得系统的传递函数,再将其变换回时域即可得冲激响应。对其积分即可得到阶跃响应。

    de0899e82dbeef9ab354b1dc3138dd1a.png

    这在数学上称为反卷积。反卷积是毫无对错可言的 - 它本来就是可推导的正确的数学定理。问题出现在质量控制部分。有一部分人认为系统的所有阶跃响应帧均可反映系统的实际性能,有一部分人则不这么认为。

    c13a6e02f946a084b3af7dbc305ed1e8.png

    认为 所有阶跃响应帧均可反映系统的实际性能的人的考虑点是这样的:系统的PIDF设计之初就是用来完成稳定问题和抗扰动问题,所以由于系统外非线性扰动造成的异常响应帧也应视为有效帧。洗桨、强风这些情况下的响应帧也应被计算在内。

    6840f8be18f181dde2c031e559e8a922.png

    另外一部分人认为,系统的设计前提是假定系统是局部线性,我们日常飞行也基本是处于局部线性段,而反卷积也是针对线性系统,所以我们应该只关注于局部线性部分的响应性能。而前馈确实会给系统带来一个相位超前的加速信号,这个信号会显著改变系统的阶跃响应曲线。所以,要分析系统自身的阶跃响应曲线,确实不应该使用前馈。

    31c8133998f053e6587ebaca255463e9.png

    无论如何, 反卷积算法在局部线性部分确实是科学有效的计算工具。但是, 穿越机是一个由线性系统和非线性系统相互耦合的复杂系统,只使用反卷积阶跃响应曲线法来作为判断PIDF参数的唯一判据显然是不正确的

    03

    那么这种算法本身的可靠性如何?

    要评估算法自身的可靠性,就要分析全部阶跃响应帧,就需要找到一种科学有效的方式来对阶跃响应帧进行归一化统计。 在数据分析领域,使用K-means平均算法来对信息进行聚类分析是常见的数据分析方法。下面我们便使用K-means对原始阶跃响应帧进行聚类分析。

    ef301923e96dc1f1065059f64c8b50a1.png

    图片源自K-means_clustering维基百科 第一步,打印出阶跃响应帧的数量。然后先对对数据进行白化(Whiten)处理,之后再调用Kmeans算法对其聚类,并在在欧几里得空间里标示出数据分布与聚类结果的质心位置。
    step_response[j,:] = respprint("We now have %d different step responses" %j)from scipy.cluster.vq import vq,kmeans,whiten# Set the number of clusters# In my test, it seems that the best value is 6GROUP_COUNT = 6# Pass step resonse to featuresfeatures = step_response[0:j,:]# Whiten datawhitened = whiten(features)# Find N clusters in the datacodebook, distortion = kmeans(whitened, GROUP_COUNT)print("The distortion of the signal is" %distortion)print(distortion)result = vq(whitened, codebook)# Display centroids in Euclidean spaceplt.scatter(whitened[:,0],whitened[:,1])plt.scatter(codebook[:,0],codebook[:,1],c='r')plt.show()
    然后,标示出各聚类结果对应的样本数量,这与PIDtoolbox的样本数量N的意义基本一致。在对阶跃响应帧进行处理时,同时统计输入信号(摇杆输入信号),并在最终绘制图像时绘制与聚类后的阶跃响应曲线相对应的输入信号曲线,以判断摇杆输入信号对阶跃响应结果的影响。
    # Display clustered step response curvesresp_cluster = np.zeros((GROUP_COUNT, segment_length))#print(resp_cluster)setpoint_cluster = np.zeros((GROUP_COUNT, segment_length))#print(setpoint_cluster)member_count = np.zeros(GROUP_COUNT)for i in range(j):    codebook_idx = result[0][i]    resp_cluster[codebook_idx] = resp_cluster[codebook_idx] + step_response[i]    setpoint_cluster[codebook_idx] = setpoint_cluster[codebook_idx] + input_segments[i]    member_count[result[0][i]] = member_count[result[0][i]] + 1for i in range(GROUP_COUNT):    plt.subplot(GROUP_COUNT,2,i*2+1)    plt.plot(resp_cluster[i]/member_count[i])    plt.subplot(GROUP_COUNT,2,i*2+2)    plt.plot(setpoint_cluster[i]/member_count[i])print(member_count)
    通过对一段Betaflight 4.1的花飞LOG进行分析,产生如下结果。 其阶跃响应帧数量为1069个,聚类结果在欧几里得空间里分布的如下图所示,蓝点为白化后的分布点,红点为聚类结果质心。

    c88f6028d6751f01c8d1f5cacd9fe29c.png

    聚类结果如下所示,其中左侧为阶跃响应曲线;右侧为与之对应的输入信号曲线;横轴2000代表样本数量,实际表示1秒的时间;自上到下的样本数量分别为469、15、398、6、109、72。

    b9a89ba2921bb89692c88a61efaff43c.png

    与之对应,下面是此条LOG分别在PTB与PID-Analyzer内分析出来的阶跃响应曲线。

    17af6a2a63c861f28fb66948d1dad2a8.png

    可以看到,经K-means聚类后,样本数量为469与398的阶跃响应曲线与PTB大致相同。其样本数量最多,大致反应了飞行时的绝大多数情况下的阶跃响应曲线。 另外也可以看到, “奇怪”的阶跃响应常发生于猛烈打杆后收杆归中时。我们应在飞行中尽量避免产生此类打杆操作。

    04

    结语

    尽管K-means算法可以将阶跃响应进行聚类,产生一系列较为科学的结果,但仍需注意,K-means并不是一个稳定的算法,同一条LOG上可能会产生多种聚类结果。 虽然K-means的结果更加复杂难以直观判断,但是它却可以 将各类阶跃反应直观绘制出来。 经验丰富的技师可以根据聚类结果,对PIDF参数的适配程度有一个更完整的认知;执行能力强大的飞手可以根据聚类结果对应的摇杆输入情况,调整自己的打杆习惯,使飞行时飞机的动态范围总保持在局部线性区间内。

    d385f7e74ffb689cccd0ed115fbfdefa.png

    图源GmyFC很抱歉将大家带入一个更加复杂的、尚未有确切定论的话题内,但我们的本意是打消大家对工具的算法的恶意。希望诸位读者在读完本文之后可以完成我们的初始目标(打消恶意)。 毕竟,真正的数学意义上的线性非线性并不是什么顺滑不顺滑;反卷积算法也不是什么仅仅理论可行实践掉链子的鸡肋算法;真正的PID阶跃响应结果也并不会如“大神”所言“我打个杆就能改变这条曲线”。 85d99f547fe9306d8fb267310f8f7e3c.png但是切莫不可将任何一种算法的结果直接当成唯一的判据。正如本程序的幕后作者所言, “使用K-Mean均值算法进行聚类只是一种判断干扰因素的手段,不是最终目的”

    21ae9324b71c06b475cc876a0acf58c8.png

    图文:市民姜先生

    排版:SinCerely

    程序:ColinNiu、市民姜先生

    审核:ColinNiu、山鹰_SamFisher、SinCerely辉光管

    如需转载请后台留言

    大神请勿直接抄袭

    分享给朋友或朋友圈请随意哦


    参考资料:

    1. 反卷积和信号复原, 邹谋炎, 国防工业出版社

    2. K-Mean-Cluster维基百科, https://en.wikipedia.org/wiki/K-means_clustering

    3. PID-Analyzer源码

    4. PIDtoolbox源码

    5. pyPIDtoolbox源码

    展开全文
  • 信号与系统 chapter14 卷积积分的应用

    千次阅读 2021-09-01 15:03:44
    f(t)=f1(t)∗f2(t)f(t)=f_1(t)*f_2(t)f(t)=f1​(t)∗f2​(t),卷积右边的函数都发生了时移,分别为t1,t2t_1,t_2t1​,t2​,则有: 不要管怎么来,记下就完事了 例题: f1(t)f_1(t)f1​(t)很好写:f1(t)=δ(t)−δ...
  • 单位阶跃函数的真正目的: 例题:更好的理解 序列的卷积和的定义和公式 卷积和运算步骤 翻褶: 选哑变量1 m,作 x(m) 、h(m) ,将 h(m) 以m=0 的垂直轴为对称轴翻褶成 h(-m) ; 移位: 将 h(-m) 移位 n,得 ...
  • 阶跃函数在MATLAB中有两种调用函数: heaviside()函数、stepfun()函数 下面我们就来看看它俩的区别和用法。如下图MATLAB字典上的介绍,可以看见heaviside函数的调用很简单:H = heaviside(x);并且heaviside是一个不...
  • 有f1(t)f2(t)f_1(t)f_2(t)f1​(t)f2​(t)两个函数,要对它们进行卷积运算,看这个积分: ∫∞∞f1(τ)∗f2(t−τ)dτ\int_{\infty}^{\infty}f_1(\tau)*f_2(t-\tau)d\tau∫∞∞​f1​(τ)∗f2​(t−τ)dτ 这个积分被...
  • %阶跃函数u(t)-u(t-1) f2=((t>0)-(t>1)); f3=conv(f1,f2);f3=f3*0.01; k=2*length(t)-1; k3=linspace(2*t(1),2*t(end),k); subplot(2,2,1) plot(t,f1); title('f1(t)') xlabel('t') ylabel('f1(t)') subplot(2,2,2)...
  • 冲激函数卷积规律

    万次阅读 2020-10-28 20:20:05
    复习信号与系统关于冲激函数卷积发现了一个小规律,不知是否正确,记录于此备忘:定义O为某种运算操作算子(包括但不限于叠加、倍乘、时移等操作,大概率需要满足线性时不变性),有以下规律:复习信号与系统关于...
  • 离散卷积理论

    2019-03-09 20:35:00
    上述两式画成函数图像就是: 任意离散时间信号 任意离散时间信号可以看成是由离散时间单位脉冲的移位加权单位脉冲组成。用x[n]表示任意离散时间信号,将移位单位脉冲信号与x[k]相乘可得如下结果,x[k]为x[n]序列中...
  • #include #include #include #include #define _PI_ 3.14159265358979323846264 #define _E_ 2.7182818284590452353602874713527 template struct Array{ T * data;... Array(){data=
  • 信号与系统1-关于卷积的那些事

    千次阅读 2020-01-27 00:10:51
    信号与系统1-关于卷积的那些事开头卷积的定义和推导卷积的过程有趣的卷积总结 开头 卷积是信号与系统分析中必不可少的工具。 这次的学习教材为Alan V. Oppenheim的信号与系统,视频课程为Alan V. Oppenheim在MIT...
  • 信号与系统 - 卷积运算

    千次阅读 2021-11-21 10:45:38
    信号的时域分解 ...普通函数与阶跃函数的卷积 普通函数和冲击偶函数卷积 举例 卷积的微积分分特性 卷积的微分特性 卷积的积分特性 卷积的微积分特性 举例 卷积的时移特性 举例 总结 ...
  • 首先说,当一个运算出现了冲激函数与冲激函数相乘的运算时,就说明这个运算是错误的,违反了某些规则。例如: sin(t)的傅里叶变换为:Dirac(w+1)+Dirac(w-1) 单位直流信号的傅里叶变换为2π*Dirac(w) 上述是...
  • 卷积和】 ①序列的时域分解 ②任意序列下的零状态响应 ③卷积和的定义 ④例题 【 2.卷积的图解法】 ①步骤 ②例题 ③拓展:竖式法求解卷积和 【 3.卷积和的性质】 ①性质 ②例题 ...
  • 用于计算严格正确的 SISO 系统响应的程序通过卷积积分到任意输入: */num = 传递函数的分子多项式系数 */den = 分母多项式传递函数系数(“ num”和“ den”的系数被指定为行向量,在's' 的递减幂) */t = 时间点...
  • 从信号处理认识卷积

    千次阅读 2021-12-15 09:02:14
    跟随祖师爷奥本海姆学的。 1. 线性时不变系统 线性时不变系统具有这样的特性: 对输入的线性组合的响应是单个响应的相同...信号(或函数)可以以多种方式分解为基本信号的线性组合。例如,我们可以考虑用多项式形式表示一
  • 这里主要想记录一下自己对拉式变换,卷积,以及传递函数的理解。之前上学时在某一门课上曾经想通过,但是后面又想不通了,今天重新学习了一下终于又想通了,所以记录下,方便以后能够找到。 这里记录的都是一些理性...
  • 1.熟悉连续信号经理想采样前后的频谱变化关系,加深对时域采样...3.利用卷积方法观察分析系统的时域特性。4.掌握序列傅里叶变换的计算机实现方法,利用序列的傅里叶变换对连续信号、离散信号及系统响应进行频域分析。
  • 数字信号处理,matlab卷积conv函数filter函数,stem函数快速学习,正弦离散函数作图例子详细
  • 信号与系统——卷积计算
  • 自从1943年,人工神经元的提出,就已经对激活函数有了概念。 而随着1957年,在单层感知机的提出中,激活函数还是简单的线性函数,较为单一,且只能解决简单的线性问题,不能分类中的异或问题,由此可见,线性函数...
  • 离散信号分解与卷积

    千次阅读 2019-03-26 15:42:14
    前面学信号,数字信号,一直没想清楚卷积,冲击信号,冲击响应,系统响应的关系 首先是单位冲击信号,它是单位脉冲的理想化(我的理解),特别注意 n,说明很多点,只是除了0,其它都没有值。 δ[n−k] 是 δ...
  • matlab计算离散信号的卷积

    千次阅读 多人点赞 2020-10-08 16:57:57
    数字信号处理计算离散信号的卷积1.默认序列从0开始1.matlab代码2.运行结果2. 当卷积序列起始位置不为0时1.matlab代码2.运行结果 1.默认序列从0开始 1.matlab代码 %# 复制下面的代码,粘贴在命令行中运行;或者复制到...
  • 一文搞懂什么是冲激函数、时域卷积、冲激响应以及频响曲线
  • 数字信号处理知识点总结(一):卷积
  • 文章目录卷积和1 序列的时域分解2 卷积和公式3 卷积和的图解法4 卷积和的不进位乘法运算5 卷积和的性质 卷积和 连续是卷积积分。 1 序列的时域分解 任意离散序列 f(k)f(k)f(k)可表示为 2 卷积和公式 卷积和的定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,244
精华内容 1,697
关键字:

阶跃函数卷积自己

友情链接: TuaccRepot__how__how.rar