数字信号处理入门:从符号到 Z 变换、DFT、IIR 与 FIR

面向刚入门读者,从符号含义出发,用尽量直白的方式梳理数字信号处理里的 Z 变换、DFT/FFT、IIR 设计与 FIR 设计主线。

数字信号处理入门:从符号到 Z 变换、DFT、IIR 与 FIR

这篇文章按“你什么都不懂”的状态来写。先不急着背公式,先把每个符号、每个概念的“人话意思”弄清楚。数字信号处理最怕的不是公式多,而是看到 x(n)x(n)H(z)H(z)X(k)X(k)ω\omega、ROC 就不知道它们在干什么。

先记住一句总纲:

数字信号处理,就是研究一串数字怎样变化、怎样分析频率、怎样设计滤波器。\boxed{\text{数字信号处理,就是研究一串数字怎样变化、怎样分析频率、怎样设计滤波器。}}

讲义里也把数字信号处理概括为:信号是承载信息的对象,数字表示用离散数据记录,处理表示对这些数据进行分析、变换、滤波、压缩、识别或重建。

数字信号处理的整体脉络

0. 先把符号看懂

1. x(t)x(t)x(n)x(n) 是什么

x(t)x(t) 表示连续时间信号。

这里的 tt 是连续时间,比如

t=0.1,t=0.15,t=2.367t=0.1,\quad t=0.15,\quad t=2.367

都可以取。你可以把 x(t)x(t) 想象成一条连续曲线,比如声音、电压、温度。

x(n)x(n) 表示离散时间信号。

这里的 nn 只能是整数,比如

n=0,1,2,3,n=0,1,2,3,\cdots

所以 x(n)x(n) 不是一条连续曲线,而是一串点:

x(0),x(1),x(2),x(3),x(0),x(1),x(2),x(3),\cdots

讲义里也强调,离散时间信号可以理解为一串按整数编号排列的数据点。因此:

x(t)=连续曲线x(t)=\text{连续曲线} x(n)=一串数字点x(n)=\text{一串数字点}

考试中,看到 nn,你就知道这是离散时间信号。

2. y(n)y(n) 是什么

x(n)x(n) 一般表示输入信号,y(n)y(n) 一般表示输出信号。

比如一个系统把输入变成输出:

x(n)系统y(n)x(n)\rightarrow \text{系统}\rightarrow y(n)

也可以写成:

y(n)=T[x(n)]y(n)=T[x(n)]

这里 T[]T[\cdot] 表示系统对输入做的运算。它可以是延迟、加法、滤波、放大、差分等。讲义中也说明,离散时间系统就是把输入序列 x(n)x(n) 经过某种运算后变成输出序列 y(n)y(n)

输入、系统、输出的关系

3. δ(n)\delta(n) 是什么

δ(n)\delta(n) 叫单位冲激序列,也叫单位抽样序列,定义为

