数字信号处理基础知识(一)

       现实中很多嵌入式项目的应用开发也都和数字信号处理紧密相联,从民用的仪器仪表,到军工的航空航天;从随处可见的传感器模组,到应用广泛的软件无线电,再到炙手可热的激光类雷达。

        有趣的是上学时候虽然不少专业都开设了“数字信号处理”这门课程,但是当时只对照书本没有太多直观感性的认识,印象中更多的是老师会板书很多公式和概念,得出一堆抽象结论,而当毕业工作以后再用到这些知识,大家也懒得去再找课本复习下,可能只是对照着前人项目的基础上去模仿修改。也导致了理论和实践的脱节,在校学理论时候,只关心课本考试的题目;工作做项目时候,只关心工程遇到的问题,这样就很难建立起比较完整的知识体系去在实践中解决问题,完善产品质量。

       笔者计划先用二十篇的篇幅把“数字信号处理”中重要的理论知识总结归纳下,为后期实战内容的展开奠定坚实理论基础,其中对一些枯燥乏味的概念,也会进行举例说明并加以手工计算、Matlab视图展示,同时为了从实际工程应用的角度,更生动、更完整、更准确地表述出“数字信号处理”实施细节,笔者参考了众多国内外优秀经典的书籍、博客、教程等,在这里表示真诚的感谢。

       虽说现在的工具也越来越先进,比如Matlab提供了大量的数字信号处理相关计算和绘图函数;Xilinx和Altera提供了丰富的数字滤波器、快速傅里叶变化相关IP核;ST和NXP提供了完善的信号处理库函数,同时不经意间也给人一种错觉,仿佛在做工程项目时候,大家只需要动手配配参数、调调接口、改改逻辑即可,而实际项目中真的想把一个产品稳定性和可靠性把控住,确实是需要很多经验、理论、技术支撑的,尤其在嵌入式开发当中对底层原理性东西搞通透后,知其然还要知其所以然,才能借助不同工具实现项目中的二次开发和应用。

       首先介绍“离散时间序列”这个概念,“离散时间序列”有的教材中也称为“离散时间信号”,是连续时间内以时间T等间隔采样得到的,其中T记作“采样周期”或“采样间隔”。在这里引入“采样”的概念,是因为嵌入式SoC系统需要处理数字信号,所以把不同形式的模拟信号进行周期采集后,才能再进行后续的计算分析,其中采样间隔T=1/fs,即周期等于频率的倒数。

       采样间隔通常是均匀的,比如一般项目中我们使用单片机在等间隔的定时器中断里通过片内或者外挂ADC采集到一个模拟信号点,数学上则用x(n)表示信号在nT点上的值,显然n是整数,一般就用x(n)表示离散时间信号的序列值,如图1所示即为采样间隔的数学表示示意图。    

图1 等时间采样间隔的数学表示

       同时如图1所示,“待采波形”是个单位正弦波,在这里我们可以用x(n) = sin (2π*f0*n*ts) 来表示“待采波形”和“采样周期”之间的关系,其中f0为“待采波形”频率,因为ω = 2π/T = 2π*f0,所以数学上可以用sin (2π*f0)来表示“待采波形”,而ts为“采样周期”,n为采样后得到“离散时间序列”的序号,故可用离散序列x(n) = sin (2π*f0*n*ts)表示对“待采波形”频率为f0的单位正弦波,进行以ts为“采样周期”后的离散采样结果,这是一个非常经典的数学表达式,在下一篇博客会由此引出“周期采样”产生频域中的二义性(假频)。

       在引入“离散时间序列”概念后,进一步地来讨论其数学上的表示方法,国内教科书中通常定义了三种表示方法,即数列表示、函数表示、图形表示。数列表示法如x1 (n) = { 1, 2, 3, 4, 5 },x2 (n) = {6, 5, 7, 4, 5 },其中习惯性用下划线标出n=0在离散时间序列中位置;函数表示法则如:x3 (n) = Asin(w*n +j),n为整数;图形表示法如图2所示。  

图2 用图形法表示离散时间序列

       另外还需要说明以下三个典型的序列模型:1.单位抽样序列 d (n);2. 单位阶跃序列u(n);3. 矩形序列RN (n),如图3所示是三个理想序列的数学表达式,其中d (n)是一个脉冲幅度为1的现实序列,即当且仅当n为0时d (n)为1,n为其他值时d (n)均为0;d (n) = u(n) u(n 1);R (n) = u(n) -u(n-N)。

图3 单位抽样序列、单位阶跃序列、矩形序列数学表达式

        显然对“离散时间序列”进行了数字表达后,我们就要对它进行一些常规的数据处理,包括加法和乘法运算、移位和反折运算、抽取和插取运算、卷积和运算,这对后期理解不同类型数字滤波器的参数化设计非常重要,比如大家工程中常用的FIR滤波器,实际内部即为移位、乘法加法运算的综合,在后期滤波器设计当中会详细展开说明。

        序列的和运算如图4所示,即指同序n的序列值逐项对应相加而构成的新序列;序列的积运算如图5所示,即指同序号n的序列值逐项对应相乘而构成的新序列。

图4 序列的和运算

图5 序列的积运算

        序列的移位运算如图6所示,设有一序列 x(n),当m > 0时,x(n-m) 表示序列x(n)逐项依次右移m位后得到的序列,x(n+m)表示序列x(n)逐项依次左移m位后得到的序列,为了方便记忆即“左加右减”原则。这里为了帮助大家理解,举例说明当n = 1时,对于序列x(n-1) = x(0) = 1,即相对于x(n)右移了一位,相当于产生了滞后;对于序列x(n+1) = x(2) = 3,相对于x(n)左移了一位,相当于产生了超前。

图6 序列的移位运算

        序列的反折运算如图7所示,也有的教科书中称为反褶,即设有序列x(n),则x(-n)是以n=0为纵轴将x(n)反折后的序列,这里需要特别强调的是在序列反折运算的前后x(0)的值要保持不变。

图7 序列的反折运算

        国内不同版本的“数字信号处理”教科书会发散性地列举很多常见的“离散时间序列”模型,笔者撰写二十篇数字信号处理博客的初衷更多在于从工程实践角度出发,更深入理解数字信号处理运算的底层逻辑和实施方法,所以在这里不再展开举例。

相关推荐

  1. 数字信号处理基础

    2024-07-16 03:18:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 03:18:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 03:18:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 03:18:02       57 阅读
  4. Python语言-面向对象

    2024-07-16 03:18:02       68 阅读

热门阅读

  1. linux压缩/解压缩命令

    2024-07-16 03:18:02       18 阅读
  2. python pandas处理股票量化数据:笔记4

    2024-07-16 03:18:02       17 阅读
  3. Vue3中的ref函数

    2024-07-16 03:18:02       19 阅读
  4. qt 获取父控件

    2024-07-16 03:18:02       19 阅读
  5. 哈希表实现的并查集:Leetcode 721. 账户合并

    2024-07-16 03:18:02       19 阅读
  6. 比特币中的挖矿到底是什么意思

    2024-07-16 03:18:02       21 阅读
  7. Lianwei 安全周报|2024.07.15

    2024-07-16 03:18:02       26 阅读
  8. Bert中文预训练模型(Bert-base-chinese)

    2024-07-16 03:18:02       24 阅读