专栏首页DSPSTACK.COM微分方程和差分方程的区别与联系
原创

微分方程和差分方程的区别与联系

前言

微分方程和差分方程的知识我们应该都知道,因为在数字信号处理中微分方程涉及了模拟滤波器,差分方程涉及了数字滤波器。但是有时会搞不清楚,或者说会在概念上混淆。虽然在做算法过程中可能不会受到太大影响,但是这种基础知识我们是有必要搞清楚的,这是算法人员的基本素养。下面就分别来讲讲微分方程、差分方程以及它们之间的区别和联系。

同时,在网上看到的关于它们的文章也只是粗略的对比,讲的也并不准确。

微分方程

我们从高等数学的知识知道,微分方程是求解未知函数的,同时它的基本元素是导数,也就是说是导数的函数,而真正求解的是未知函数,比如数字信号处理中的线性常系数微分方程的模拟滤波器:

(1)

它是模拟滤波器的一种。我们知道既然是导数,肯定是连续变量,这里就是连续时间信号,而再进一步就是拉普拉斯变换:

(2)

当 s = jw,就是连续时间信号的傅里叶变换。这是连续时间信号的一整套知识体系。

使用差分方程来逼近微分方程(其中一种)

从高等数学的知识知道,导数本质上是信号值的差除以时间的差,并对它进行求极限,那么从这点,我们就可以推得使用极限形式的表达式来替换导数是可行的,但是如果直接用极限,不就等于导数了吗,这样意义不大。另外,信号可分为连续时间信号和离散时间信号,所以可以用离散时间信号来替代连续时间信号,而求得一个近似值,这就是所谓的逼近了。接触过 IIR 滤波器的读者,对导数逼近设计 IIR 滤波器的方法应该并不陌生,其中就使用了这个原理。

一阶导数的替换公式如下(式(1)的左边):

(3)

其中等式左边是时间的一阶导数,而 T 是采样周期。

二阶导数的替换公式如下:

(4)

如此,就可得到任意阶的差分等式替换(这里就不具体说了,在导数逼近设计 IIR 滤波器的方法中有详细讲解)。

差分方程

数字信号处理中,线性常系数差分方程的 IIR 滤波器是这样的:

(5)

它是一个递归函数,那么我们现在提出问题了:式(1)和式(5)能对应起来吗?答案是肯定的

因为从式(3)和式(4)知,如果对式(1)所有阶数的导数进行替换,再对产生的式子进行重新排列,就会得出式(5)的结果,所不同的是系数而已,而系数就是我们需要求的。

相对应的,差分方程是对离散数据的操作,也就是离散时间信号,对应的就是 z 变换。当然当 z = exp(jw),就是离散时间的傅里叶变换。

结论

本篇举例讲解了微分方程和差分方程的基本关系,它们都是对应在时间域上,前者是连续时间变量,后者是离散时间变量;前者是拉普拉斯变换,后者是 z 变换。这些知识如果都理解透了,我们有时候会觉得这个很有趣,更会觉得这些显得都很和谐 ^_^

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 在信号处理中的优势

    本篇是对Pylab的小试牛刀,也是对许多其他主题的过渡——包括《编码速度估计的长时间等待的后果》。

    DSPSTACK.COM
  • 地震信号的一些基本概念

    可控震源是指通过一个与大地紧密耦合的振动平板,以反作用方式向地下传送一组连续振动的弹性波信号(又称扫描信号),再经过对地面接收到的反射波信号的处理和辨识,用于解...

    DSPSTACK.COM
  • [翻译] Python 在信号处理中的优势之二

    还有,诸如SPTool(用于一般信号可视化和过滤)或FDATool(用于数字滤波器设计)的GUI工具用于高质量的专业级信号处理和控制系统设计。

    DSPSTACK.COM
  • 神奇的AAD:跨域金融和人工智能

    在"化曲为直の神奇"介绍了导数, 导数的求解与最值有着千丝万缕的关系, 最著名的就是费马引理。 这让导数在机器学习风险最小极为有用。

    史博
  • ​monosys as 1ddlang语言选型+1ddcodebase实践选型绿色monodevelope集成常见多语言

    本文关键字:.net上 都有什么语言,最后一个支持xp的mono,绿色版monodevelop,绿色xamrin studio,mingwsys vs mono...

    minlearn
  • 解密百度前端技术体系

    整个业界在前端框架不断迭代中,也寻找到了许多突破方向,例如跨平台中的RN、Flutter,服务端GraphQL、Serverless,前端和客户端的融合越来越紧...

    前端迷
  • Class.forName 和 ClassLoader 到底有啥区别?

    来源 | https://www.cnblogs.com/jimoer/p/9185662.html

    用户1516716
  • Class.forName 和 ClassLoader 到底有啥区别?

    最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来...

    程序猿DD
  • Class.forName 和 ClassLoader 到底有啥区别?

    来源 | https://www.cnblogs.com/jimoer/p/9185662.html

    良月柒
  • 使用 sphinx 制作简洁而又美观的文档

    最近需要将API中的doc生成html给前端工程师参考调用。 于是粗率的学习了下sphinx ---- Sphinx 是用 Python 编写的,并且最初是为...

    小小科

扫码关注云+社区

领取腾讯云代金券