δ(n)={1,n=00,n0\delta(n)= \begin{cases} 1,& n=0 \\ 0,& n\ne 0 \end{cases}

人话解释:它就是一个只在 n=0n=0 处冒出来的单点信号。

如果写成 δ(n2)\delta(n-2),意思是这个单点移动到 n=2n=2

δ(n2)={1,n=20,n2\delta(n-2)= \begin{cases} 1,& n=2 \\ 0,& n\ne 2 \end{cases}

为什么它重要?因为任何离散序列都可以拆成很多个冲激点相加。比如:

x(n)=2δ(n)+3δ(n1)δ(n2)x(n)=2\delta(n)+3\delta(n-1)-\delta(n-2)

意思是

x(0)=2,x(1)=3,x(2)=1x(0)=2,\quad x(1)=3,\quad x(2)=-1

单位冲激序列示意

4. u(n)u(n) 是什么

u(n)u(n) 叫单位阶跃序列,一般定义为

u(n)={1,n00,n<0u(n)= \begin{cases} 1,& n\ge 0 \\ 0,& n<0 \end{cases}

人话解释:从 n=0n=0 开始,它一直等于 11

所以

anu(n)a^n u(n)

表示从 n=0n=0 开始的指数序列,因为 u(n)u(n)n<0n<0 的部分都挡掉了。

单位阶跃序列示意

5. h(n)h(n) 是什么

h(n)h(n) 叫单位冲激响应。

意思是:系统输入一个 δ(n)\delta(n),系统输出什么,就叫 h(n)h(n)

δ(n)系统h(n)\delta(n)\rightarrow \text{系统}\rightarrow h(n)

对 LTI 系统来说,h(n)h(n) 非常重要。只要知道 h(n)h(n),任何输入 x(n)x(n) 的输出都可以用卷积算出来:

y(n)=x(n)h(n)y(n)=x(n)*h(n)

讲义中直接把冲激响应比作 LTI 系统的身份证,因为它能描述系统自身特性。

6. * 是什么

* 表示卷积。卷积公式是

y(n)=x(n)h(n)=m=+x(m)h(nm)y(n)=x(n)*h(n)=\sum_{m=-\infty}^{+\infty}x(m)h(n-m)

你现在不必一上来就怕这个公式。它的人话意思是:

系统输出 = 输入信号和系统冲激响应的滑动重叠求和\boxed{\text{系统输出 = 输入信号和系统冲激响应的滑动重叠求和}}

讲义中也解释,卷积可以理解为滑动、重叠、相乘、求和。

离散卷积的基本图示

7. jj 是什么

jj 是虚数单位。在数学里常写 ii,但电路和信号里常写 jj,因为 ii 容易和电流混淆。

j2=1j^2=-1

复数一般写成

a+jba+jb

其中 aa 是实部,bb 是虚部。

8. ejωe^{j\omega} 是什么

这是复指数。欧拉公式是

ejω=cosω+jsinωe^{j\omega}=\cos\omega+j\sin\omega

所以 ejωe^{j\omega} 可以理解为单位圆上的一个旋转点。在数字信号处理中,很多频率分析都用 ejωe^{j\omega} 表示,因为正弦、余弦都可以用复指数表示。

9. ω\omegaΩ\Omega 有什么区别

ω\omega 是离散时间角频率,一般出现在

X(ejω),H(ejω)X(e^{j\omega}),\quad H(e^{j\omega})

它通常只看

πωπ-\pi\le \omega\le \pi

或者

0ω2π0\le \omega\le 2\pi

因为离散时间频谱具有 2π2\pi 周期性。

Ω\Omega 是连续时间角频率,一般出现在模拟滤波器中,比如

Ha(jΩ)H_a(j\Omega)

简单记忆:

ω:数字频率\boxed{\omega\text{:}\text{数字频率}} Ω:模拟频率\boxed{\Omega\text{:}\text{模拟频率}}

10. zz 是什么

zz 是复变量,可以写成

z=rejωz=re^{j\omega}

其中 rr 表示半径,ω\omega 表示角度。

Z 变换就是把信号放到 zz 平面里分析。讲义里说,把 DTFT 中的单位圆变量 ejωe^{j\omega} 推广成一般复变量 z=rejωz=re^{j\omega},就得到 Z 变换。

r=1r=1 时:

z=ejωz=e^{j\omega}

这就是单位圆。

所以:

DTFT 是 Z 变换在单位圆上的取值\boxed{\text{DTFT 是 Z 变换在单位圆上的取值}}

第一轮:Z 变换、系统函数、因果稳定、零极点分析

这一轮最重要,因为它最容易出大题。你先记住一句话:

Z 变换是用来分析离散系统的工具。\boxed{\text{Z 变换是用来分析离散系统的工具。}}

它能解决三个问题:第一,序列对应什么表达式;第二,系统是否因果、是否稳定;第三,零极点怎样影响频率响应。

1. Z 变换定义

Z 变换定义为

X(z)=n=+x(n)znX(z)=\sum_{n=-\infty}^{+\infty}x(n)z^{-n}

这里每个符号都要懂:

  • x(n)x(n):原来的离散序列
  • X(z)X(z):Z 变换之后的表达式
  • nn:整数下标
  • zz:复变量
  • znz^{-n}:Z 变换里的基本项

你可以把它理解为:

Z 变换把时域序列 x(n) 变成复平面函数 X(z)\boxed{\text{Z 变换把时域序列 }x(n)\text{ 变成复平面函数 }X(z)}

2. ROC 是什么

ROC 是 Region of Convergence,中文叫收敛域。

Z 变换是一个无穷求和:

X(z)=n=+x(n)znX(z)=\sum_{n=-\infty}^{+\infty}x(n)z^{-n}

这个求和不是对所有 zz 都能收敛。能让它收敛的 zz 的范围,就叫 ROC。

人话解释:

ROC 就是这个 Z 变换公式在哪些地方成立。\boxed{\text{ROC 就是这个 Z 变换公式在哪些地方成立。}}

考试重点是:写 Z 变换时不能只写 X(z)X(z),还要写 ROC。因为同一个 X(z)X(z),ROC 不同,原来的 x(n)x(n) 可能不同。

例如

X(z)=11az1X(z)=\frac{1}{1-az^{-1}}

如果 ROC 是

z>a|z|>|a|

对应右边序列

x(n)=anu(n)x(n)=a^n u(n)

如果 ROC 是

z<a|z|<|a|

对应左边序列

x(n)=anu(n1)x(n)=-a^n u(-n-1)

所以:

X(z) 相同,ROC 不同,x(n) 不同\boxed{X(z)\text{ 相同,ROC 不同,}x(n)\text{ 不同}}

Z 变换与 ROC 的典型关系

3. 右边序列、左边序列、双边序列

右边序列:从某个点开始往右有值。典型形式:

anu(n)a^n u(n)

右边序列的 ROC 在最外极点之外。

左边序列:往左边有值。典型形式:

anu(n1)-a^n u(-n-1)

左边序列的 ROC 在最内极点之内。

双边序列:左右两边都有值,它的 ROC 通常是两个极点之间的圆环。

只要记住:

右边序列:ROC 向外\boxed{\text{右边序列:ROC 向外}} 左边序列:ROC 向内\boxed{\text{左边序列:ROC 向内}} 双边序列:ROC 在中间一圈\boxed{\text{双边序列:ROC 在中间一圈}}

4. 极点和零点是什么

如果

X(z)=P(z)Q(z)X(z)=\frac{P(z)}{Q(z)}

那么:

  • P(z)=0P(z)=0 的根叫零点
  • Q(z)=0Q(z)=0 的根叫极点

人话解释:

  • 零点:让函数变成 00 的位置
  • 极点:让函数趋于无穷大或发散的位置

例如

H(z)=zz0.5H(z)=\frac{z}{z-0.5}

分子 z=0z=0,所以零点是

z=0z=0

分母 z0.5=0z-0.5=0,所以极点是

z=0.5z=0.5

零点、极点与单位圆上的频率响应关系

5. 单位圆是什么

单位圆就是复平面中半径为 11 的圆:

z=1|z|=1

因为

z=ejωz=e^{j\omega}

时,z=1|z|=1

为什么单位圆重要?因为频率响应就是系统函数在单位圆上的取值:

H(ejω)=H(z)z=ejωH(e^{j\omega})=H(z)\big|_{z=e^{j\omega}}

但必须注意:单位圆必须在 ROC 内,频率响应才存在。所以要补一句:

前提:ROC 包含单位圆\boxed{\text{前提:ROC 包含单位圆}}

6. 系统函数 H(z)H(z) 是什么

对 LTI 系统,系统函数定义为

H(z)=Z[h(n)]H(z)=Z[h(n)]

也就是单位冲激响应 h(n)h(n) 的 Z 变换。

因为 LTI 系统满足

y(n)=x(n)h(n)y(n)=x(n)*h(n)

Z 域中卷积变乘法:

Y(z)=X(z)H(z)Y(z)=X(z)H(z)

所以

H(z)=Y(z)X(z)H(z)=\frac{Y(z)}{X(z)}

人话解释:

H(z) 就是系统的数学说明书\boxed{H(z)\text{ 就是系统的数学说明书}}

7. 因果系统怎么判断

因果的意思是:输出不能提前知道未来。

例如

y(n)=x(n)+x(n1)y(n)=x(n)+x(n-1)

是因果系统,因为它只用当前输入和过去输入。

但是

y(n)=x(n+1)y(n)=x(n+1)

不是因果系统,因为它用了未来输入。

对 LTI 系统,最重要条件是

因果h(n)=0,n<0\boxed{\text{因果}\Longleftrightarrow h(n)=0,\quad n<0}

在 Z 域中,如果系统是有理系统,则

因果系统的 ROC 在最外极点之外\boxed{\text{因果系统的 ROC 在最外极点之外}}

8. 稳定系统怎么判断

稳定的意思是:输入不爆炸,输出也不能爆炸。正式说法叫 BIBO 稳定,也就是

有界输入产生有界输出\boxed{\text{有界输入产生有界输出}}

对 LTI 系统,稳定条件是

n=+h(n)<\boxed{\sum_{n=-\infty}^{+\infty}|h(n)|<\infty}

在 Z 域中,稳定条件是

ROC 包含单位圆\boxed{\text{ROC 包含单位圆}}

所以,如果一个系统既因果又稳定,而且是有理系统,那么所有极点必须在单位圆内:

因果稳定有理系统所有极点在单位圆内\boxed{\text{因果稳定有理系统} \Longleftrightarrow \text{所有极点在单位圆内}}

因果性、稳定性与极点位置

9. 零极点怎样看滤波器

系统函数一般可以写成

H(z)=A(zcm)(zdk)H(z)=A\frac{\prod (z-c_m)}{\prod (z-d_k)}

这里 cmc_m 是零点,dkd_k 是极点。

在单位圆上

z=ejωz=e^{j\omega}

频率响应幅度为

H(ejω)=Aejωcmejωdk|H(e^{j\omega})| = |A| \frac{\prod |e^{j\omega}-c_m|}{\prod |e^{j\omega}-d_k|}

人话很简单:单位圆上的某个频率点靠近零点,该频率会被压低;靠近极点,该频率会被增强。

所以:

  • 零点像压制器
  • 极点像增强器

如果极点靠近 ω=0\omega=0,低频增强,可能是低通;如果零点靠近 ω=0\omega=0,低频被压制,可能是高通。

10. 这一轮你必须会的题型

第一类:给 X(z)X(z) 和 ROC,求 x(n)x(n)

第二类:给 H(z)H(z),判断因果稳定。

第三类:给零极点图,判断滤波器类型。

小例题:由 X(z)X(z) 与 ROC 反推序列

已知

X(z)=110.5z1X(z)=\frac{1}{1-0.5z^{-1}}

若 ROC 为 z>0.5|z|>0.5,求 x(n)x(n),并判断它是不是右边序列。

解答:

先看公式

11az1anu(n),ROC: z>a\frac{1}{1-az^{-1}} \Longleftrightarrow a^n u(n),\quad \text{ROC: }|z|>|a|

这里 a=0.5a=0.5,而题目给出的 ROC 恰好是 z>0.5|z|>0.5,所以

x(n)=0.5nu(n)x(n)=0.5^n u(n)

因为它在 n=0n=0 之后向右展开,所以它是右边序列。


第二轮:DFT、圆周卷积、FFT

这一轮先不讲难题,先讲它到底是什么。你先把这一轮理解成一句话:

DFT 是把一段有限长数字序列,变成有限个频率信息。\boxed{\text{DFT 是把一段有限长数字序列,变成有限个频率信息。}}

你现在先别急着背公式,先搞懂下面这几个问题。

原来我们手里有一串数:

x(0),x(1),x(2),x(3),x(0),x(1),x(2),x(3),\cdots

这叫时域序列。意思是:它是按时间顺序排列的一串数字。

但是我们还想知道:这串数字里面有没有低频成分?有没有高频成分?哪些频率比较强?哪些频率比较弱?

这就需要把它从时间角度换到频率角度去看。DFT 做的就是这件事。讲义里也说,计算机不能直接处理连续频率曲线,所以 DFT 要解决频谱如何离散化,以及怎样快速计算两个问题。

1. DFT 全名是什么

DFT 是 Discrete Fourier Transform,中文叫离散傅里叶变换。

拆开理解:

  • 离散,表示我们处理的是一串点,不是连续曲线。
  • 傅里叶变换,表示把信号从时间角度变成频率角度。

所以 DFT 的人话解释是:

DFT 把一串有限长度的数字,分解成若干个频率成分。\boxed{\text{DFT 把一串有限长度的数字,分解成若干个频率成分。}}

例如你有一段序列:

x(n)={1,2,3,4}x(n)=\{1,2,3,4\}

它在时域里只是 44 个数。

做 DFT 以后,会得到:

X(k)={X(0),X(1),X(2),X(3)}X(k)=\{X(0),X(1),X(2),X(3)\}

这些 X(k)X(k) 就是频域里的 44 个频率点。

2. x(n)x(n) 是什么

x(n)x(n) 是时域序列。

比如:

x(n)={1,2,3,4}x(n)=\{1,2,3,4\}

意思是:

x(0)=1,x(1)=2,x(2)=3,x(3)=4x(0)=1,\quad x(1)=2,\quad x(2)=3,\quad x(3)=4

这里的 nn 是时域下标,也就是第几个采样点。

所以你看到 x(n)x(n),就想成:

x(n)=原来的那串数字\boxed{x(n)=\text{原来的那串数字}}

3. X(k)X(k) 是什么

X(k)X(k) 是 DFT 之后得到的频域序列。

这里的 kk 不是时间下标,而是频率下标。

比如做 44 点 DFT,得到:

X(0),X(1),X(2),X(3)X(0),X(1),X(2),X(3)

它们分别表示 44 个频率位置上的信息。

所以你看到 X(k)X(k),就想成:

X(k)=第 k 个频率点的结果\boxed{X(k)=\text{第 }k\text{ 个频率点的结果}}

注意大小写:

x(n):时域x(n)\text{:时域} X(k):频域X(k)\text{:频域}

小写 xx 是原序列,大写 XX 是变换后的频谱。

4. NN 是什么

NN 是 DFT 点数。

如果你做 44 点 DFT,那么

N=4N=4

如果你做 88 点 DFT,那么

N=8N=8

NN 点 DFT,就会得到 NN 个频率点:

X(0),X(1),,X(N1)X(0),X(1),\cdots,X(N-1)

5. DFT 的公式是什么

NN 点 DFT 定义为:

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

你先不要怕这个公式。把它翻译成人话就是:

第 k 个频率点 X(k),等于原序列每个点乘上一个旋转因子后全部加起来。\boxed{\text{第 }k\text{ 个频率点 }X(k)\text{,等于原序列每个点乘上一个旋转因子后全部加起来。}}

逐个符号解释:

  • x(n)x(n):原来的第 nn 个数字
  • nn:时域下标,从 00N1N-1
  • kk:频域下标,表示第几个频率点
  • NN:DFT 总点数
  • jj:虚数单位,满足 j2=1j^2=-1
  • ej2πNkne^{-j\frac{2\pi}{N}kn}:复指数,可以理解成单位圆上的旋转量
  • \sum:求和,把所有 nn 对应的结果加起来

所以公式可以读成:

X(k)=把 x(0),x(1),,x(N1) 按第 k 个频率规则加权求和\boxed{ X(k)=\text{把 }x(0),x(1),\cdots,x(N-1)\text{ 按第 }k\text{ 个频率规则加权求和} }

讲义中给出的 DFT 定义也是:把 NN 个时域样本 x(0),x(1),,x(N1)x(0),x(1),\cdots,x(N-1) 变成 NN 个频域样本 X(0),X(1),,X(N1)X(0),X(1),\cdots,X(N-1)

6. DFT 到底在算什么

你可以这样理解:一串信号可能由很多频率成分组成。

比如一个声音信号,里面可能有低音、中音、高音。

在时域里,你只看到波形怎么变化。

在频域里,你能看到哪些频率强,哪些频率弱。

DFT 就是把

一串随时间变化的数字\boxed{\text{一串随时间变化的数字}}

变成

一串表示频率强弱的数字\boxed{\text{一串表示频率强弱的数字}}

也就是

x(n)X(k)x(n)\rightarrow X(k)

7. X(0)X(0) 表示什么

X(0)X(0) 是第 00 个频率点。它通常表示直流分量,也就是信号的平均趋势。

因为当 k=0k=0 时:

ej2πNkn=e0=1e^{-j\frac{2\pi}{N}kn}=e^0=1

所以

X(0)=n=0N1x(n)X(0)=\sum_{n=0}^{N-1}x(n)

也就是说,X(0)X(0) 就是所有时域样本加起来。

如果序列整体偏大,X(0)X(0) 就大;如果序列正负抵消,X(0)X(0) 可能比较小。

8. X(1),X(2),X(1),X(2),\cdots 表示什么

它们表示不同频率位置上的成分。

kk 越大,通常表示频率越高。但注意,DFT 的频率是周期的,所以不是简单地一直越来越高。对考试来说,你先记住:

k 是频率编号\boxed{k\text{ 是频率编号}} X(k) 是第 k 个频率点的大小和相位信息\boxed{X(k)\text{ 是第 }k\text{ 个频率点的大小和相位信息}}

9. IDFT 是什么

DFT 是从时域到频域:

x(n)X(k)x(n)\rightarrow X(k)

IDFT 是反过来,从频域回到时域:

X(k)x(n)X(k)\rightarrow x(n)

IDFT 叫逆离散傅里叶变换,公式是:

x(n)=1Nk=0N1X(k)ej2πNknx(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{j\frac{2\pi}{N}kn}

你要记住 DFT 和 IDFT 的区别:

DFT:

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

IDFT:

x(n)=1Nk=0N1X(k)ej2πNknx(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{j\frac{2\pi}{N}kn}

区别有两个:

  • DFT 指数是负号
  • IDFT 指数是正号,并且前面多了一个 1/N1/N

讲义中也给出了对应的反变换公式,说明 IDFT 可以从这 NN 个频域样本恢复主值区间内的时域序列。

10. 为什么 DFT 里面有周期延拓

这是你理解圆周移位和圆周卷积的关键。

DFT 只处理有限长序列,比如:

x(n)={1,2,3,4}x(n)=\{1,2,3,4\}

但是在 DFT 的世界里,它不是只看这一段,而是默认这段序列会不断重复:

1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,\cdots

这叫周期延拓。

也就是说,DFT 默认:

x(n+N)=x(n)x(n+N)=x(n)

例如 N=4N=4 时:

x(4)=x(0),x(5)=x(1),x(6)=x(2),x(7)=x(3)x(4)=x(0),\quad x(5)=x(1),\quad x(6)=x(2),\quad x(7)=x(3)

讲义中也强调,DFT 中有限长序列总是隐含周期性,有限长序列被看成周期序列的一个主值区间。

这就是为什么后面会出现圆周移位和圆周卷积。因为 DFT 不是把序列放在一条直线上看,而是把它绕成一个圆来看。

11. DFT 和 DTFT 的区别

DTFT 是

X(ejω)=n=+x(n)ejωnX(e^{j\omega})=\sum_{n=-\infty}^{+\infty}x(n)e^{-j\omega n}

这里的 ω\omega 是连续变化的,所以 X(ejω)X(e^{j\omega}) 是一条连续频谱曲线。

DFT 是

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

这里的 kk 只能取

k=0,1,2,,N1k=0,1,2,\cdots,N-1

所以 DFT 只得到 NN 个频率点。

区别就是:

DTFT:连续频谱\boxed{\text{DTFT:}\text{连续频谱}} DFT:有限个频率点\boxed{\text{DFT:}\text{有限个频率点}}

12. DFT 和 Z 变换、DTFT 的关系

DFT 可以看成 Z 变换在单位圆上的 NN 点采样:

X(k)=X(z)z=ej2πNkX(k)=X(z)\bigg|_{z=e^{j\frac{2\pi}{N}k}}

也可以看成 DTFT 在 NN 个频率点上的采样:

X(k)=X(ejω)ω=2πNkX(k)=X(e^{j\omega})\bigg|_{\omega=\frac{2\pi}{N}k}

人话解释:

DFT 不是新东西,它就是从连续频谱上取几个点\boxed{\text{DFT 不是新东西,它就是从连续频谱上取几个点}}

DTFT 到 DFT 的采样关系

13. 补零是什么意思

如果原序列长度是 MM,但题目要求做 NN 点 DFT,并且 N>MN>M,就要在后面补零。

例如:

x(n)={1,2,3}x(n)=\{1,2,3\}

55 点 DFT,就写成:

{1,2,3,0,0}\{1,2,3,0,0\}

补零不会增加新信息,只是让频域采样更密。

13.1 按定义怎么一步一步计算 DFT

前面讲的是 DFT 的含义,这里单独讲“题目真让你算的时候该怎么下手”。这一节先不走 FFT,只按定义直接代入。

先记住一句话:

DFT 就是把一串数,分别代入不同的频率编号 k,算出 X(k)\boxed{\text{DFT 就是把一串数,分别代入不同的频率编号 }k\text{,算出 }X(k)\text{。}}

13.1.1 DFT 的计算公式

NN 点 DFT 的定义是

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

也常写成

X(k)=n=0N1x(n)WNknX(k)=\sum_{n=0}^{N-1}x(n)W_N^{kn}

其中

WN=ej2πNW_N=e^{-j\frac{2\pi}{N}}

WNW_N 叫旋转因子。你可以把它理解为:算 DFT 时,会不断取这个复数的不同次幂。

所以 DFT 公式也可以写成

X(k)=x(0)WN0k+x(1)WN1k+x(2)WN2k++x(N1)WN(N1)k\boxed{ X(k)=x(0)W_N^{0k}+x(1)W_N^{1k}+x(2)W_N^{2k}+\cdots+x(N-1)W_N^{(N-1)k} }

13.1.2 DFT 的直接计算步骤

如果题目给你

x(n)={x(0),x(1),,x(N1)}x(n)=\{x(0),x(1),\cdots,x(N-1)\}

让你求 NN 点 DFT,就按下面五步走:

第一步,确定 NN

第二步,写出旋转因子

WN=ej2πNW_N=e^{-j\frac{2\pi}{N}}

第三步,列出常用的 WN0,WN1,,WNN1W_N^0,W_N^1,\cdots,W_N^{N-1}

第四步,分别计算

X(0),X(1),,X(N1)X(0),X(1),\cdots,X(N-1)

第五步,整理成

X(k)={X(0),X(1),,X(N1)}X(k)=\{X(0),X(1),\cdots,X(N-1)\}

13.1.3 最简单的 2 点 DFT

x(n)={a,b}x(n)=\{a,b\}

也就是

x(0)=a,x(1)=bx(0)=a,\qquad x(1)=b

这里 N=2N=2,旋转因子为

W2=ej2π2=ejπ=1W_2=e^{-j\frac{2\pi}{2}}=e^{-j\pi}=-1

2 点 DFT 只有两个结果:X(0)X(0)X(1)X(1)

先算 X(0)X(0)

X(0)=x(0)W200+x(1)W210=a+bX(0)=x(0)W_2^{0\cdot 0}+x(1)W_2^{1\cdot 0}=a+b

再算 X(1)X(1)

X(1)=x(0)W201+x(1)W211=a+bW2=abX(1)=x(0)W_2^{0\cdot 1}+x(1)W_2^{1\cdot 1}=a+bW_2=a-b

所以

{a,b} 的 2 点 DFT 是 {a+b, ab}\boxed{\{a,b\}\text{ 的 2 点 DFT 是 }\{a+b,\ a-b\}}

例如

x(n)={1,3}x(n)=\{1,3\}

X(0)=1+3=4,X(1)=13=2X(0)=1+3=4,\qquad X(1)=1-3=-2

因此

DFT[{1,3}]={4,2}\boxed{\mathrm{DFT}[\{1,3\}]=\{4,-2\}}

13.1.4 重点例子:4 点 DFT 怎么算

现在看最常见的小例子:

x(n)={1,2,3,4}x(n)=\{1,2,3,4\}

也就是

x(0)=1,x(1)=2,x(2)=3,x(3)=4x(0)=1,\quad x(1)=2,\quad x(2)=3,\quad x(3)=4

这里 N=4N=4,所以要算

X(0),X(1),X(2),X(3)X(0),X(1),X(2),X(3)

先求旋转因子:

W4=ej2π4=ejπ2W_4=e^{-j\frac{2\pi}{4}}=e^{-j\frac{\pi}{2}}

根据欧拉公式

ejπ2=cosπ2jsinπ2=je^{-j\frac{\pi}{2}}=\cos\frac{\pi}{2}-j\sin\frac{\pi}{2}=-j

所以

W4=j\boxed{W_4=-j}

接着列出常用次幂:

W40=1,W41=j,W42=1,W43=j,W44=1W_4^0=1,\quad W_4^1=-j,\quad W_4^2=-1,\quad W_4^3=j,\quad W_4^4=1

因此 4 点 DFT 最常用的表是

W40=1,W41=j,W42=1,W43=j\boxed{W_4^0=1,\quad W_4^1=-j,\quad W_4^2=-1,\quad W_4^3=j}

DFT 公式写成

X(k)=n=03x(n)W4knX(k)=\sum_{n=0}^{3}x(n)W_4^{kn}

代入 x(0)=1,x(1)=2,x(2)=3,x(3)=4x(0)=1,x(1)=2,x(2)=3,x(3)=4

X(k)=1W40k+2W41k+3W42k+4W43kX(k)=1\cdot W_4^{0k}+2\cdot W_4^{1k}+3\cdot W_4^{2k}+4\cdot W_4^{3k}

现在分别计算。

先算 X(0)X(0)。令 k=0k=0,则

X(0)=1W40+2W40+3W40+4W40X(0)=1\cdot W_4^0+2\cdot W_4^0+3\cdot W_4^0+4\cdot W_4^0

因为 W40=1W_4^0=1,所以

X(0)=1+2+3+4=10X(0)=1+2+3+4=10

因此

X(0)=10\boxed{X(0)=10}

再算 X(1)X(1)。令 k=1k=1,则

X(1)=1W40+2W41+3W42+4W43X(1)=1\cdot W_4^0+2\cdot W_4^1+3\cdot W_4^2+4\cdot W_4^3

代入 W40=1,W41=j,W42=1,W43=jW_4^0=1,W_4^1=-j,W_4^2=-1,W_4^3=j,得到

X(1)=1+2(j)+3(1)+4jX(1)=1+2(-j)+3(-1)+4j

整理可得

X(1)=12j3+4j=2+2jX(1)=1-2j-3+4j=-2+2j

因此

X(1)=2+2j\boxed{X(1)=-2+2j}

再算 X(2)X(2)。令 k=2k=2,则

X(2)=1W40+2W42+3W44+4W46X(2)=1\cdot W_4^0+2\cdot W_4^2+3\cdot W_4^4+4\cdot W_4^6

利用周期性 W44=1, W46=W44+2=W42=1W_4^4=1,\ W_4^6=W_4^{4+2}=W_4^2=-1,得

X(2)=1+2(1)+3(1)+4(1)X(2)=1+2(-1)+3(1)+4(-1)

所以

X(2)=12+34=2X(2)=1-2+3-4=-2

因此

X(2)=2\boxed{X(2)=-2}

最后算 X(3)X(3)。令 k=3k=3,则

X(3)=1W40+2W43+3W46+4W49X(3)=1\cdot W_4^0+2\cdot W_4^3+3\cdot W_4^6+4\cdot W_4^9

利用周期性 W46=W42=1, W49=W48+1=W41=jW_4^6=W_4^2=-1,\ W_4^9=W_4^{8+1}=W_4^1=-j,得

X(3)=1+2j+3(1)+4(j)X(3)=1+2j+3(-1)+4(-j)

整理可得

X(3)=1+2j34j=22jX(3)=1+2j-3-4j=-2-2j

因此

X(3)=22j\boxed{X(3)=-2-2j}

所以最终结果是

X(k)={10, 2+2j, 2, 22j}\boxed{X(k)=\{10,\ -2+2j,\ -2,\ -2-2j\}}

也就是

X(0)=10,X(1)=2+2j,X(2)=2,X(3)=22jX(0)=10,\quad X(1)=-2+2j,\quad X(2)=-2,\quad X(3)=-2-2j

13.1.5 再看三个小例子

第一个例子:

x(n)={5,1}x(n)=\{5,1\}

因为是 2 点 DFT,直接用

{a,b}{a+b, ab}\{a,b\}\rightarrow \{a+b,\ a-b\}

所以

X(0)=5+1=6,X(1)=51=4X(0)=5+1=6,\qquad X(1)=5-1=4

因此

DFT[{5,1}]={6,4}\boxed{\mathrm{DFT}[\{5,1\}]=\{6,4\}}

第二个例子:

x(n)={1,0,0,0}x(n)=\{1,0,0,0\}

X(k)=1W40k+0+0+0=1X(k)=1\cdot W_4^{0k}+0+0+0=1

所以对所有 kk 都有

X(k)=1X(k)=1

因此

DFT[{1,0,0,0}]={1,1,1,1}\boxed{\mathrm{DFT}[\{1,0,0,0\}]=\{1,1,1,1\}}

这个例子说明:单位冲激序列在频域中的各个频率点完全一样。

第三个例子:

x(n)={1,1,1,1}x(n)=\{1,1,1,1\}

X(0)=1+1+1+1=4X(0)=1+1+1+1=4 X(1)=1+W4+W42+W43=1+(j)+(1)+j=0X(1)=1+W_4+W_4^2+W_4^3=1+(-j)+(-1)+j=0 X(2)=1+W42+W44+W46=1+(1)+1+(1)=0X(2)=1+W_4^2+W_4^4+W_4^6=1+(-1)+1+(-1)=0 X(3)=1+W43+W46+W49=1+j+(1)+(j)=0X(3)=1+W_4^3+W_4^6+W_4^9=1+j+(-1)+(-j)=0

因此

DFT[{1,1,1,1}]={4,0,0,0}\boxed{\mathrm{DFT}[\{1,1,1,1\}]=\{4,0,0,0\}}

这个例子说明:常数序列只有直流分量,也就是只有 X(0)X(0) 不为零。

13.1.6 这一小节的结论

你可以把按定义计算 DFT 的流程压成五步:

第一,看序列有几个数,先确定 NN

第二,写

WN=ej2πNW_N=e^{-j\frac{2\pi}{N}}

第三,列出 WNW_N 的常用次幂。

第四,分别代入计算

X(0),X(1),,X(N1)X(0),X(1),\cdots,X(N-1)

第五,整理成

X(k)={X(0),X(1),,X(N1)}X(k)=\{X(0),X(1),\cdots,X(N-1)\}

最重要的两个记忆点是

{a,b}{a+b, ab}\boxed{\{a,b\}\rightarrow\{a+b,\ a-b\}}

以及 4 点 DFT 的旋转因子表

W40=1,W41=j,W42=1,W43=j\boxed{W_4^0=1,\quad W_4^1=-j,\quad W_4^2=-1,\quad W_4^3=j}

最后再记一句:

DFT 是定义,FFT 是快速算法;两者算出来的结果完全一样。\boxed{\text{DFT 是定义,FFT 是快速算法;两者算出来的结果完全一样。}}

14. 圆周移位是什么

先看普通移位。

原序列:

{1,2,3,4}\{1,2,3,4\}

如果向右移 11 位,普通移位可能变成:

{0,1,2,3,4}\{0,1,2,3,4\}

前面补了一个 00

圆周移位不补 00,而是把移出去的部分绕回来。

原序列

{1,2,3,4}\{1,2,3,4\}

向右圆周移位 11 位,结果是:

{4,1,2,3}\{4,1,2,3\}

向左圆周移位 11 位,结果是:

{2,3,4,1}\{2,3,4,1\}

所以圆周移位的人话解释是:

把序列首尾接起来,在圆上移动\boxed{\text{把序列首尾接起来,在圆上移动}}

讲义中的说法是:如果某个样本从主值区间一端移出去,它会从另一端重新移进来。

15. 卷积是什么

在讲圆周卷积之前,你先知道普通卷积是什么。

普通卷积记作:

y(n)=x(n)h(n)y(n)=x(n)*h(n)

它的人话意思是:

一个序列滑过另一个序列,重叠部分相乘再相加\boxed{\text{一个序列滑过另一个序列,重叠部分相乘再相加}}

它常用来表示 LTI 系统输出:

输入 x(n)系统 h(n)输出 y(n)\text{输入 }x(n)\quad \rightarrow \quad \text{系统 }h(n)\quad \rightarrow \quad \text{输出 }y(n)

也就是:

y(n)=x(n)h(n)y(n)=x(n)*h(n)

你先把卷积想成滑动重叠求和就行。

16. 圆周卷积是什么

普通卷积是在直线上滑动。

圆周卷积是在圆上滑动。

因为 DFT 默认序列周期重复,所以 DFT 里面对应的是圆周卷积,也叫循环卷积,记作:

x1(n)Lx2(n)x_1(n)\circledast_L x_2(n)

或者有些教材写成

x1(n)x2(n)x_1(n)\otimes x_2(n)

这里的 LL 表示圆周卷积长度。

圆周卷积的人话解释是:

先把两个序列都看成长度为 L 的周期序列,再在圆上做卷积\boxed{\text{先把两个序列都看成长度为 }L\text{ 的周期序列,再在圆上做卷积}}

如果卷积结果超出了长度 LL,它不会继续往后排,而是绕回前面。

这就是圆周卷积和普通线性卷积最大的区别。

17. 为什么圆周卷积容易出错

因为普通线性卷积的结果可能比较长。

如果你用太短的圆来装它,后面的尾巴会绕回前面,和前面的结果加在一起。

这叫混叠。

人话说:

圆太短,结果装不下,尾巴绕回来,答案就乱了\boxed{\text{圆太短,结果装不下,尾巴绕回来,答案就乱了}}

18. 线性卷积和圆周卷积什么时候一样

这是考试高频公式。

如果一个序列长度是 NN,另一个序列长度是 MM,那么它们的普通线性卷积长度是:

N+M1N+M-1

如果你想用 LL 点圆周卷积得到同样的结果,必须让圆足够大:

LN+M1\boxed{L\ge N+M-1}

讲义中也明确说,若希望 LL 点循环卷积等于线性卷积,必须满足 LN+M1L\ge N+M-1;否则线性卷积的尾部会折叠回前面,产生混叠。

例如:

x(n)={1,2,3},h(n)={1,1}x(n)=\{1,2,3\},\qquad h(n)=\{1,1\}

前者长度是 33,后者长度是 22,所以线性卷积长度是

N+M1=3+21=4N+M-1=3+2-1=4

所以如果你想用圆周卷积代替线性卷积,至少要做 44 点圆周卷积。

19. DFT 为什么能用来算卷积

这是 DFT 最重要的用途之一。

在时域里做圆周卷积比较麻烦,但是 DFT 有一个非常重要的性质:

时域圆周卷积频域相乘\boxed{\text{时域圆周卷积}\Longleftrightarrow\text{频域相乘}}

也就是说,如果

X1(k)=DFT[x1(n)]X_1(k)=DFT[x_1(n)] X2(k)=DFT[x2(n)]X_2(k)=DFT[x_2(n)]

那么

DFT[x1(n)x2(n)]=X1(k)X2(k)DFT[x_1(n)\circledast x_2(n)]=X_1(k)X_2(k)

所以要算圆周卷积,可以这样做:

第一步,对 x1(n)x_1(n) 做 DFT,得到 X1(k)X_1(k)

第二步,对 x2(n)x_2(n) 做 DFT,得到 X2(k)X_2(k)

第三步,在频域直接相乘:

Y(k)=X1(k)X2(k)Y(k)=X_1(k)X_2(k)

第四步,对 Y(k)Y(k) 做 IDFT,得到 y(n)y(n)

也就是

x1(n),x2(n)DFTX1(k),X2(k)相乘Y(k)IDFTy(n)x_1(n),x_2(n) \rightarrow DFT \rightarrow X_1(k),X_2(k) \rightarrow \text{相乘} \rightarrow Y(k) \rightarrow IDFT \rightarrow y(n)

讲义中也给出了这个步骤:先计算两个序列的 DFT,再频域相乘,最后作 IDFT。

圆周卷积的计算思路

20. FFT 是什么

FFT 是 Fast Fourier Transform,中文叫快速傅里叶变换。

你一定要记住:

FFT 不是新的变换,它只是快速计算 DFT 的算法\boxed{\text{FFT 不是新的变换,它只是快速计算 DFT 的算法}}

也就是说:

  • DFT 是定义
  • FFT 是算法

就像乘法是定义,竖式乘法是快速计算方法一样。

讲义中也明确说,FFT 不是另一种变换,它是 DFT 的快速算法。

21. 为什么需要 FFT

直接算 DFT 太慢。

DFT 公式是

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

你要算每一个 X(k)X(k),都要对 n=0n=0N1N-1 求和。

一共有 NNX(k)X(k),所以直接计算量大约是

N2N^2

如果 N=1024N=1024,计算量就很大。

FFT 的作用就是把计算量降下来:

直接 DFT:

N2N^2

FFT:

Nlog2NN\log_2N

所以 FFT 特别适合大规模信号处理。

22. FFT 的基本思想

FFT 的核心思想是:

把一个大的 DFT,拆成几个小的 DFT\boxed{\text{把一个大的 DFT,拆成几个小的 DFT}}

例如 88 点 DFT 太大,就拆成两个 44 点 DFT;44 点 DFT 再拆成两个 22 点 DFT。这样不断拆下去,计算量就减少了。

讲义中也说,FFT 的基本思想是不断把长序列的 DFT 分解成短序列的 DFT,并利用旋转因子的周期性、对称性和可约性减少重复计算。

23. 基 2 FFT 是什么

22 FFT 指的是

N=2mN=2^m

也就是 DFT 点数必须是 22 的整数次方,例如

N=2,4,8,16,32,64,N=2,4,8,16,32,64,\cdots

如果原序列长度不是 22 的整数次方,通常补零。

24. DIT-FFT 是什么

DIT 是 Decimation In Time,中文叫按时间抽取。

按时间抽取就是按照时域下标分组。

比如 88 点序列:

x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7)x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7)

分成偶数下标和奇数下标。

偶数下标:

x(0),x(2),x(4),x(6)x(0),x(2),x(4),x(6)

奇数下标:

x(1),x(3),x(5),x(7)x(1),x(3),x(5),x(7)

然后分别做两个 44 点 DFT,再合并成一个 88 点 DFT。

25. 蝶形运算是什么

FFT 合并两个小 DFT 时,会用到一组一加一减的公式:

X(k)=X1(k)+WNkX2(k)X(k)=X_1(k)+W_N^kX_2(k) X(k+N/2)=X1(k)WNkX2(k)X(k+N/2)=X_1(k)-W_N^kX_2(k)

这两个式子画出来像蝴蝶,所以叫蝶形运算。

你现在先不用完全推导,只要知道:

蝶形运算就是 FFT 中的基本计算单元,一上一下,一个加,一个减\boxed{\text{蝶形运算就是 FFT 中的基本计算单元,一上一下,一个加,一个减}}

DIT-FFT 分解结构

FFT 蝶形运算单元

26. 最小计算例子:线性卷积、圆周卷积与 4 点 FFT

下面用最小数字例子,把三件事算清楚:

  1. 线性卷积怎么算
  2. 圆周卷积怎么算
  3. FFT 和蝶形运算怎么算

先记住一句话:

线性卷积是在直线上算,圆周卷积是在圆上算,FFT 是快速算 DFT。\boxed{\text{线性卷积是在直线上算,圆周卷积是在圆上算,FFT 是快速算 DFT。}}

讲义里也说,普通卷积可以理解为滑动、重叠、求和;而圆周卷积中的下标要按长度 LL 取模,超出范围会绕回主值区间。

26.1 线性卷积举例怎么算

x(n)={1,2,3}x(n)=\{1,2,3\} h(n)={1,1}h(n)=\{1,1\}

也就是

x(0)=1,x(1)=2,x(2)=3x(0)=1,\quad x(1)=2,\quad x(2)=3 h(0)=1,h(1)=1h(0)=1,\quad h(1)=1

线性卷积记作

y(n)=x(n)h(n)y(n)=x(n)*h(n)

定义是

y(n)=mx(m)h(nm)y(n)=\sum_m x(m)h(n-m)

它的人话意思就是:让两个序列滑动,重叠的部分相乘再相加。

两个序列长度分别是

N=3,M=2N=3,\qquad M=2

所以线性卷积结果长度是

N+M1=3+21=4N+M-1=3+2-1=4

因此结果应该有

y(0),y(1),y(2),y(3)y(0),y(1),y(2),y(3)

n=0n=0 时:

y(0)=x(0)h(0)=11=1y(0)=x(0)h(0)=1\cdot1=1

n=1n=1 时:

y(1)=x(0)h(1)+x(1)h(0)=11+21=3y(1)=x(0)h(1)+x(1)h(0)=1\cdot1+2\cdot1=3

n=2n=2 时:

y(2)=x(1)h(1)+x(2)h(0)=21+31=5y(2)=x(1)h(1)+x(2)h(0)=2\cdot1+3\cdot1=5

n=3n=3 时:

y(3)=x(2)h(1)=31=3y(3)=x(2)h(1)=3\cdot1=3

所以

x(n)h(n)={1,3,5,3}\boxed{x(n)*h(n)=\{1,3,5,3\}}

26.2 圆周卷积举例怎么算

圆周卷积和线性卷积不一样。线性卷积是在直线上算,结果可以变长;圆周卷积是在固定长度的圆上算,结果长度固定。

如果做 LL 点圆周卷积,结果一定只有 LL 个数。公式是

yc(n)=m=0L1x(m)h((nm))Ly_c(n)=\sum_{m=0}^{L-1}x(m)h((n-m))_L

这里最重要的是

((nm))L((n-m))_L

它表示对 LL 取余数,也就是绕回去。

例如当 L=3L=3 时:

12,21-1\equiv 2,\qquad -2\equiv 1
26.2.1 先做 3 点圆周卷积

还是用

x(n)={1,2,3},h(n)={1,1}x(n)=\{1,2,3\},\qquad h(n)=\{1,1\}

h(n)h(n) 补成 3 点:

h(n)={1,1,0}h(n)=\{1,1,0\}

所以现在

x={1,2,3},h={1,1,0}x=\{1,2,3\},\qquad h=\{1,1,0\}

结果长度固定为 3:

yc(0),yc(1),yc(2)y_c(0),y_c(1),y_c(2)

yc(0)y_c(0)

yc(0)=x(0)h(0)+x(1)h(1)+x(2)h(2)y_c(0)=x(0)h(0)+x(1)h(-1)+x(2)h(-2)

因为 3 点圆周卷积里

h(1)=h(2),h(2)=h(1)h(-1)=h(2),\qquad h(-2)=h(1)

所以

yc(0)=x(0)h(0)+x(1)h(2)+x(2)h(1)y_c(0)=x(0)h(0)+x(1)h(2)+x(2)h(1)

代入得

yc(0)=11+20+31=4y_c(0)=1\cdot1+2\cdot0+3\cdot1=4

yc(1)y_c(1)

yc(1)=x(0)h(1)+x(1)h(0)+x(2)h(1)y_c(1)=x(0)h(1)+x(1)h(0)+x(2)h(-1)

因为

h(1)=h(2)h(-1)=h(2)

所以

yc(1)=x(0)h(1)+x(1)h(0)+x(2)h(2)y_c(1)=x(0)h(1)+x(1)h(0)+x(2)h(2)

代入得

yc(1)=11+21+30=3y_c(1)=1\cdot1+2\cdot1+3\cdot0=3

yc(2)y_c(2)

yc(2)=x(0)h(2)+x(1)h(1)+x(2)h(0)y_c(2)=x(0)h(2)+x(1)h(1)+x(2)h(0)

代入得

yc(2)=10+21+31=5y_c(2)=1\cdot0+2\cdot1+3\cdot1=5

所以 3 点圆周卷积结果是

yc(n)={4,3,5}\boxed{y_c(n)=\{4,3,5\}}

它和线性卷积不同,是因为线性卷积结果

{1,3,5,3}\{1,3,5,3\}

放不进 3 个位置,最后那个 33 会绕回第 0 个位置,于是折回成

{1+3,3,5}={4,3,5}\{1+3,3,5\}=\{4,3,5\}

这就是混叠。人话就是:圆太小,尾巴绕回来了。

26.3 什么时候圆周卷积等于线性卷积

如果 x(n)x(n) 长度为 NNh(n)h(n) 长度为 MM,那么线性卷积长度是

N+M1N+M-1

要让 LL 点圆周卷积等于线性卷积,必须满足

LN+M1\boxed{L\ge N+M-1}

刚才例子中

N=3,M=2N=3,\quad M=2

所以

N+M1=4N+M-1=4

因此至少要做 4 点圆周卷积。

把两个序列都补到 4 点:

x={1,2,3,0},h={1,1,0,0}x=\{1,2,3,0\},\qquad h=\{1,1,0,0\}

这时算出来的 4 点圆周卷积就是

yc(n)={1,3,5,3}\boxed{y_c(n)=\{1,3,5,3\}}

它正好等于线性卷积,因为

L=43+21=4L=4\ge 3+2-1=4

26.4 用 DFT 算圆周卷积是什么意思

DFT 有一个重要性质:

时域圆周卷积频域相乘\boxed{\text{时域圆周卷积}\Longleftrightarrow\text{频域相乘}}

也就是如果

X(k)=DFT[x(n)],H(k)=DFT[h(n)]X(k)=DFT[x(n)],\qquad H(k)=DFT[h(n)]

那么

Y(k)=X(k)H(k)Y(k)=X(k)H(k)

再做 IDFT:

y(n)=IDFT[Y(k)]y(n)=IDFT[Y(k)]

就得到圆周卷积。讲义里也说,用 DFT 计算循环卷积,就是先分别做 DFT,再频域相乘,最后做 IDFT。

26.5 FFT 举例怎么算

现在看一个最简单的 4 点 FFT 例子。设

x(n)={1,2,3,4}x(n)=\{1,2,3,4\}

要求 4 点 DFT:

X(0),X(1),X(2),X(3)X(0),X(1),X(2),X(3)
26.5.1 先按奇偶下标分组

DIT-FFT 是按时域下标奇偶分组。

偶数下标:

x(0),x(2)x(0),x(2)

所以

xe={1,3}x_e=\{1,3\}

奇数下标:

x(1),x(3)x(1),x(3)

所以

xo={2,4}x_o=\{2,4\}
26.5.2 分别做 2 点 DFT

对两个数

{a,b}\{a,b\}

它的 2 点 DFT 是

{a+b, ab}\{a+b,\ a-b\}

所以偶数部分

xe={1,3}x_e=\{1,3\}

得到

E(0)=1+3=4,E(1)=13=2E(0)=1+3=4,\qquad E(1)=1-3=-2

E={4,2}E=\{4,-2\}

奇数部分

xo={2,4}x_o=\{2,4\}

得到

O(0)=2+4=6,O(1)=24=2O(0)=2+4=6,\qquad O(1)=2-4=-2

O={6,2}O=\{6,-2\}
26.5.3 蝶形运算怎么算

4 点 FFT 中,合并公式是

X(k)=E(k)+W4kO(k)X(k)=E(k)+W_4^kO(k) X(k+2)=E(k)W4kO(k)X(k+2)=E(k)-W_4^kO(k)

其中

k=0,1k=0,1

旋转因子

W4=ej2π4=ejπ2=jW_4=e^{-j\frac{2\pi}{4}}=e^{-j\frac{\pi}{2}}=-j

所以

W40=1,W41=jW_4^0=1,\qquad W_4^1=-j

k=0k=0 时:

X(0)=E(0)+W40O(0)=4+16=10X(0)=E(0)+W_4^0O(0)=4+1\cdot 6=10 X(2)=E(0)W40O(0)=416=2X(2)=E(0)-W_4^0O(0)=4-1\cdot 6=-2

k=1k=1 时,先算

W41O(1)=(j)(2)=2jW_4^1O(1)=(-j)(-2)=2j

于是

X(1)=E(1)+W41O(1)=2+2jX(1)=E(1)+W_4^1O(1)=-2+2j X(3)=E(1)W41O(1)=22jX(3)=E(1)-W_4^1O(1)=-2-2j

所以最终结果是

X(k)={10, 2+2j, 2, 22j}\boxed{X(k)=\{10,\ -2+2j,\ -2,\ -2-2j\}}

26.6 蝶形运算怎么记

给两个输入

A,BA,\quad B

再给一个旋转因子

WW

先算

WBWB

然后记住:

上输出=A+WB\boxed{\text{上输出}=A+WB} 下输出=AWB\boxed{\text{下输出}=A-WB}

也就是

A,BA+WB, AWBA,B\longrightarrow A+WB,\ A-WB

例如:

A=4,B=6,W=1A=4,\quad B=6,\quad W=1

4,610,24,6\longrightarrow 10,-2

又如

A=2,B=2,W=jA=-2,\quad B=-2,\quad W=-j

则先有

WB=(j)(2)=2jWB=(-j)(-2)=2j

所以

2,22+2j, 22j-2,-2\longrightarrow -2+2j,\ -2-2j

26.7 计算过程压缩版

原序列

x={1,2,3,4}x=\{1,2,3,4\}

先按奇偶分组:

xe={1,3},xo={2,4}x_e=\{1,3\},\qquad x_o=\{2,4\}

分别做 2 点 DFT:

E={1+3,13}={4,2}E=\{1+3,1-3\}=\{4,-2\} O={2+4,24}={6,2}O=\{2+4,2-4\}=\{6,-2\}

再做蝶形合并:

X(0)=4+6=10,X(2)=46=2X(0)=4+6=10,\qquad X(2)=4-6=-2 X(1)=2+(j)(2)=2+2jX(1)=-2+(-j)(-2)=-2+2j X(3)=2(j)(2)=22jX(3)=-2-(-j)(-2)=-2-2j

最终

X(k)={10, 2+2j, 2, 22j}\boxed{X(k)=\{10,\ -2+2j,\ -2,\ -2-2j\}}

27. 这一轮你真正要会什么

这一轮考试最常考的不是让你空谈概念,而是让你会判断、会套公式、会选长度。

你按下面顺序掌握。

第一,知道 DFT 是什么:

DFT:把有限长时域序列变成有限个频率点\boxed{\text{DFT:把有限长时域序列变成有限个频率点}}

第二,知道 DFT 公式里每个符号是什么:

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

x(n)x(n) 是原序列,X(k)X(k) 是频域结果,nn 是时域下标,kk 是频域下标,NN 是 DFT 点数。

第三,知道 IDFT 是反变换:

x(n)=1Nk=0N1X(k)ej2πNknx(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{j\frac{2\pi}{N}kn}

第四,知道 DFT 默认序列周期延拓,所以会出现圆周移位、圆周卷积和取模下标。

第五,知道圆周移位就是绕圈移动。例如

{1,2,3,4}\{1,2,3,4\}

向左圆周移位 11 位后是

{2,3,4,1}\{2,3,4,1\}

第六,知道圆周卷积和线性卷积的区别:普通线性卷积是在直线上算,圆周卷积是在圆上算,圆太短会混叠。

第七,记住最重要条件:

LN+M1\boxed{L\ge N+M-1}

如果满足,圆周卷积等于线性卷积;如果不满足,尾巴绕回前面,产生混叠。

第八,知道 FFT 是什么:

FFT 是快速计算 DFT 的算法,不是新的变换\boxed{\text{FFT 是快速计算 DFT 的算法,不是新的变换}}

第九,知道基 22 FFT 要求:

N=2mN=2^m

第十,知道 DIT-FFT 是按下标奇偶分组:偶数下标一组,奇数下标一组。

小例题:线性卷积能否直接用圆周卷积代替

x1(n)x_1(n) 长度为 44x2(n)x_2(n) 长度为 33。若要用圆周卷积得到和线性卷积完全一样的结果,圆周卷积长度 LL 至少应取多少?

解答:

线性卷积长度是

N+M1=4+31=6N+M-1=4+3-1=6

所以要避免混叠,至少应满足

L6L\ge 6

也就是说,最小可取

L=6L=6

如果 L<6L<6,线性卷积尾部就会绕回前面,结果和真正的线性卷积不一致。

28. 最适合现在背的极简版

你可以先背这版:

DFT 的定义:把 NN 个时域样本 x(0),x(1),,x(N1)x(0),x(1),\cdots,x(N-1) 变成 NN 个频域样本 X(0),X(1),,X(N1)X(0),X(1),\cdots,X(N-1)

公式:

X(k)=n=0N1x(n)ej2πNknX(k)=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}

IDFT:

x(n)=1Nk=0N1X(k)ej2πNknx(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{j\frac{2\pi}{N}kn}

DFT 的核心特点:有限长序列在 DFT 中默认周期延拓。

圆周移位:首尾相接地移动。

圆周卷积:在周期圆上做卷积。

线性卷积长度:

N+M1N+M-1

圆周卷积等于线性卷积的条件:

LN+M1L\ge N+M-1

FFT:快速计算 DFT 的算法。

22 FFT:

N=2mN=2^m

DIT-FFT:按时域下标奇偶分组。

最后一句话:

DFT 是频率分析工具,圆周卷积是 DFT 世界里的卷积,FFT 是快速计算 DFT 的方法。\boxed{ \text{DFT 是频率分析工具,圆周卷积是 DFT 世界里的卷积,FFT 是快速计算 DFT 的方法。} }

第三轮:IIR 数字滤波器设计

这一轮不要先背“脉冲响应不变法、双线性变换法”,先看清楚它们为什么会出现。整章的来龙去脉是:

想滤波需要设计系统系统用 H(z) 表示IIR 直接设计麻烦借用成熟的 Ha(s)H(z)\boxed{ \text{想滤波}\rightarrow\text{需要设计系统}\rightarrow\text{系统用 }H(z)\text{ 表示} \rightarrow\text{IIR 直接设计麻烦}\rightarrow\text{借用成熟的 }H_a(s)\rightarrow H(z) }

数字滤波器不是凭空写出一条差分方程,而是先确定希望得到的频率选择效果,再反过来求可实现的 H(z)H(z)h(n)h(n)。IIR 的重要设计思路,就是先设计理论成熟的模拟滤波器,再把它变成数字滤波器。

1. 为什么要设计滤波器

现实信号通常并不干净。例如语音中混入高频噪声时,我们希望保留语音主体、削弱高频噪声,所需系统就是“低频通过、高频削弱”的低通滤波器。

滤波器的本质不是公式,而是一个频率筛子:

有些频率让它通过,有些频率让它变小。\boxed{\text{有些频率让它通过,有些频率让它变小。}}
  • 低通滤波器:保留低频,抑制高频
  • 高通滤波器:保留高频,抑制低频
  • 带通滤波器:只保留中间某一段频率
  • 带阻滤波器:抑制中间某一段频率

讲义中也说,数字滤波器是输入和输出都是数字信号的系统,它通过数值运算改变输入信号中各频率成分的比例。

2. 滤波器在数学上是什么

数字滤波器通常看作一个 LTI 系统:

Y(z)=X(z)H(z),H(z)=Y(z)X(z)Y(z)=X(z)H(z),\qquad H(z)=\frac{Y(z)}{X(z)}

H(z)H(z) 就是数字滤波器的数学说明书。令 z=ejωz=e^{j\omega},便得到频率响应 H(ejω)H(e^{j\omega}),它说明每个频率经过滤波器后会被放大、保留还是削弱。因此设计滤波器的真正目标是:

根据想要的频率效果,求出一个合适的 H(z)\boxed{\text{根据想要的频率效果,求出一个合适的 }H(z)}

3. IIR 是什么

IIR 是 Infinite Impulse Response,中文叫无限长单位脉冲响应滤波器。

所谓“无限长”,是指给系统一个单位冲激 δ(n)\delta(n) 后,它的输出 h(n)h(n) 可能一直拖很长,理论上无限延续。

IIR 一般有反馈,也就是输出会反过来参与后续计算。差分方程常写成

y(n)=i=1Naiy(ni)+i=0Mbix(ni)y(n)=\sum_{i=1}^{N}a_i y(n-i)+\sum_{i=0}^{M}b_i x(n-i)

如果式子里有过去输出 y(ni)y(n-i),说明系统有反馈,这就是 IIR 的典型特征。

4. IIR 系统函数与优缺点

IIR 系统函数常写成

H(z)=i=0Mbizi1i=1NaiziH(z)=\frac{\sum_{i=0}^{M}b_i z^{-i}}{1-\sum_{i=1}^{N}a_i z^{-i}}

这里最关键的关系是:

差分方程是时域里的计算规则,H(z) 是这个规则做 Z 变换后的样子。\boxed{\text{差分方程是时域里的计算规则,}H(z)\text{ 是这个规则做 Z 变换后的样子。}}

它们不是两套东西,而是同一个滤波器的两种写法。

4.1 差分方程为什么会出现

最简单的系统是

y(n)=x(n)y(n)=x(n)

表示输出等于输入。如果让当前输出等于当前输入和前一个输入的平均,则有

y(n)=12x(n)+12x(n1)y(n)=\frac{1}{2}x(n)+\frac{1}{2}x(n-1)

它把相邻采样点平均,可以削弱快速变化的高频成分,是一个简单的低通滤波器。当前输出不只取决于当前输入,还取决于过去输入,这就是差分方程的雏形。

数字滤波器最终要由计算机或 DSP 芯片运行,而硬件每一拍所做的基本操作就是加法、乘法和延迟。x(n1)x(n-1) 表示输入延迟一个采样周期,y(n1)y(n-1) 表示上一次输出。因此数字滤波器最自然的实现形式就是

y(n)=i=1Naiy(ni)+i=0Mbix(ni)y(n)=\sum_{i=1}^{N}a_i y(n-i)+\sum_{i=0}^{M}b_i x(n-i)

也就是:

当前输出=过去输出的加权和+当前及过去输入的加权和\boxed{\text{当前输出} = \text{过去输出的加权和} + \text{当前及过去输入的加权和}}

4.2 每一项代表什么

以二阶差分方程为例:

y(n)=a1y(n1)+a2y(n2)+b0x(n)+b1x(n1)+b2x(n2)y(n)=a_1y(n-1)+a_2y(n-2)+b_0x(n)+b_1x(n-1)+b_2x(n-2)
  • y(n)y(n):当前输出
  • x(n)x(n):当前输入
  • x(n1),x(n2)x(n-1),x(n-2):过去输入
  • y(n1),y(n2)y(n-1),y(n-2):过去输出
  • a1,a2,b0,b1,b2a_1,a_2,b_0,b_1,b_2:滤波器系数

只要出现过去输出 y(ni)y(n-i),就说明输出参与了后续计算,即系统存在反馈。

4.3 为什么反馈会产生无限长冲激响应

看最简单的一阶反馈系统:

y(n)=ay(n1)+x(n)y(n)=ay(n-1)+x(n)

令输入为 x(n)=δ(n)x(n)=\delta(n),初始条件为 y(1)=0y(-1)=0,逐点递推:

y(0)=1,y(1)=a,y(2)=a2,y(3)=a3y(0)=1,\qquad y(1)=a,\qquad y(2)=a^2,\qquad y(3)=a^3

所以单位冲激响应为

h(n)=anu(n)h(n)=a^n u(n)

输入冲激只在 n=0n=0 出现一次,输出却形成 1,a,a2,a3,1,a,a^2,a^3,\ldots。只要 a0a\neq0,反馈就会让已有输出继续影响未来输出,响应理论上可以无限延续。因此:

过去输出参与计算反馈冲激响应可能无限长IIR\boxed{\text{过去输出参与计算}\Rightarrow\text{反馈}\Rightarrow\text{冲激响应可能无限长}\Rightarrow\text{IIR}}

4.4 从差分方程推导系统函数

系统函数不是凭空写出的,而是差分方程做 Z 变换后整理得到的。仍以

y(n)=ay(n1)+x(n)y(n)=ay(n-1)+x(n)

为例。Z 变换的延迟性质是

y(n1)Zz1Y(z)y(n-1)\xleftrightarrow{Z}z^{-1}Y(z)

也就是说,时域延迟一个采样点,在 Z 域就乘 z1z^{-1}。对差分方程两边做 Z 变换:

Y(z)=az1Y(z)+X(z)Y(z)=az^{-1}Y(z)+X(z)

移项并提取 Y(z)Y(z)

Y(z)(1az1)=X(z)Y(z)(1-az^{-1})=X(z)

系统函数定义为 H(z)=Y(z)/X(z)H(z)=Y(z)/X(z),因此

H(z)=11az1\boxed{H(z)=\frac{1}{1-az^{-1}}}

人话解释就是:H(z)H(z) 表示系统把输入 X(z)X(z) 变成输出 Y(z)Y(z) 的作用,因为

Y(z)=X(z)H(z)Y(z)=X(z)H(z)

4.5 一般 IIR 系统函数的推导

从一般差分方程出发:

y(n)=i=1Naiy(ni)+i=0Mbix(ni)y(n)=\sum_{i=1}^{N}a_i y(n-i)+\sum_{i=0}^{M}b_i x(n-i)

利用延迟性质

y(ni)ZziY(z),x(ni)ZziX(z)y(n-i)\xleftrightarrow{Z}z^{-i}Y(z),\qquad x(n-i)\xleftrightarrow{Z}z^{-i}X(z)

两边做 Z 变换得到

Y(z)=i=1NaiziY(z)+i=0MbiziX(z)Y(z)=\sum_{i=1}^{N}a_i z^{-i}Y(z)+\sum_{i=0}^{M}b_i z^{-i}X(z)

把含 Y(z)Y(z) 的项移到左边并分别提取 Y(z)Y(z)X(z)X(z)

Y(z)(1i=1Naizi)=X(z)(i=0Mbizi)Y(z)\left(1-\sum_{i=1}^{N}a_i z^{-i}\right) =X(z)\left(\sum_{i=0}^{M}b_i z^{-i}\right)

所以

H(z)=Y(z)X(z)=i=0Mbizi1i=1Naizi\boxed{ H(z)=\frac{Y(z)}{X(z)} =\frac{\sum_{i=0}^{M}b_i z^{-i}} {1-\sum_{i=1}^{N}a_i z^{-i}} }

分子 bizi\sum b_i z^{-i} 来自当前及过去输入项,所以由 bib_i 决定;分母 1aizi1-\sum a_i z^{-i} 来自过去输出的反馈项,所以由 aia_i 决定。进一步说,分子决定零点,分母决定极点,而极点决定稳定性。这就是 IIR 必须特别关注分母的原因。

4.6 为什么 FIR 只有分子

如果所有反馈系数 ai=0a_i=0,差分方程就变成

y(n)=i=0Mbix(ni)y(n)=\sum_{i=0}^{M}b_i x(n-i)

做 Z 变换可得

H(z)=Y(z)X(z)=i=0MbiziH(z)=\frac{Y(z)}{X(z)}=\sum_{i=0}^{M}b_i z^{-i}

它没有过去输出项和递归反馈,只由有限个输入样本加权求和,因此冲激响应有限长:

FIR:没有过去输出项,没有反馈,系统函数只有分子。\boxed{\text{FIR:没有过去输出项,没有反馈,系统函数只有分子。}} IIR:有过去输出项,有反馈,反馈项整理后形成分母。\boxed{\text{IIR:有过去输出项,有反馈,反馈项整理后形成分母。}}

4.7 一个完整例子

设差分方程为

y(n)=0.5y(n1)+x(n)y(n)=0.5y(n-1)+x(n)

因为含有 y(n1)y(n-1),所以它有反馈,是 IIR。做 Z 变换:

Y(z)=0.5z1Y(z)+X(z)Y(z)=0.5z^{-1}Y(z)+X(z)

移项并提取 Y(z)Y(z)

Y(z)(10.5z1)=X(z)Y(z)(1-0.5z^{-1})=X(z)

所以

y(n)=0.5y(n1)+x(n)H(z)=110.5z1\boxed{ y(n)=0.5y(n-1)+x(n) \Longleftrightarrow H(z)=\frac{1}{1-0.5z^{-1}} }

令分母为零:

10.5z1=0z=0.51-0.5z^{-1}=0\quad\Rightarrow\quad z=0.5

极点 z=0.5z=0.5 位于单位圆内,所以在因果条件下系统稳定。

4.8 最容易混淆的四点

第一,差分方程来自数字系统的实际计算结构,即加法、乘法、延迟和反馈,并不是凭空出现的。

第二,z1z^{-1} 代表一个采样周期的延迟:

x(n1)Zz1X(z),y(n1)Zz1Y(z)x(n-1)\xleftrightarrow{Z}z^{-1}X(z),\qquad y(n-1)\xleftrightarrow{Z}z^{-1}Y(z)

第三,IIR 的分母来自过去输出项。反馈项做 Z 变换后仍含 Y(z)Y(z),移到等式左边并提取 Y(z)Y(z),就形成了分母。

第四,IIR 的“无限长”来自反馈。冲激输入结束后,系统内部已有输出仍会继续参与递推。

整条逻辑链可以压缩为:

加法、乘法、延迟差分方程Z 变换H(z)\boxed{ \text{加法、乘法、延迟} \rightarrow\text{差分方程} \rightarrow\text{Z 变换} \rightarrow H(z) } 差分方程是 IIR 的时域计算规则,H(z) 是它做 Z 变换后的系统函数。\boxed{\text{差分方程是 IIR 的时域计算规则,}H(z)\text{ 是它做 Z 变换后的系统函数。}}

分子对应零点,分母对应极点。因为 IIR 有分母,所以有极点;极点位置决定稳定性。

反馈使 IIR 能以较低阶数获得较陡的幅频响应,因此计算量通常比同等指标的 FIR 小。但代价是必须检查稳定性,极点不能落在单位圆外;它的相位一般也不是线性的,可能造成波形失真。IIR 更适合主要关心幅频特性、对严格相位保真要求不高的场合。

5. 滤波器指标怎么看

以低通滤波器为例,常见指标有:

  • ωp\omega_p:通带截止频率
  • ωs\omega_s:阻带截止频率
  • αp\alpha_p:通带最大衰减
  • αs\alpha_s:阻带最小衰减
  • δ1\delta_1:通带允许波动
  • δ2\delta_2:阻带允许残留

低通指标通常写成

1δ1H(ejω)1,ω<ωp1-\delta_1\le |H(e^{j\omega})|\le 1,\quad |\omega|<\omega_p H(ejω)δ2,ωsωπ|H(e^{j\omega})|\le \delta_2,\quad \omega_s\le |\omega|\le \pi

通带和阻带之间是过渡带。过渡带越窄,滤波器越难设计,通常需要更高阶数。

6. 为什么不直接设计数字 IIR

理论上可以直接求 H(z)H(z),但实际要同时控制通带波纹、阻带衰减、过渡带宽度、稳定性和阶数,很难凭空写出满足全部条件的系统函数。

模拟滤波器理论却已经非常成熟,巴特沃斯、切比雪夫和椭圆滤波器都有完整公式与设计套路。因此采用更可靠的路线:

先设计模拟滤波器 Ha(s),再转换成数字滤波器 H(z)\boxed{\text{先设计模拟滤波器 }H_a(s),\text{再转换成数字滤波器 }H(z)}

7. 从 ss 平面到 zz 平面必须满足什么

模拟滤波器写作 Ha(s)H_a(s),数字滤波器写作 H(z)H(z),数字化本质上就是寻找 s=f(z)s=f(z),把 ss 平面上的系统映射到 zz 平面。

这个映射不能随意选择。模拟频率响应位于 s=jΩs=j\Omega,即 ss 平面的虚轴;数字频率响应位于 z=ejωz=e^{j\omega},即 zz 平面的单位圆。因此必须满足:

s 平面的虚轴z 平面的单位圆\boxed{s\text{ 平面的虚轴}\rightarrow z\text{ 平面的单位圆}}

模拟稳定系统的极点位于左半平面,数字稳定系统的极点位于单位圆内,所以还必须满足:

s 平面的左半平面z 平面的单位圆内\boxed{s\text{ 平面的左半平面}\rightarrow z\text{ 平面的单位圆内}}

8. 为什么会出现两种方法

两种方法都在解决 Ha(s)H(z)H_a(s)\rightarrow H(z),只是出发点不同:

脉冲响应不变法:从时域采样入手。\boxed{\text{脉冲响应不变法:从时域采样入手。}} 双线性变换法:从平面映射入手。\boxed{\text{双线性变换法:从平面映射入手。}}

前者利用“LTI 系统由冲激响应决定”,直接采样 ha(t)h_a(t);后者不采样冲激响应,而是建立 sszz 的一一对应公式。

9. IIR 设计的总路线

IIR 设计最常见路线是:

Ha(s)H(z)H_a(s)\rightarrow H(z)

也就是先设计模拟滤波器,再把模拟滤波器变成数字滤波器。

讲义中重点方法就两个:脉冲响应不变法、双线性变换法。

IIR 设计总流程

10. 脉冲响应不变法

脉冲响应不变法的人话意思:让数字滤波器的冲激响应等于模拟滤波器冲激响应的采样值。

也就是

h(n)=ha(nT)h(n)=h_a(nT)

如果模拟滤波器写成部分分式

Ha(s)=i=1NAissiH_a(s)=\sum_{i=1}^{N}\frac{A_i}{s-s_i}

那么数字滤波器变成

H(z)=i=1NAi1esiTz1H(z)=\sum_{i=1}^{N}\frac{A_i}{1-e^{s_iT}z^{-1}}

有的教材会写成

H(z)=i=1NTAi1esiTz1H(z)=\sum_{i=1}^{N}\frac{TA_i}{1-e^{s_iT}z^{-1}}

要看老师讲义采用哪种归一化方式。

最关键替换是

AissiAi1esiTz1\boxed{ \frac{A_i}{s-s_i} \longrightarrow \frac{A_i}{1-e^{s_iT}z^{-1}} }

优点:时域冲激响应保持得好。

缺点:会产生频谱混叠。

这是因为时域采样会使频谱周期延拓。该方法对应的映射是

z=esTz=e^{sT}

s=jΩs=j\Omega,就有 z=ejΩTz=e^{j\Omega T}ω=ΩT\omega=\Omega T。频率关系虽然线性,但指数函数具有周期性,Ω\OmegaΩ+2π/T\Omega+2\pi/T 会落到同一个数字频率点,周期延拓的频谱便可能相互重叠。因此它较适合高频能量已经充分衰减的低通、带通滤波器,不适合高通和带阻滤波器。

脉冲响应不变法的极点映射

10.1 一阶系统例题

Ha(s)=1s+1,T=1H_a(s)=\frac{1}{s+1},\qquad T=1

拉普拉斯反变换为

ha(t)=etu(t)h_a(t)=e^{-t}u(t)

h(n)=ha(nT)h(n)=h_a(nT) 采样:

h(n)=enu(n)h(n)=e^{-n}u(n)

利用 anu(n)Z1/(1az1)a^nu(n)\xleftrightarrow{Z}1/(1-az^{-1}),得到

H(z)=11e1z1110.3679z1\boxed{H(z)=\frac{1}{1-e^{-1}z^{-1}}\approx\frac{1}{1-0.3679z^{-1}}}

H(z)=Y(z)/X(z)H(z)=Y(z)/X(z) 还可写出差分方程:

(1e1z1)Y(z)=X(z)(1-e^{-1}z^{-1})Y(z)=X(z)

所以

y(n)=e1y(n1)+x(n)\boxed{y(n)=e^{-1}y(n-1)+x(n)}

10.2 部分分式例题

Ha(s)=2(s+1)(s+3),T=1H_a(s)=\frac{2}{(s+1)(s+3)},\qquad T=1

先作部分分式展开:

Ha(s)=1s+11s+3H_a(s)=\frac{1}{s+1}-\frac{1}{s+3}

两个极点分别为 s1=1s_1=-1s2=3s_2=-3。逐项替换得到

H(z)=11e1z111e3z1H(z)=\frac{1}{1-e^{-1}z^{-1}}-\frac{1}{1-e^{-3}z^{-1}}

合并后为

H(z)=(e1e3)z1(1e1z1)(1e3z1)H(z)=\frac{(e^{-1}-e^{-3})z^{-1}} {(1-e^{-1}z^{-1})(1-e^{-3}z^{-1})}

利用 e10.3679e^{-1}\approx0.3679e30.0498e^{-3}\approx0.0498,可写成

H(z)0.3181z110.4177z1+0.0183z2\boxed{H(z)\approx\frac{0.3181z^{-1}} {1-0.4177z^{-1}+0.0183z^{-2}}}

这类题的关键步骤是:

先作部分分式展开,再把每个模拟极点指数化。\boxed{\text{先作部分分式展开,再把每个模拟极点指数化。}}

11. 双线性变换法

双线性变换法的人话意思:用一个固定替换公式,把 ss 平面的模拟滤波器变成 zz 平面的数字滤波器。

核心公式是

s=2T1z11+z1s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}

所以

H(z)=Ha(s)s=2T1z11+z1H(z)=H_a(s)\bigg|_{s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}}

优点:不会产生频谱混叠。

缺点:频率会非线性变形,所以需要预畸变。

预畸变公式:

Ω=2Ttanω2\Omega=\frac{2}{T}\tan\frac{\omega}{2}

这里 ω\omega 是数字频率,Ω\Omega 是模拟频率。

由于 tan(ω/2)\tan(\omega/2) 是非线性的,模拟频率与数字频率并不成比例。越靠近高频,压缩越明显。因此题目给出数字边界频率 ωp,ωs\omega_p,\omega_s 时,应先预畸变:

Ωp=2Ttanωp2,Ωs=2Ttanωs2\Omega_p=\frac{2}{T}\tan\frac{\omega_p}{2},\qquad \Omega_s=\frac{2}{T}\tan\frac{\omega_s}{2}

这相当于在设计前反向校正,使变换后的数字截止频率落在题目要求的位置。

双线性变换与频率压缩

11.1 一阶系统例题

仍取

Ha(s)=1s+1,T=1H_a(s)=\frac{1}{s+1},\qquad T=1

此时

s=21z11+z1s=2\frac{1-z^{-1}}{1+z^{-1}}

直接代入:

H(z)=121z11+z1+1=1+z13z1H(z)=\frac{1}{2\frac{1-z^{-1}}{1+z^{-1}}+1} =\frac{1+z^{-1}}{3-z^{-1}}

将分母首项归一化:

H(z)=13+13z1113z1\boxed{H(z)=\frac{\frac13+\frac13z^{-1}}{1-\frac13z^{-1}}}

对应差分方程为

y(n)=13y(n1)+13x(n)+13x(n1)\boxed{y(n)=\frac13y(n-1)+\frac13x(n)+\frac13x(n-1)}

11.2 含参数的一阶低通

Ha(s)=αs+αH_a(s)=\frac{\alpha}{s+\alpha}

代入双线性变换公式并通分:

H(z)=α(1+z1)2T(1z1)+α(1+z1)H(z)= \frac{\alpha(1+z^{-1})} {\frac{2}{T}(1-z^{-1})+\alpha(1+z^{-1})}

整理分母后得到

H(z)=α(1+z1)(2T+α)+(α2T)z1\boxed{ H(z)= \frac{\alpha(1+z^{-1})} {\left(\frac{2}{T}+\alpha\right) +\left(\alpha-\frac{2}{T}\right)z^{-1}} }

再将分子分母同除以 2/T+α2/T+\alpha,即可得到分母首项为 1 的标准形式。此类题的关键就是:把 Ha(s)H_a(s) 中所有 ss 替换,再通分整理。

11.3 预畸变例题

T=1T=1,数字通带、阻带截止频率分别为

ωp=π4,ωs=π2\omega_p=\frac{\pi}{4},\qquad \omega_s=\frac{\pi}{2}

Ω=2tan(ω/2)\Omega=2\tan(\omega/2)

Ωp=2tanπ8=2(21)0.8284\Omega_p=2\tan\frac{\pi}{8}=2(\sqrt2-1)\approx0.8284 Ωs=2tanπ4=2\Omega_s=2\tan\frac{\pi}{4}=2

所以

Ωp0.8284,Ωs=2\boxed{\Omega_p\approx0.8284,\qquad\Omega_s=2}

这一步先把数字频率指标校正为模拟频率指标,之后才能据此设计 Ha(s)H_a(s)

12. 两种 IIR 方法怎么区分

脉冲响应不变法:

  • 关键词:冲激响应采样
  • 优点:时域保持好
  • 缺点:有混叠

双线性变换法:

  • 关键词:代换
  • 优点:无混叠
  • 缺点:频率非线性,需要预畸变

考试里比较时,直接记:

脉冲响应不变法:时域保持好,但有混叠\boxed{\text{脉冲响应不变法:时域保持好,但有混叠}} 双线性变换法:无混叠,但频率非线性,需要预畸变\boxed{\text{双线性变换法:无混叠,但频率非线性,需要预畸变}}

12.1 同一个 Ha(s)H_a(s),结果为什么不同

对同一个

Ha(s)=1s+1,T=1H_a(s)=\frac{1}{s+1},\qquad T=1

脉冲响应不变法得到

H(z)=11e1z1H(z)=\frac{1}{1-e^{-1}z^{-1}}

双线性变换法得到

H(z)=1+z13z1H(z)=\frac{1+z^{-1}}{3-z^{-1}}

两者不同,是因为保留的对象不同。前者要求 h(n)=ha(nT)h(n)=h_a(nT),保留模拟冲激响应的采样值;后者保留 ss 平面与 zz 平面的一一映射关系,优先避免混叠。因此不能说其中一个必然更正确,应按设计要求选择。

12.2 考试步骤对比

脉冲响应不变法:

  1. Ha(s)H_a(s) 作部分分式展开。
  2. 找出各极点 sis_i 和留数 AiA_i
  3. 逐项使用 Ai/(ssi)Ai/(1esiTz1)A_i/(s-s_i)\rightarrow A_i/(1-e^{s_iT}z^{-1})
  4. 需要时合并为一个有理函数。

口诀是:

部分分式,极点指数化。\boxed{\text{部分分式,极点指数化。}}

双线性变换法:

  1. 若题目给数字边界频率,先用 Ω=(2/T)tan(ω/2)\Omega=(2/T)\tan(\omega/2) 预畸变。
  2. Ha(s)H_a(s) 中的 ss 全部替换为 (2/T)(1z1)/(1+z1)(2/T)(1-z^{-1})/(1+z^{-1})
  3. 通分并整理为 z1z^{-1} 的标准有理式。
  4. 需要时由 H(z)=Y(z)/X(z)H(z)=Y(z)/X(z) 写出差分方程。

口诀是:

直接代换,先预畸变。\boxed{\text{直接代换,先预畸变。}}

特别地,若 T=2T=2,代换式简化为

s=1z11+z1s=\frac{1-z^{-1}}{1+z^{-1}}

这通常是题目令计算更简单的信号。

13. 巴特沃斯在其中扮演什么角色

巴特沃斯不是数字化方法。脉冲响应不变法和双线性变换法解决的是 Ha(s)H(z)H_a(s)\rightarrow H(z),巴特沃斯解决的是“怎样根据模拟指标求 Ha(s)H_a(s)”。完整关系是:

数字指标模拟指标巴特沃斯求 Ha(s)选一种变换求 H(z)\boxed{ \text{数字指标}\rightarrow\text{模拟指标}\rightarrow \text{巴特沃斯求 }H_a(s)\rightarrow \text{选一种变换求 }H(z) }

巴特沃斯低通的幅度平方函数为

Ha(jΩ)2=11+(ΩΩc)2N|H_a(j\Omega)|^2=\frac{1}{1+\left(\frac{\Omega}{\Omega_c}\right)^{2N}}

它的通带最大平坦,幅频响应随 Ω\Omega 增大而单调下降;阶数 NN 越大,过渡带越陡。

14. 完整设计流程与考试判断

若题目给出数字指标 ωp,ωs,αp,αs\omega_p,\omega_s,\alpha_p,\alpha_s,先把它们转换成模拟指标。脉冲响应不变法使用 Ω=ω/T\Omega=\omega/T;双线性变换法使用 Ω=(2/T)tan(ω/2)\Omega=(2/T)\tan(\omega/2)。然后设计模拟低通,求阶数 NN、截止频率 Ωc\Omega_cHa(s)H_a(s),最后用指定方法得到 H(z)H(z)

若题目直接给 Ha(s)H_a(s) 并指定脉冲响应不变法,就做部分分式展开、找极点 sis_i,再逐项使用

AissiAi1esiTz1\frac{A_i}{s-s_i}\longrightarrow\frac{A_i}{1-e^{s_iT}z^{-1}}

若题目直接给 Ha(s)H_a(s) 并指定双线性变换法,就代入

s=2T1z11+z1s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}

最后把整轮压缩成一句话:

IIR 设计的核心不是凭空写 H(z),而是借用成熟的 Ha(s),再用合适的映射把它数字化。\boxed{ \text{IIR 设计的核心不是凭空写 }H(z), \text{而是借用成熟的 }H_a(s),\text{再用合适的映射把它数字化。} }

第四轮:FIR 线性相位、窗函数法、频率采样法

这一轮先记住:

FIR 是有限长单位冲激响应滤波器\boxed{\text{FIR 是有限长单位冲激响应滤波器}}

FIR 是 Finite Impulse Response。它的输出只由有限个输入样本加权求和,不需要过去输出反馈,所以结构稳定,而且容易设计成严格线性相位。

可以把 IIR 看成带反馈系统,而 FIR 更像有限记忆的加权平均器:

FIR 没有反馈,最大的优点是稳定并且容易实现线性相位。\boxed{\text{FIR 没有反馈,最大的优点是稳定并且容易实现线性相位。}}

1. FIR 系统函数

FIR 的冲激响应有限长:

0nN10\le n\le N-1

系统函数:

H(z)=n=0N1h(n)znH(z)=\sum_{n=0}^{N-1}h(n)z^{-n}

频率响应:

H(ejω)=n=0N1h(n)ejωnH(e^{j\omega})=\sum_{n=0}^{N-1}h(n)e^{-j\omega n}

FIR 的差分方程是

y(n)=k=0N1h(k)x(nk)y(n)=\sum_{k=0}^{N-1}h(k)x(n-k)

展开后就是

y(n)=h(0)x(n)+h(1)x(n1)++h(N1)x(nN+1)y(n)=h(0)x(n)+h(1)x(n-1)+\cdots+h(N-1)x(n-N+1)

也就是说,当前输出只是当前与过去有限个输入的加权和。例如

y(n)=13x(n)+13x(n1)+13x(n2)y(n)=\frac13x(n)+\frac13x(n-1)+\frac13x(n-2)

是一个 3 点平均滤波器,可以削弱快速抖动,具有低通和平滑效果。

对差分方程做 Z 变换:

Y(z)=X(z)[h(0)+h(1)z1++h(N1)z(N1)]Y(z)=X(z)\left[h(0)+h(1)z^{-1}+\cdots+h(N-1)z^{-(N-1)}\right]

于是得到前面的 H(z)H(z)。它没有由过去输出形成的反馈分母,只有有限个延迟项。

FIR 也天然满足 BIBO 稳定性。只要输入有界、系数有限,有限个有界数的加权和必然有界。IIR 则需要额外检查极点是否位于单位圆内。

频率响应还可以写成

H(ejω)=H(ejω)ejθ(ω)H(e^{j\omega})=|H(e^{j\omega})|e^{j\theta(\omega)}

其中 H(ejω)|H(e^{j\omega})| 决定各频率被放大或衰减多少,θ(ω)\theta(\omega) 决定各频率的相位变化。

2. 什么是线性相位

如果不同频率通过系统后延迟不一样,波形会变形。线性相位的意思是

θ(ω)=τω\theta(\omega)=-\tau\omega

或者

θ(ω)=π2τω\theta(\omega)=-\frac{\pi}{2}-\tau\omega

群时延定义为

τ=dθ(ω)dω\tau=-\frac{d\theta(\omega)}{d\omega}

人话解释:

τ 表示不同频率成分通过滤波器后延迟多少\boxed{\tau \text{ 表示不同频率成分通过滤波器后延迟多少}}

如果 τ\tau 是常数,不同频率延迟相同,波形就不容易失真。

例如方波由许多正弦分量叠加而成。若低频、中频、高频的延迟不同,它们到达时间不一致,重新叠加后就不再是原来的方波,这就是相位失真。因此线性相位真正想保住的是波形,而不仅仅是幅度。

3. FIR 线性相位的核心条件

这是必背公式:

h(n)=±h(N1n)\boxed{h(n)=\pm h(N-1-n)}

如果是加号,

h(n)=h(N1n)h(n)=h(N-1-n)

叫偶对称。

如果是减号,

h(n)=h(N1n)h(n)=-h(N-1-n)

叫奇对称。

平均延迟为

τ=N12\tau=\frac{N-1}{2}

人话解释:只要 FIR 的冲激响应左右对称,或者左右反对称,它就能实现线性相位。

为什么对称会产生线性相位?以偶对称、N=5N=5 为例:

h(0)=h(4),h(1)=h(3)h(0)=h(4),\qquad h(1)=h(3)

频率响应可以配对整理成

H(ejω)=ej2ω[h(2)+2h(1)cosω+2h(0)cos2ω]H(e^{j\omega})=e^{-j2\omega} \left[h(2)+2h(1)\cos\omega+2h(0)\cos2\omega\right]

方括号中是实函数,ej2ωe^{-j2\omega} 则提供相位 2ω-2\omega,对应固定群时延 2,而 2=(N1)/22=(N-1)/2。一般情况下,对称项配对后都能提取出

ejω(N1)/2e^{-j\omega(N-1)/2}

这个纯延迟项,这就是线性相位的来源。

线性相位 FIR 的四种类型

4. 四种线性相位 FIR

线性相位 FIR 分四种:

  1. 偶对称,NN 为奇数
  2. 偶对称,NN 为偶数
  3. 奇对称,NN 为奇数
  4. 奇对称,NN 为偶数

四类的端点限制必须会判断:

  • 第一类:偶对称、奇数长度,最通用,可设计低通、高通、带通和带阻。
  • 第二类:偶对称、偶数长度,在 ω=π\omega=\pi 处必为 0,不适合要求最高频通过的高通和带阻。
  • 第三类:奇对称、奇数长度,在 ω=0\omega=0ω=π\omega=\pi 处都为 0,常用于 Hilbert 变换器和微分器。
  • 第四类:奇对称、偶数长度,在 ω=0\omega=0 处必为 0,但 ω=π\omega=\pi 处不一定为 0,可用于部分高通、带通和微分器。

简单记忆:

普通低通、高通、带通、带阻,优先想偶对称\boxed{\text{普通低通、高通、带通、带阻,优先想偶对称}} 奇对称多用于微分器、Hilbert 变换器\boxed{\text{奇对称多用于微分器、Hilbert 变换器}}

5. 窗函数法是什么

理想滤波器的频率响应通常是突然跳变的,但这往往对应无限长冲激响应,实际做不出来。

以理想低通为例:

Hd(ejω)={ejωα,ωωc,0,ωc<ωπH_d(e^{j\omega})= \begin{cases} e^{-j\omega\alpha},&|\omega|\le\omega_c,\\ 0,&\omega_c<|\omega|\le\pi \end{cases}

它的理想冲激响应是无限长的 sinc 型序列:

hd(n)=sin[ωc(nα)]π(nα)h_d(n)=\frac{\sin[\omega_c(n-\alpha)]}{\pi(n-\alpha)}

n=αn=\alpha 时应取极限 hd(α)=ωc/πh_d(\alpha)=\omega_c/\pi。为获得线性相位,通常令

α=N12\alpha=\frac{N-1}{2}

使截取后的序列关于 FIR 中心对称。

窗函数法的做法是:

h(n)=hd(n)w(n)h(n)=h_d(n)w(n)

这里

  • hd(n)h_d(n):理想冲激响应,通常无限长
  • w(n)w(n):窗函数,用来截断
  • h(n)h(n):实际 FIR 系数

人话解释:

窗函数法就是把无限长的理想响应剪成有限长\boxed{\text{窗函数法就是把无限长的理想响应剪成有限长}}

矩形窗相当于直接剪断序列,时域截断很突然,因此频域会出现明显波纹,即吉布斯效应。窗的主瓣宽度主要影响过渡带,旁瓣高度主要影响阻带波纹和阻带衰减:主瓣越窄,过渡带越陡;旁瓣越低,阻带抑制越强。二者通常不能同时做到最好。

窗函数法的设计流程

6. 常见窗函数怎么选

  • 矩形窗:过渡带窄,但旁瓣高,阻带衰减差
  • 三角窗:旁瓣更低,但过渡带变宽
  • 汉宁窗:阻带衰减更好
  • 哈明窗:通常比汉宁窗更强
  • 布莱克曼窗:阻带衰减更强,但过渡带更宽
  • 凯泽窗:参数可调,更灵活

考试选窗时一般看阻带衰减 αs\alpha_s

常见阻带衰减可近似记为:

  • 矩形窗:约 21 dB
  • 三角窗:约 25 dB
  • 汉宁窗:约 44 dB
  • 哈明窗:约 53 dB
  • 布莱克曼窗:约 74 dB

强弱顺序是

矩形<三角<汉宁<哈明<布莱克曼\boxed{\text{矩形}<\text{三角}<\text{汉宁}<\text{哈明}<\text{布莱克曼}}

窗类型主要由阻带最小衰减决定,窗长度 NN 主要由过渡带宽度决定。过渡带越窄,所需 NN 越大。

7. 窗函数法设计步骤

第一步,看题目指标:ωp,ωs,αs\omega_p,\omega_s,\alpha_s

第二步,根据 αs\alpha_s 选窗。

第三步,估计窗长 NN

第四步,确定理想截止频率。低通、高通常取

ωc=ωp+ωs2\omega_c=\frac{\omega_p+\omega_s}{2}

第五步,写理想冲激响应 hd(n)h_d(n)

第六步,加窗得到

h(n)=hd(n)w(n)h(n)=h_d(n)w(n)

7.1 理想高通怎么写

高通可以理解成“全通减低通”。全通的冲激响应是 δ(nα)\delta(n-\alpha),所以

hd(n)=δ(nα)sin[ωc(nα)]π(nα)\boxed{ h_d(n)=\delta(n-\alpha) -\frac{\sin[\omega_c(n-\alpha)]}{\pi(n-\alpha)} }

n=αn=\alpha 时,中心值应单独写为

hd(α)=1ωcπh_d(\alpha)=1-\frac{\omega_c}{\pi}

7.2 高通 FIR 完整例题

设计线性相位高通 FIR,指标为

ωp=π2,ωs=π4,αs=40 dB\omega_p=\frac{\pi}{2},\qquad \omega_s=\frac{\pi}{4},\qquad \alpha_s=40\text{ dB}

第一步,αs=40 dB\alpha_s=40\text{ dB},汉宁窗约能提供 44 dB 阻带衰减,因此选择汉宁窗。

第二步,过渡带宽度为

Bt=ωpωs=π4B_t=\omega_p-\omega_s=\frac{\pi}{4}

汉宁窗经验公式为 Bt6.2π/NB_t\approx6.2\pi/N,所以

6.2πNπ4N24.8\frac{6.2\pi}{N}\le\frac{\pi}{4} \quad\Rightarrow\quad N\ge24.8

N=25N=25。它既满足长度要求,又是奇数长度,不会把高通所需的 ω=π\omega=\pi 响应强制为 0。

第三步,延迟为

α=N12=12\alpha=\frac{N-1}{2}=12

理想截止频率取过渡带中点:

ωc=ωp+ωs2=3π8\omega_c=\frac{\omega_p+\omega_s}{2}=\frac{3\pi}{8}

第四步,写出理想高通冲激响应:

hd(n)=δ(n12)sin[3π8(n12)]π(n12)h_d(n)=\delta(n-12) -\frac{\sin[\frac{3\pi}{8}(n-12)]}{\pi(n-12)}

中心值为

hd(12)=138=58h_d(12)=1-\frac{3}{8}=\frac{5}{8}

第五步,N=25N=25 的汉宁窗是

w(n)=0.5[1cos(2πn24)]=0.5[1cos(πn12)],0n24w(n)=0.5\left[1-\cos\left(\frac{2\pi n}{24}\right)\right] =0.5\left[1-\cos\left(\frac{\pi n}{12}\right)\right], \quad0\le n\le24

最终系数为

h(n)=hd(n)w(n),0n24\boxed{h(n)=h_d(n)w(n),\qquad0\le n\le24}

因为 w(12)=1w(12)=1,所以中心系数 h(12)=5/8h(12)=5/8。完整流程可以记成

选窗Nαωchd(n)hd(n)w(n)\boxed{\text{选窗}\rightarrow N\rightarrow\alpha\rightarrow\omega_c \rightarrow h_d(n)\rightarrow h_d(n)w(n)}

8. 频率采样法是什么

窗函数法是从时域出发,频率采样法是从频域出发。

它的做法是先对理想频率响应采样:

Hd(k)=Hd(ejω)ω=2πNkH_d(k)=H_d(e^{j\omega})\bigg|_{\omega=\frac{2\pi}{N}k}

再做 IDFT:

h(n)=1Nk=0N1Hd(k)ej2πNknh(n)=\frac{1}{N}\sum_{k=0}^{N-1}H_d(k)e^{j\frac{2\pi}{N}kn}

例如做 8 点低通频率采样,可以规定

H(k)={1,1,0,0,0,0,0,1}H(k)=\{1,1,0,0,0,0,0,1\}

其中 1 表示相应频率通过,0 表示阻止。对这组频率样本做 8 点 IDFT,就得到有限长 h(n)h(n)。因此频率采样法的直观含义是:先在频率轴上指定若干点的滤波效果,再反变换得到时域系数。

它特别适合理想频率响应公式复杂,或者工程要求本来就只给出若干离散频率点的情况。

9. 窗函数法和频率采样法区别

窗函数法:从时域出发,先求 hd(n)h_d(n),再乘窗函数。

频率采样法:从频域出发,先给 Hd(k)H_d(k),再 IDFT 求 h(n)h(n)

讲义中的归纳就是:窗函数法控制时域截取方式,频率采样法控制频域采样点。

第四轮常见考点可以压缩为:

  1. FIR 与 IIR 比较:FIR 无反馈、稳定、可严格线性相位,但同等指标下通常阶数和延迟更大。
  2. 线性相位判断:检查 h(n)=±h(N1n)h(n)=\pm h(N-1-n),群时延为 (N1)/2(N-1)/2
  3. 四类 FIR 判断:先看对称性,再看长度奇偶性和 0,π0,\pi 端点限制。
  4. 窗函数设计:选窗、估计 NN、求 α\alphaωc\omega_c、写 hd(n)h_d(n)、最后加窗。
  5. 频率采样法:先取 Hd(k)H_d(k),再由 IDFT 得到 h(n)h(n)

小例题:判断 FIR 是否满足线性相位

已知某 FIR 滤波器长度 N=5N=5,冲激响应为

h(0)=1,h(1)=2,h(2)=3,h(3)=2,h(4)=1h(0)=1,\quad h(1)=2,\quad h(2)=3,\quad h(3)=2,\quad h(4)=1

判断它是否满足线性相位条件。

解答:

线性相位 FIR 的核心条件是

h(n)=±h(N1n)h(n)=\pm h(N-1-n)

这里 N=5N=5,所以应比较:

h(0) 与 h(4),h(1) 与 h(3),h(2) 与 h(2)h(0)\text{ 与 }h(4),\quad h(1)\text{ 与 }h(3),\quad h(2)\text{ 与 }h(2)

题目中有

h(0)=h(4)=1,h(1)=h(3)=2h(0)=h(4)=1,\quad h(1)=h(3)=2

所以它满足偶对称条件

h(n)=h(4n)h(n)=h(4-n)

因此它满足线性相位条件,且属于偶对称、奇数长度这一类。

最后把这一轮压缩成一句话:

FIR 用有限长 h(n) 逼近理想滤波器;线性相位靠对称性,窗函数法靠时域截断,频率采样法靠频域取点。\boxed{ \text{FIR 用有限长 }h(n)\text{ 逼近理想滤波器;线性相位靠对称性,} \text{窗函数法靠时域截断,频率采样法靠频域取点。} }

最后再背:LTI 基础、单位冲激、卷积、采样定理、欧拉公式、复数运算

这一部分不是最难,但它是地基。如果你看不懂前面的内容,大概率是这些没懂。

1. LTI 是什么

LTI 是 Linear Time-Invariant,中文叫线性时不变系统。

线性意思是满足叠加原理。如果输入 x1(n)x_1(n) 输出 y1(n)y_1(n),输入 x2(n)x_2(n) 输出 y2(n)y_2(n),那么输入

ax1(n)+bx2(n)ax_1(n)+bx_2(n)

输出应该是

ay1(n)+by2(n)ay_1(n)+by_2(n)

时不变意思是系统规则不随时间变化。如果输入延迟,输出也只延迟同样时间。

2. LTI 系统最重要公式

y(n)=x(n)h(n)\boxed{y(n)=x(n)*h(n)}

意思是:输入 x(n)x(n) 经过冲激响应为 h(n)h(n) 的 LTI 系统,输出就是二者卷积。

3. 卷积常用性质

单位冲激卷积:

x(n)δ(n)=x(n)x(n)*\delta(n)=x(n)

延迟冲激卷积:

x(n)δ(nn0)=x(nn0)x(n)*\delta(n-n_0)=x(n-n_0)

和阶跃卷积:

x(n)u(n)=m=nx(m)x(n)*u(n)=\sum_{m=-\infty}^{n}x(m)

4. 采样定理

采样就是把连续信号变成离散信号。连续信号记作

xa(t)x_a(t)

采样后

x(n)=xa(nT)x(n)=x_a(nT)

这里 TT 是采样周期,fsf_s 是采样频率。采样定理说:

fs2fh\boxed{f_s\ge 2f_h}

其中 fhf_h 是信号最高频率。意思是采样频率至少要大于等于最高频率的 22 倍,否则会混叠。

5. 频谱混叠是什么

采样后,频谱会周期重复。如果采样频率太低,重复的频谱会重叠在一起,这就叫混叠。

人话解释:

混叠就是高频伪装成低频,导致恢复不回原信号\boxed{\text{混叠就是高频伪装成低频,导致恢复不回原信号}}

6. 欧拉公式

欧拉公式必须背:

ejω=cosω+jsinωe^{j\omega}=\cos\omega+j\sin\omega ejω=cosωjsinωe^{-j\omega}=\cos\omega-j\sin\omega

由它可以得到

cosω=ejω+ejω2\cos\omega=\frac{e^{j\omega}+e^{-j\omega}}{2} sinω=ejωejω2j\sin\omega=\frac{e^{j\omega}-e^{-j\omega}}{2j}

7. 复数模和相角

复数

a+jba+jb

模长:

a+jb=a2+b2|a+jb|=\sqrt{a^2+b^2}

相角:

arg(a+jb)=tan1ba\arg(a+jb)=\tan^{-1}\frac{b}{a}

但注意象限,不能机械只看反正切值。


按考试性价比的最终复习顺序

你现在就按这个顺序复习,不要乱。

第一优先级:Z 变换与系统分析。你要掌握 X(z)X(z)、ROC、极点零点、单位圆、系统函数 H(z)H(z)、因果性与稳定性。

第二优先级:DFT、圆周卷积、FFT。你要掌握 DFT/IDFT 定义、采样关系、圆周卷积、线性卷积长度和 FFT 本质。

第三优先级:IIR 滤波器设计。你要掌握 IIR 的反馈特征、指标定义、脉冲响应不变法与双线性变换法。

第四优先级:FIR 滤波器设计。你要掌握线性相位条件、四种对称类型、窗函数法与频率采样法。

第五优先级:基础知识。你要掌握 δ(n)\delta(n)u(n)u(n)、卷积、LTI、采样定理、欧拉公式、复数模和相角。

最后把整门课压成一句话:

Z 变换看系统性质,DFT/FFT 看有限频谱,IIR 靠模拟滤波器变换,FIR 靠线性相位和有限长逼近。\boxed{ \text{Z 变换看系统性质,DFT/FFT 看有限频谱,IIR 靠模拟滤波器变换,FIR 靠线性相位和有限长逼近。} }
Back to archive

Discussion

Comments

Post

Share questions, corrections, or extra notes about this post.