Compare commits

..
3 Commits
Author SHA1 Message Date
josh 4a4f39fcd3 add post josh-dsp-7 2023-04-16 00:14:14 +08:00
josh abeab5d047 add post josh-dsp-6 2023-04-15 23:33:00 +08:00
josh 8587ef4deb add post josh-dsp-5 2023-04-15 23:00:00 +08:00
7 changed files with 1147 additions and 77 deletions
@@ -18,6 +18,7 @@ date: 2020-11-26 22:23:39
# 语法 # 语法
`y = upsample(x,n)` `y = upsample(x,n)`
`y = upsample(x,n,phase)` `y = upsample(x,n,phase)`
<!-- more --> <!-- more -->
+7
View File
@@ -19,10 +19,17 @@ date: 2020-11-27 01:15:12
# 语法 # 语法
`out = awgn(in,snr)` `out = awgn(in,snr)`
`out = awgn(in,snr,signalpower)` `out = awgn(in,snr,signalpower)`
---
`out = awgn(in,snr,signalpower,randobject)` `out = awgn(in,snr,signalpower,randobject)`
`out = awgn(in,snr,signalpower,seed)` `out = awgn(in,snr,signalpower,seed)`
---
`out = awgn(___,powertype)` `out = awgn(___,powertype)`
<!-- more --> <!-- more -->
+66 -69
View File
@@ -74,9 +74,9 @@ RTL 级设计的评判标准有很多,如时序性能、所占面积、可测
### 1.1.1 “用速度的优势换面积的节约”举例 ### 1.1.1 “用速度的优势换面积的节约”举例
WCDMA(宽带码分多址)系统中使用到了快速哈达码(Fast Hadamard Transform, FHT)运算, FHT 由 4 步相同的算法完成,如[图 5-1](#图5-1) 所示。 WCDMA(宽带码分多址)系统中使用到了快速哈达码(Fast Hadamard Transform, FHT)运算, FHT 由 4 步相同的算法完成,如[图 5-1](#fig.5-1) 所示。
<a name="图5-1"></a> <a name="fig.5-1"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-010-FastHadamardTransform.png!sign" alt="FHT 原理图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-010-FastHadamardTransform.png!sign" alt="FHT 原理图"/>
</div> </div>
@@ -246,9 +246,9 @@ end
endmodule endmodule
``` ```
评估一下系统的流水线时间余量后,发现整个流水线有 16 个时钟周期,而 FHT 模块的频率很高,加法本身仅消耗 1 个时钟周期,加上数据的选择和分配所消耗时间,也完全能满足系统频率要求,所以**将单步 FHT 运算复用 4 次**,就能大幅度节约所消耗的资源。这种复用单步算法的FHT 实现框图如[图 5-2](#图5-2) 所示,由输入选择寄存、单步FHT 模块、输出选择寄存和计数器构成。 评估一下系统的流水线时间余量后,发现整个流水线有 16 个时钟周期,而 FHT 模块的频率很高,加法本身仅消耗 1 个时钟周期,加上数据的选择和分配所消耗时间,也完全能满足系统频率要求,所以**将单步 FHT 运算复用 4 次**,就能大幅度节约所消耗的资源。这种复用单步算法的FHT 实现框图如[图 5-2](#fig.5-2) 所示,由输入选择寄存、单步FHT 模块、输出选择寄存和计数器构成。
<a name="图5-2"></a> <a name="fig.5-2"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-020-FHTOperationReuseStructureDiagram.png!sign" width="500px" alt="FHT 运算复用结构图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-020-FHTOperationReuseStructureDiagram.png!sign" width="500px" alt="FHT 运算复用结构图"/>
</div> </div>
@@ -362,14 +362,14 @@ end
endmodule endmodule
``` ```
为了便于对比两种实现方式的资源消耗,在 Synplify Pro 中对两种实现方法分别做了综合。两次综合选用的参数都完全一致,所以仅考察设计所消耗的寄存器和逻辑资源,选 中Disable I/O In sertion 选项,不插入 I/O,取消 Synplify Pro 中诸如 FSM Compiler、FSM Explorer、Resource Sharing、Retiming、Pipelining等综合优化选项。两次综合的结果如[图 5-3](#图5-3) 和[图 5-4](#图5-4) 所示。 为了便于对比两种实现方式的资源消耗,在 Synplify Pro 中对两种实现方法分别做了综合。两次综合选用的参数都完全一致,所以仅考察设计所消耗的寄存器和逻辑资源,选 中Disable I/O In sertion 选项,不插入 I/O,取消 Synplify Pro 中诸如 FSM Compiler、FSM Explorer、Resource Sharing、Retiming、Pipelining等综合优化选项。两次综合的结果如[图 5-3](#fig.5-3) 和[图 5-4](#fig.5-4) 所示。
<a name="图5-3"></a> <a name="fig.5-3"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-030-FHTPARTResource.bmp!sign" alt="未采用复用方案的“fhtpart”模块综合所消耗的资源"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-030-FHTPARTResource.bmp!sign" alt="未采用复用方案的“fhtpart”模块综合所消耗的资源"/>
</div> </div>
<a name="图5-4"></a> <a name="fig.5-4"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-040-WCHFHTResource.bmp!sign" alt="采用复用方案的“wch_fht”模块综合所消耗的资源"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-040-WCHFHTResource.bmp!sign" alt="采用复用方案的“wch_fht”模块综合所消耗的资源"/>
</div> </div>
@@ -380,9 +380,9 @@ endmodule
举一个通过复制模块,并行处理达到高处理带宽的例子(可实际应用于无线系统、有线接入、路由器、视频系统等)。假设输入数据流的速率是 800 Mbit/s,而 FPGA 上设计的数据处理模块的处理速度最大为 200 Mbit/s,由于处理模块的数据吞吐量满足不了要求,直接在 FPGA 上实现这个设计是一个“impossible mission”! 举一个通过复制模块,并行处理达到高处理带宽的例子(可实际应用于无线系统、有线接入、路由器、视频系统等)。假设输入数据流的速率是 800 Mbit/s,而 FPGA 上设计的数据处理模块的处理速度最大为 200 Mbit/s,由于处理模块的数据吞吐量满足不了要求,直接在 FPGA 上实现这个设计是一个“impossible mission”!
这种情况下。就应该利用“面积换速度”的思想,至少复制 4 个处理模块,**首先将输入数据进行串/并转换**,然后利用这 4 个模块并行处理分配的数据,**最后将处理结果并/串变换**,完成数据速率的要求。在整个处理模块的两端看,数据速率仍然是 800 Mbit/s,而在 FPGA 的内部看,每个子模块处理的数据速率仅为 200 Mbit/s,其实整个数据的吞吐扯的保障是依赖于 4 个子模块并行处理完成的,也就是说利用了占用更多的芯片面积,实现了高速处理,通过使用“面积的复制换取处理速度的提高”的思想实现了设计。设计的示意框图如[图 5-5](#图5-5) 所示。 这种情况下。就应该利用“面积换速度”的思想,至少复制 4 个处理模块,**首先将输入数据进行串/并转换**,然后利用这 4 个模块并行处理分配的数据,**最后将处理结果并/串变换**,完成数据速率的要求。在整个处理模块的两端看,数据速率仍然是 800 Mbit/s,而在 FPGA 的内部看,每个子模块处理的数据速率仅为 200 Mbit/s,其实整个数据的吞吐扯的保障是依赖于 4 个子模块并行处理完成的,也就是说利用了占用更多的芯片面积,实现了高速处理,通过使用“面积的复制换取处理速度的提高”的思想实现了设计。设计的示意框图如[图 5-5](#fig.5-5) 所示。
<a name="图5-5"></a> <a name="fig.5-5"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-050-MoreAreaforSpeed.png!sign" width="700px" alt="“面积换速度”示意图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-050-MoreAreaforSpeed.png!sign" width="700px" alt="“面积换速度”示意图"/>
</div> </div>
@@ -488,9 +488,9 @@ case (var)
从更高层面上看,对于任何一个硬件系统,如何进行模块划分与任务分配,什么样的算法和功能适合放在可编程逻辑器件或 ASIC 里面实现,什么样的算法和功能适合放在 DSP、CPU 等微处理器实现,如何划分软硬件功能,安排模块接口设计等问题都非常重要。要知道**在系统上复用模块节省的面积远比在代码上小打小闹来得实惠多。** 从更高层面上看,对于任何一个硬件系统,如何进行模块划分与任务分配,什么样的算法和功能适合放在可编程逻辑器件或 ASIC 里面实现,什么样的算法和功能适合放在 DSP、CPU 等微处理器实现,如何划分软硬件功能,安排模块接口设计等问题都非常重要。要知道**在系统上复用模块节省的面积远比在代码上小打小闹来得实惠多。**
[图 5-6](#图5-6) 描述了FPGA 设计的系统规划流程。我们可以发现**对设计从整体上进行模块复用应该在系统功能定义后就充分考虑**,并指导模块的具体划分。模块划分非常重要,除了关系到是否最大程度上发挥项目成员的协同设计能力,而且直接决定着设计的综合、实现效果和相关的操作时间,模块划分的具体方法请参考 4.2 小节中关于模块划分技巧的论述。 [图 5-6](#fig.5-6) 描述了FPGA 设计的系统规划流程。我们可以发现**对设计从整体上进行模块复用应该在系统功能定义后就充分考虑**,并指导模块的具体划分。模块划分非常重要,除了关系到是否最大程度上发挥项目成员的协同设计能力,而且直接决定着设计的综合、实现效果和相关的操作时间,模块划分的具体方法请参考 4.2 小节中关于模块划分技巧的论述。
<a name="图5-6"></a> <a name="fig.5-6"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-060-SystemPlanningProc.png!sign" width="700px" alt="系统规划的简化流程"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-060-SystemPlanningProc.png!sign" width="700px" alt="系统规划的简化流程"/>
</div> </div>
@@ -499,9 +499,9 @@ case (var)
下举例说明如何在系统层次复用模块 下举例说明如何在系统层次复用模块
利用“可编程匹配滤波器“实现 WCDMA 基站的方案,其核心是在合理规划系统的基础上,合理划分模块并安排操作时序,提高单元模块的复用率令从而大大降低硬件消耗,其设计思想是系统原则的集中体现。可编程匹配滤波器原理框图如[图 5-7](#图5-7) 所示。 利用“可编程匹配滤波器“实现 WCDMA 基站的方案,其核心是在合理规划系统的基础上,合理划分模块并安排操作时序,提高单元模块的复用率令从而大大降低硬件消耗,其设计思想是系统原则的集中体现。可编程匹配滤波器原理框图如[图 5-7](#fig.5-7) 所示。
<a name="图5-7"></a> <a name="fig.5-7"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-070-ProgrammableMatchFilter.png!sign" width="500px" alt="系统规划的简化流程"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-070-ProgrammableMatchFilter.png!sign" width="500px" alt="系统规划的简化流程"/>
</div> </div>
@@ -555,9 +555,9 @@ case (var)
在后续笔记中会介绍异步时钟域转换的问题,在谈这个话题之前,先分析一下什么是亚稳态,以及如何避免。 在后续笔记中会介绍异步时钟域转换的问题,在谈这个话题之前,先分析一下什么是亚稳态,以及如何避免。
异步时钟域的转换的核心就是要保证下级时钟对上级数据采样的 Setup 时间和 Hold 时间。如果触发器的Setup 时间或者 Hold 时间不满足,就可能产生亚稳态,**此时触发器输出端 Q 在有效时钟沿之后比较长的一段时间内处于不确定的状态,在这段时间内 Q 端产生毛刺并不断振荡,最终固定在某一电压值,此电压值并不一定等于原来数据输入端 D 的数值**,这段时间称为决断时间(Resolution time)。经过 Resolution time 之后 Q 端将稳定到 0 或1, 但是究竟是 0 还是1,这是随机的,与输入没有必然的关系,其产生示意图如[图 5-8](#图5-8) 所示。 异步时钟域的转换的核心就是要保证下级时钟对上级数据采样的 Setup 时间和 Hold 时间。如果触发器的Setup 时间或者 Hold 时间不满足,就可能产生亚稳态,**此时触发器输出端 Q 在有效时钟沿之后比较长的一段时间内处于不确定的状态,在这段时间内 Q 端产生毛刺并不断振荡,最终固定在某一电压值,此电压值并不一定等于原来数据输入端 D 的数值**,这段时间称为决断时间(Resolution time)。经过 Resolution time 之后 Q 端将稳定到 0 或1, 但是究竟是 0 还是1,这是随机的,与输入没有必然的关系,其产生示意图如[图 5-8](#fig.5-8) 所示。
<a name="图5-8"></a> <a name="fig.5-8"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-080-MetastableGenerate.png!sign" width="700px" alt="亚稳态产生示意图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-080-MetastableGenerate.png!sign" width="700px" alt="亚稳态产生示意图"/>
</div> </div>
@@ -566,14 +566,14 @@ case (var)
**只要系统中有异步元件,亚稳态就无法避免**,因此设计的电路**首先要减少亚稳态导致的错误**,**其次要使系统对产生的错误不敏感**。前者要靠同步设计来实现,而后者则根据不同的设计应用不同的处理办法。 **只要系统中有异步元件,亚稳态就无法避免**,因此设计的电路**首先要减少亚稳态导致的错误**,**其次要使系统对产生的错误不敏感**。前者要靠同步设计来实现,而后者则根据不同的设计应用不同的处理办法。
**使用两级以上寄存器采样可以有效地减少亚稳态继续传播的概率**。在[图 5-9](#图5-9) 中,左边为异步输入端,经过两级触发器采样,在右边的输出与 `bclk` 同步,而且该输出基本不存在亚稳态。其原理是使第一个触发器的输出端存在亚稳态,经过一个 clk 周期后,第二个触发器 D 端的电平仍未稳定的概率非常小,因此第二个触发器 Q 端基本不会产生亚稳态。理论上如果再添加一级寄存器,使同步采样达到 3 级,则末级输出为亚稳态的概率几乎为 0。 **使用两级以上寄存器采样可以有效地减少亚稳态继续传播的概率**。在[图 5-9](#fig.5-9) 中,左边为异步输入端,经过两级触发器采样,在右边的输出与 `bclk` 同步,而且该输出基本不存在亚稳态。其原理是使第一个触发器的输出端存在亚稳态,经过一个 clk 周期后,第二个触发器 D 端的电平仍未稳定的概率非常小,因此第二个触发器 Q 端基本不会产生亚稳态。理论上如果再添加一级寄存器,使同步采样达到 3 级,则末级输出为亚稳态的概率几乎为 0。
<a name="图5-9"></a> <a name="fig.5-9"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-090-TwoStageRegisterSampling.png!sign" width="700px" alt="两级寄存器采样降低亚稳态概率"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-090-TwoStageRegisterSampling.png!sign" width="700px" alt="两级寄存器采样降低亚稳态概率"/>
</div> </div>
使用[图 5-9](#图5-9) 两级寄存器采样仅能降低亚稳态的概率,但是并不能保证第二级输出的稳态电平就是正确电平。前面说过经过 Resolution time 之后寄存器输出的电平是一个不确定的稳态值,也就是说**这种处理方法并不能排除采样错误的产生**,这时就**要求所设计的系统对采样错误有一定的容忍度**。有些应用本身就对采样错误不敏感,如一帧图像编码,一段话音编码等。而有些系统对错误采样比较敏感。这类由于亚稳态造成的采样是一些突发的错误,所以可以采用一些纠错编码手段完成错误的纠正。 使用[图 5-9](#fig.5-9) 两级寄存器采样仅能降低亚稳态的概率,但是并不能保证第二级输出的稳态电平就是正确电平。前面说过经过 Resolution time 之后寄存器输出的电平是一个不确定的稳态值,也就是说**这种处理方法并不能排除采样错误的产生**,这时就**要求所设计的系统对采样错误有一定的容忍度**。有些应用本身就对采样错误不敏感,如一帧图像编码,一段话音编码等。而有些系统对错误采样比较敏感。这类由于亚稳态造成的采样是一些突发的错误,所以可以采用一些纠错编码手段完成错误的纠正。
## 2.3 异步时钟域数据同步<a name="0203"></a> ## 2.3 异步时钟域数据同步<a name="0203"></a>
@@ -617,18 +617,18 @@ case (var)
1. 同频异相问题 1. 同频异相问题
同频异相问题的简单解决方法是**用后级时钟对前级数据采样两次**,即通常所述的**用寄存器打两次**。数据同步如[图 5-10](#图5-10) 所示,这样的做法是有效地减少了亚稳态的传播,使后级电路数据都是有效电平值。但是这种做法并不能保证两级寄存器采样后的数据是正确的电平值,因为一旦 Setup 或 Hold 时间不满足,采样发生亚稳态,则经判决时间(Resolution Time)后,还是可能判决到错误电平值。所以这种方法仅仅适用于对少量错误不敏感的功能单元。 同频异相问题的简单解决方法是**用后级时钟对前级数据采样两次**,即通常所述的**用寄存器打两次**。数据同步如[图 5-10](#fig.5-10) 所示,这样的做法是有效地减少了亚稳态的传播,使后级电路数据都是有效电平值。但是这种做法并不能保证两级寄存器采样后的数据是正确的电平值,因为一旦 Setup 或 Hold 时间不满足,采样发生亚稳态,则经判决时间(Resolution Time)后,还是可能判决到错误电平值。所以这种方法仅仅适用于对少量错误不敏感的功能单元。
<a name="图5-10"></a> <a name="fig.5-10"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-100-DataSynchronization.png!sign" width="700px" alt="数据同步"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-100-DataSynchronization.png!sign" width="700px" alt="数据同步"/>
</div> </div>
可靠的做法是用 DPRAM 、FIFO 或者一段寄存器 Buffer 完成异步时钟域的数据转换。把数据存放在 DPRAM 或FIFO 的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入 DPRAM 或者FIFO, 然后使用本级的采样时钟( 一般是数据处理的主时钟),将数据读出即可。由于时钟频率相同,所以 DPRAM 或 FIFO 两端的数据吞吐率一致,实现起来相对简单。 可靠的做法是用 DPRAM 、FIFO 或者一段寄存器 Buffer 完成异步时钟域的数据转换。把数据存放在 DPRAM 或FIFO 的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入 DPRAM 或者FIFO, 然后使用本级的采样时钟( 一般是数据处理的主时钟),将数据读出即可。由于时钟频率相同,所以 DPRAM 或 FIFO 两端的数据吞吐率一致,实现起来相对简单。
2. 异频问题 2. 异频问题
可靠完成异频问题的解决方法就是使用 DPRAM 或 FIFO 。其实现思路与前面所述一致,用上级随路时钟写上级数据,然后用本级时钟读出数据。但是由于时钟频率不同,所以两个端口的数据吞吐率不一致,设计时一定要开好缓冲区,并通过监控(Full、Half、Empty 等指示)确保数据流不会溢出。 可靠完成异频问题的解决方法就是使用 DPRAM 或 FIFO 。其实现思路与前面所述一致,用上级随路时钟写上级数据,然后用本级时钟读出数据。但是由于时钟频率不同,所以两个端口的数据吞吐率不一致,设计时一定要开好缓冲区,并通过监控(Full、Half、Empty 等指示)确保数据流不会溢出。
# 3. 代码风格 # 3. 代码风格
@@ -654,12 +654,11 @@ case (var)
## 4.1 结构层次化编码 ## 4.1 结构层次化编码
结构层次化编码(Hierarchical Coding)是模块化设计思想的一种体现。目前大型设计中必须采用结构层次化编码风格,以提高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励。最基本的结构化层次是由一个顶层模块和若干个子模块构成,每个子模块根据需要还可以包含自己的子模块。结构层次化编码结构如[图 5-11](#图5-11) 所示。 结构层次化编码(Hierarchical Coding)是模块化设计思想的一种体现。目前大型设计中必须采用结构层次化编码风格,以提高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励。最基本的结构化层次是由一个顶层模块和若干个子模块构成,每个子模块根据需要还可以包含自己的子模块。结构层次化编码结构如[图 5-11](#fig.5-11) 所示。
<a name="图5-11"></a> <a name="fig.5-11"></a>
<div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-110-StructuredCoding.png!sign" width="500px" alt="结构层次化编码示意图"/> ![结构层次化编码示意图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-110-StructuredCoding.png!sign){width=600px}
</div>
结构层次化编码有如下注意事项: 结构层次化编码有如下注意事项:
@@ -683,27 +682,27 @@ case (var)
1. **对每个同步时序设计的子模块的输出使用寄存器** 1. **对每个同步时序设计的子模块的输出使用寄存器**
这也被称为用寄存器分割同步时序模块的原则。使用寄存器分割同步时序单元的好处是:便于综合工具权衡所分割的子模块中的组合电路部分和同步时序电路部分,从而达到更好的时序优化效果,这种模块划分符合时序约束的习惯,便于利用约束属性进行时序约束。 这也被称为用寄存器分割同步时序模块的原则。使用寄存器分割同步时序单元的好处是:便于综合工具权衡所分割的子模块中的组合电路部分和同步时序电路部分,从而达到更好的时序优化效果,这种模块划分符合时序约束的习惯,便于利用约束属性进行时序约束。
2. **将相关的逻辑或者可以复用的逻辑划分在同一模块内** 2. **将相关的逻辑或者可以复用的逻辑划分在同一模块内**
这个做法有时被称为**呼应系统原则**。这样做的好处有:一方面将相关的逻辑和可以复用的逻辑划分在同一模块,可在最大程度上复用资源,减少设计所消耗的面积;另一方面更利于综合工具优化某个具体功能的时序关键路径。其原因是,传统的综合工具只能同时优化某一部分的逻辑,而所能同时优化的逻辑的从本单元就是模块,所以将相关功能划分在同一模块将在时序和面积上获得更好的综合优化效果。 这个做法有时被称为**呼应系统原则**。这样做的好处有:一方面将相关的逻辑和可以复用的逻辑划分在同一模块,可在最大程度上复用资源,减少设计所消耗的面积;另一方面更利于综合工具优化某个具体功能的时序关键路径。其原因是,传统的综合工具只能同时优化某一部分的逻辑,而所能同时优化的逻辑的从本单元就是模块,所以将相关功能划分在同一模块将在时序和面积上获得更好的综合优化效果。
3. **将不同优化目标的逻辑分开** 3. **将不同优化目标的逻辑分开**
在介绍速度、面积平衡与互换原则时,合理的设计目标应该综合考虑面积最小和频率最高两个指标。好的设计,在规划阶段设计者就应该初步规划了设计的规模和时序关键路径,并对设计的优化目标有一个整体上的把握。对于时序紧张的部分.应该独立划分为一个模块.其优化目标为“Speed”,这种划分方法便于设计者进行时序约束,也便于综合和实现工具进行优化。目前很多综合与实现工具都支持物理区域位置约束,以模块为单元进行物理区域约束,从而优化关键路径时序,以达到更高的系统工作频率就更为方便有效。另一类情况是,设计的矛盾主要集中在芯片的资源消耗上。这时应该将资源消耗过大的部分划分为独立的模块,这类模块的优化目标应该定为“Area” 。同理,将它们规划到一起,更有利于区域布局与约束。这种根据优化目标进行优化的方法最大好处是,对于某个模块综合器仅需要考虑一种优化目标和策略,从而比较容易达到较好的优化效果。相反,如果同时考虑两种优化目标,会使综合器陷入互相制约的困境,耗费巨大的综合优化时间也得不到令人满意的综合优化结果。 在介绍速度、面积平衡与互换原则时,合理的设计目标应该综合考虑面积最小和频率最高两个指标。好的设计,在规划阶段设计者就应该初步规划了设计的规模和时序关键路径,并对设计的优化目标有一个整体上的把握。对于时序紧张的部分.应该独立划分为一个模块.其优化目标为“Speed”,这种划分方法便于设计者进行时序约束,也便于综合和实现工具进行优化。目前很多综合与实现工具都支持物理区域位置约束,以模块为单元进行物理区域约束,从而优化关键路径时序,以达到更高的系统工作频率就更为方便有效。另一类情况是,设计的矛盾主要集中在芯片的资源消耗上。这时应该将资源消耗过大的部分划分为独立的模块,这类模块的优化目标应该定为“Area” 。同理,将它们规划到一起,更有利于区域布局与约束。这种根据优化目标进行优化的方法最大好处是,对于某个模块综合器仅需要考虑一种优化目标和策略,从而比较容易达到较好的优化效果。相反,如果同时考虑两种优化目标,会使综合器陷入互相制约的困境,耗费巨大的综合优化时间也得不到令人满意的综合优化结果。
4. **将时序约束较松的逻辑归到同一模块** 4. **将时序约束较松的逻辑归到同一模块**
有些逻辑的时序非常宽松,不需要较高的时序约束,可以将这类逻辑归入同一模块,如多周期路径(Multi-cycle Path)等。将这些模块归类,并指定宽松约束,则可以让综合器尽量节省面积资源。 有些逻辑的时序非常宽松,不需要较高的时序约束,可以将这类逻辑归入同一模块,如多周期路径(Multi-cycle Path)等。将这些模块归类,并指定宽松约束,则可以让综合器尽量节省面积资源。
5. **将存储逻辑独立划分成模块** 5. **将存储逻辑独立划分成模块**
RAM、ROM、CAM 和 FIFO 等存储单元应该独立划分模块。这样做的好处是便于利用综合约束属性显化指定这些存储单元的结构和所使用的资源类型,也便于综合器将这些存储单元自动类推为指定器件的硬件原语。另一个好处是在仿真时消耗的内存也会减少,便于提高仿真速度。这是因为大多数仿真器对大面积的RAM都有独特的内存管理方式,以提高仿真效率。 RAM、ROM、CAM 和 FIFO 等存储单元应该独立划分模块。这样做的好处是便于利用综合约束属性显化指定这些存储单元的结构和所使用的资源类型,也便于综合器将这些存储单元自动类推为指定器件的硬件原语。另一个好处是在仿真时消耗的内存也会减少,便于提高仿真速度。这是因为大多数仿真器对大面积的RAM都有独特的内存管理方式,以提高仿真效率。
6. **合适的模块规模** 6. **合适的模块规模**
从理论上讲,模块的规模越大,越利于模块资源共享(Resource Sharing)。但是庞大的模块,将要求对综合器同时处理更多的逻辑结构.这将对综合器的处理能力和计算机的配置提出了较高的要求。另外,庞大的模块划分,不利于发挥目前非常流行的增拭综合与实现技术的优势。 从理论上讲,模块的规模越大,越利于模块资源共享(Resource Sharing)。但是庞大的模块,将要求对综合器同时处理更多的逻辑结构.这将对综合器的处理能力和计算机的配置提出了较高的要求。另外,庞大的模块划分,不利于发挥目前非常流行的增拭综合与实现技术的优势。
# 5. 组合逻辑的注意事项<a name="05"></a> # 5. 组合逻辑的注意事项<a name="05"></a>
@@ -727,12 +726,11 @@ case (var)
**组合逻辑反馈环路是数字同步逻辑设计的大忌**,它最容易因振荡、毛刺、时序违规等引起整个系统的不稳定和不可靠。 **组合逻辑反馈环路是数字同步逻辑设计的大忌**,它最容易因振荡、毛刺、时序违规等引起整个系统的不稳定和不可靠。
典型的组合逻辑反馈环路如[图 5-12](#图5-12) 所示,寄存器的 Q 端输出直接通过组合逻辑反馈到寄存器的异步复位端,如果 Q 输出为 0 时,经组合逻辑运算后为异步复位端有效,则电路进入不断清零的死循环。 典型的组合逻辑反馈环路如[图 5-12](#fig.5-12) 所示,寄存器的 Q 端输出直接通过组合逻辑反馈到寄存器的异步复位端,如果 Q 输出为 0 时,经组合逻辑运算后为异步复位端有效,则电路进入不断清零的死循环。
<a name="图5-12"></a> <a name="fig.5-12"></a>
<div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-120-CombinatorialLogicFeedbackLoop.png!sign" width="400px" alt="组合逻辑反馈环路示意图"/> ![组合逻辑反馈环路示意图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-120-CombinatorialLogicFeedbackLoop.png!sign){width="400px"}
</div>
组合逻辑反馈环路是一种**高风险**设计方式,主要原因如下: 组合逻辑反馈环路是一种**高风险**设计方式,主要原因如下:
@@ -748,9 +746,9 @@ case (var)
## 5.3 脉冲产生器 ## 5.3 脉冲产生器
在异步时序设计中,常用延时链(Delay Chains)产生脉冲,常用的异步脉冲产生方法如[图 5-13](#图5-13) 所示。 在异步时序设计中,常用延时链(Delay Chains)产生脉冲,常用的异步脉冲产生方法如[图 5-13](#fig.5-13) 所示。
<a name="图5-13"></a> <a name="fig.5-13"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-130-AsynchronousPulseGeneration.png!sign" width="500px" alt="常用的异步脉冲产生方法示意图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-130-AsynchronousPulseGeneration.png!sign" width="500px" alt="常用的异步脉冲产生方法示意图"/>
</div> </div>
@@ -759,9 +757,9 @@ case (var)
异步脉冲序列产生电路(Multi-Vibrators)也被称为毛刺生成器(Glitch Generator),**利用组合反馈环路振荡而不断产生毛刺**。正如前面所述,组合反馈环是同步时序必须避免的.这类基于组合反馈环的 Multi-Vibrator 也会给设计带来稳定性、可靠性等方面的问题,必须避免使用。 异步脉冲序列产生电路(Multi-Vibrators)也被称为毛刺生成器(Glitch Generator),**利用组合反馈环路振荡而不断产生毛刺**。正如前面所述,组合反馈环是同步时序必须避免的.这类基于组合反馈环的 Multi-Vibrator 也会给设计带来稳定性、可靠性等方面的问题,必须避免使用。
同步时序设计脉冲电路的常用方法如[图 5-14](#图5-14) 所示。该设计的脉冲宽度不因器件或设计移植而改变,恒等于时钟周期,而且避免了异步设计的诸多不确定因素,其时序路径便于计算、STA 分析和仿真验证。 同步时序设计脉冲电路的常用方法如[图 5-14](#fig.5-14) 所示。该设计的脉冲宽度不因器件或设计移植而改变,恒等于时钟周期,而且避免了异步设计的诸多不确定因素,其时序路径便于计算、STA 分析和仿真验证。
<a name="图5-14"></a> <a name="fig.5-14"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-140-SynchronousPulseGeneration.png!sign" width="500px" alt="常用的同步脉冲产生方法示意图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-140-SynchronousPulseGeneration.png!sign" width="500px" alt="常用的同步脉冲产生方法示意图"/>
</div> </div>
@@ -793,9 +791,9 @@ end
endmodule endmodule
``` ```
上述描述,由于未指定在条件 `cond_1` 等于 `0` 时的动作,一般情况下会生成 Latch 结构如[图 5-15](#图5-15) 所示。 上述描述,由于未指定在条件 `cond_1` 等于 `0` 时的动作,一般情况下会生成 Latch 结构如[图 5-15](#fig.5-15) 所示。
<a name="图5-15"></a> <a name="fig.5-15"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-150-LatchRTL.png!sign" width="400px" alt="Latch 的 RTL 示意图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-150-LatchRTL.png!sign" width="400px" alt="Latch 的 RTL 示意图"/>
</div> </div>
@@ -815,12 +813,11 @@ endmodule
## 6.1 内部逻辑产生的时钟 ## 6.1 内部逻辑产生的时钟
**如果需要使用内部逻辑产生时钟,必须要在组合逻辑产生的时钟后插入寄存器**,如[图 5-16](#图5-16) 所示。如果直接使用组合逻辑产生的信号作为时钟信号或者异步置位/复位信号,会使设计不稳定。这是因为组合逻辑难免产生毛刺,这些毛刺到达一般数据路径,在经过寄存器采用后一般影响不大,但是如果作为时钟信号或者异步置位/复位信号时,如果毛刺的宽度足以驱动寄存器的时钟端或者异步置位/复位端,则必将产生错误的逻辑操作;即使毛刺的宽度不足以驱动时钟端或异步置位/复位端,也会带来寄存器的不稳定,甚至激发寄存器产生亚稳态。所以对于时钟路径,必须插入寄存器以过滤毛刺。 **如果需要使用内部逻辑产生时钟,必须要在组合逻辑产生的时钟后插入寄存器**,如[图 5-16](#fig.5-16) 所示。如果直接使用组合逻辑产生的信号作为时钟信号或者异步置位/复位信号,会使设计不稳定。这是因为组合逻辑难免产生毛刺,这些毛刺到达一般数据路径,在经过寄存器采用后一般影响不大,但是如果作为时钟信号或者异步置位/复位信号时,如果毛刺的宽度足以驱动寄存器的时钟端或者异步置位/复位端,则必将产生错误的逻辑操作;即使毛刺的宽度不足以驱动时钟端或异步置位/复位端,也会带来寄存器的不稳定,甚至激发寄存器产生亚稳态。所以对于时钟路径,必须插入寄存器以过滤毛刺。
<a name="图5-16"></a> <a name="fig.5-16"></a>
<div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-160-InternalClockDesignwithRegister.png!sign" width="800px" alt="内部时钟设计必须插入寄存器"/> ![内部时钟设计必须插入寄存器](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-160-InternalClockDesignwithRegister.png!sign){width=800px}
</div>
另一方面,组合逻辑产生的时钟还会带来另外一个问题,组合逻辑电路的 Jitter 和 Skew 都比较大,如果时钟产生逻辑的延迟比数据路径的延迟更大,会带来负的 Skew,负的 Skew 同步逻辑设计是灾难性的。所以**使用组合逻辑产生内部时钟仅适用于时钟频率较低、时钟精度要求不高的情况**。另外,**这类时钟应该使用快速布线资源布线,而且需要对组合逻辑电路附加一定的约束条件,以确保时钟质质量**。 另一方面,组合逻辑产生的时钟还会带来另外一个问题,组合逻辑电路的 Jitter 和 Skew 都比较大,如果时钟产生逻辑的延迟比数据路径的延迟更大,会带来负的 Skew,负的 Skew 同步逻辑设计是灾难性的。所以**使用组合逻辑产生内部时钟仅适用于时钟频率较低、时钟精度要求不高的情况**。另外,**这类时钟应该使用快速布线资源布线,而且需要对组合逻辑电路附加一定的约束条件,以确保时钟质质量**。
@@ -840,18 +837,18 @@ endmodule
## 6.4 门控时钟 ## 6.4 门控时钟
门控时钟即 Gated Clock,如[图 5-17](#图5-17) 所示,是 IC 设计的一种常用减少功耗的手段。通过 Gating Logic 的控制,可以控制门后端的所有寄存器不再翻转,从而非常有效地节约功耗。 门控时钟即 Gated Clock,如[图 5-17](#fig.5-17) 所示,是 IC 设计的一种常用减少功耗的手段。通过 Gating Logic 的控制,可以控制门后端的所有寄存器不再翻转,从而非常有效地节约功耗。
<a name="图5-17"></a> <a name="fig.5-17"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-170-GatedClock.png!sign" width="800px" alt="门控时钟"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-170-GatedClock.png!sign" width="800px" alt="门控时钟"/>
</div> </div>
但是 Gated Clock 不是同步时序电路,其 Gating Logic(门控逻辑)会污染 Clock 的质量,通过控制门后会产生毛刺并使时钟的 Skew(偏斜)、Jitter(延时)等指标恶化。正如“[同步设计原则](#0201)” 一节所述,在同步时序电路中,应该尽量不使用 Gated Clock 。 但是 Gated Clock 不是同步时序电路,其 Gating Logic(门控逻辑)会污染 Clock 的质量,通过控制门后会产生毛刺并使时钟的 Skew(偏斜)、Jitter(延时)等指标恶化。正如“[同步设计原则](#0201)” 一节所述,在同步时序电路中,应该尽量不使用 Gated Clock 。
虽然有些材料指出当功耗成为主要矛盾时,可以使用门控时钟改进电路如[图 5-18](#图5-18) 所示的电路完成类似门控时钟的功能,但是笔者仍强烈建议在 PLD 设计中不要使用该图所示的门控时钟改进电路。虽然这个改进电路已经在较大程度上解决了门控电路产生的毛刺,但是请读者注意,这个电路工作的前提是时钟源Clock 的占空比(Duty Cycle)是非常理想的 50%,如果时钟的占空比不能保证 50%,则会产生许多有规律的毛刺信号。另外这个电路还有一个前提,那就是 Clock 与 Enable 信号的不布线 Skew 为 0,否则也会造成宽度为 Skew 的毛刺。 虽然有些材料指出当功耗成为主要矛盾时,可以使用门控时钟改进电路如[图 5-18](#fig.5-18) 所示的电路完成类似门控时钟的功能,但是笔者仍强烈建议在 PLD 设计中不要使用该图所示的门控时钟改进电路。虽然这个改进电路已经在较大程度上解决了门控电路产生的毛刺,但是请读者注意,这个电路工作的前提是时钟源Clock 的占空比(Duty Cycle)是非常理想的 50%,如果时钟的占空比不能保证 50%,则会产生许多有规律的毛刺信号。另外这个电路还有一个前提,那就是 Clock 与 Enable 信号的不布线 Skew 为 0,否则也会造成宽度为 Skew 的毛刺。
<a name="图5-18"></a> <a name="fig.5-18"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-180-ImprovedGatedClock.png!sign" width="800px" alt="门控时钟改进电路"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-180-ImprovedGatedClock.png!sign" width="800px" alt="门控时钟改进电路"/>
</div> </div>
@@ -862,9 +859,9 @@ endmodule
大多数像寄存器这样的同步单元,都支持时钟的同步使能(Synchronous Clock Enable)。需要注意的是,虽然使能无效时这些单元无输出,但是这种方法并不能如 Gated Clock 一样减少功耗。但 Synchronous Clock Enable 却能够非常方便地完成一些逻辑功能,通过使用同步时钟使能端完成某些逻辑功能,有时可以节约芯片面积并提高设计频率。 大多数像寄存器这样的同步单元,都支持时钟的同步使能(Synchronous Clock Enable)。需要注意的是,虽然使能无效时这些单元无输出,但是这种方法并不能如 Gated Clock 一样减少功耗。但 Synchronous Clock Enable 却能够非常方便地完成一些逻辑功能,通过使用同步时钟使能端完成某些逻辑功能,有时可以节约芯片面积并提高设计频率。
同步使能端如[图 5-19](#图5-19) 所示,上半部分是同步使能功能,在目前大多数的器件上可以直接将使能信号连接到芯片的同步使能端实现,如[图 5-19](#图5-19) 的下半部分所示。 同步使能端如[图 5-19](#fig.5-19) 所示,上半部分是同步使能功能,在目前大多数的器件上可以直接将使能信号连接到芯片的同步使能端实现,如[图 5-19](#fig.5-19) 的下半部分所示。
<a name="图5-19"></a> <a name="fig.5-19"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-190-EnableSynchronization.png!sign" width="500px" alt="同步使能端"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-190-EnableSynchronization.png!sign" width="500px" alt="同步使能端"/>
</div> </div>
@@ -911,14 +908,14 @@ endmodule
仔细观察一下可以发现:第一种实现方式需要两个 16 位乘法器,同时平方,然后根据输入补码的符号选择输出结果,其关键在于使用了两个乘法器,选择器在乘法器之后;第二种实现方法,首先根据输入补码的符号,换算为正数,然后平方,其关键在于选择器在乘法器之前,仅使用了一个乘法器,节约了资源。第二种实现方式与第一种实现方式相比节约的资源有两部分:第一部分,节约了一个 16 bit 乘法器;第二部分,后者的选择器是 1 bit 判断 8 bit 输出,而前者是 1 bit 判断 16 bit 输出。 仔细观察一下可以发现:第一种实现方式需要两个 16 位乘法器,同时平方,然后根据输入补码的符号选择输出结果,其关键在于使用了两个乘法器,选择器在乘法器之后;第二种实现方法,首先根据输入补码的符号,换算为正数,然后平方,其关键在于选择器在乘法器之前,仅使用了一个乘法器,节约了资源。第二种实现方式与第一种实现方式相比节约的资源有两部分:第一部分,节约了一个 16 bit 乘法器;第二部分,后者的选择器是 1 bit 判断 8 bit 输出,而前者是 1 bit 判断 16 bit 输出。
两种代码的硬件结构示意图如[图 5-20](#图5-20) 和图5 - 21 所示。 两种代码的硬件结构示意图如[图 5-20](#fig.5-20) 和图5 - 21 所示。
<a name="图5-20"></a> <a name="fig.5-20"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-200-TwoMultipliedwithoutResourceSharing.png!sign" width="" alt="未Resource Sharing,2个乘法器的实现方案"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-200-TwoMultipliedwithoutResourceSharing.png!sign" width="" alt="未Resource Sharing,2个乘法器的实现方案"/>
</div> </div>
<a name="图5-21"></a> <a name="fig.5-21"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-210-OneMultipliedwithResourceSharing.png!sign" width="" alt="Resource Sharing,1个乘法器的实现方案"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-210-OneMultipliedwithResourceSharing.png!sign" width="" alt="Resource Sharing,1个乘法器的实现方案"/>
</div> </div>
@@ -935,9 +932,9 @@ endmodule
## 7.3 逻辑复制 ## 7.3 逻辑复制
逻辑复制是一种通过增加面积而改善时序条件的优化手段。逻辑复制最常使用的场合是调整信号的扇出。如果某个信号需要驱动后级的很多单元,换句话说,也就是其扇出非常大,那么为了增加这个信号的驱动能力,必须插入很多级 Buffer,这样就在一定程度上增加了这个信号路径的延时。这时可以复制生成这个信号的逻辑,使多路同频同相的信号驱动后续电路,平均到每路的扇出变低,不需要加 Buffer 也能满足驱动能力的要求,这样就节约了该信号的路径时延。用逻辑复制改善扇头电路如[图 5-22](#图5-22) 所示。 逻辑复制是一种通过增加面积而改善时序条件的优化手段。逻辑复制最常使用的场合是调整信号的扇出。如果某个信号需要驱动后级的很多单元,换句话说,也就是其扇出非常大,那么为了增加这个信号的驱动能力,必须插入很多级 Buffer,这样就在一定程度上增加了这个信号路径的延时。这时可以复制生成这个信号的逻辑,使多路同频同相的信号驱动后续电路,平均到每路的扇出变低,不需要加 Buffer 也能满足驱动能力的要求,这样就节约了该信号的路径时延。用逻辑复制改善扇头电路如[图 5-22](#fig.5-22) 所示。
<a name="图5-22"></a> <a name="fig.5-22"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-220-DuplicationtoImproveFanOut.png!sign" width="" alt="用逻辑复制改善扇出"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-220-DuplicationtoImproveFanOut.png!sign" width="" alt="用逻辑复制改善扇出"/>
</div> </div>
@@ -950,9 +947,9 @@ endmodule
首先看下面的一个加法器资源共享的例子。 首先看下面的一个加法器资源共享的例子。
这个例子和前面乘法器的例子非常相似,只是将平方器换成了加法器。实现这个加法器也有两种代码写法,对应两种不同的硬件结构,资源共享如[图 5-23](#图5-23) 所示。 这个例子和前面乘法器的例子非常相似,只是将平方器换成了加法器。实现这个加法器也有两种代码写法,对应两种不同的硬件结构,资源共享如[图 5-23](#fig.5-23) 所示。
<a name="图5-23"></a> <a name="fig.5-23"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-230-ResourceSharingExample.png!sign" width="700px" alt="资源共享示例"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-230-ResourceSharingExample.png!sign" width="700px" alt="资源共享示例"/>
</div> </div>
@@ -1034,7 +1031,7 @@ assign out = ((({8{late}} | in0) + in1) == in2) & en;
endmodule endmodule
``` ```
<a name="图5-24"></a> <a name="fig.5-24"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-240-BeforeShannonExtension.png!sign" width="" alt="未使用香农扩展前的逻辑表达式对应的RTL视图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-240-BeforeShannonExtension.png!sign" width="" alt="未使用香农扩展前的逻辑表达式对应的RTL视图"/>
</div> </div>
@@ -1060,7 +1057,7 @@ assign out = (late) ? late_eq_1 : late_eq_0;
endmodule endmodule
``` ```
<a name="图5-25"></a> <a name="fig.5-25"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-250-AfterShannonExtension.png!sign" width="" alt="香农扩展后的逻辑表达式对应的RTL视图"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-250-AfterShannonExtension.png!sign" width="" alt="香农扩展后的逻辑表达式对应的RTL视图"/>
</div> </div>
@@ -1073,7 +1070,7 @@ endmodule
# 8. 小结 # 8. 小结
[图 5-26](#图5-26) 罗列了 RTL 编码的全面设计目标,它们是: [图 5-26](#fig.5-26) 罗列了 RTL 编码的全面设计目标,它们是:
- 时序(Timing):要求设计满足预期的时序约束条件,满足预期频率要求。 - 时序(Timing):要求设计满足预期的时序约束条件,满足预期频率要求。
- 面积(Areag):要求设计所消耗的资源满足所规划的面积要求。 - 面积(Areag):要求设计所消耗的资源满足所规划的面积要求。
@@ -1084,7 +1081,7 @@ endmodule
- 功耗(Powerg):要求设计的最大功耗在规定范围之内。 - 功耗(Powerg):要求设计的最大功耗在规定范围之内。
- Vendor Policies(原厂的要求):这里主要指 EDA 工具的优化测量和 PLD 或 ASIC 厂方的设计规格与软硬件需求。 - Vendor Policies(原厂的要求):这里主要指 EDA 工具的优化测量和 PLD 或 ASIC 厂方的设计规格与软硬件需求。
<a name="图5-26"></a> <a name="fig.5-26"></a>
<div align="center"> <div align="center">
<img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-260-GoalsofRTLCode.png!sign" width="600px" alt="RTL代码的设计目标"/> <img src="https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-12-05-josh-verilog-part-5/2020-12-05-josh-verilog-part-5-260-GoalsofRTLCode.png!sign" width="600px" alt="RTL代码的设计目标"/>
</div> </div>
+8 -8
View File
@@ -179,7 +179,7 @@ y^T=\left[\begin{matrix}h_1&h_2&h_3&\cdots&h_{m-1}&h_m\\\end{matrix}\right]_{1\t
# 7. 单位取样响应 $h\left(n\right)$ 和系统频率响应 $H\left(e^{j\omega}\right)$ 的关系 # 7. 单位取样响应 $h\left(n\right)$ 和系统频率响应 $H\left(e^{j\omega}\right)$ 的关系
## 7.1 通过单位取样响应 $h\left(n\right)$ 从时域表征系统 ## 7.1. 通过单位取样响应 $h\left(n\right)$ 从时域表征系统
&emsp;&emsp;当系统的输入为单位取样序列 $\delta\left(n\right)$ 时的输出序列称为系统的单位取样响应 $h\left(n\right)$,记 &emsp;&emsp;当系统的输入为单位取样序列 $\delta\left(n\right)$ 时的输出序列称为系统的单位取样响应 $h\left(n\right)$,记
@@ -208,11 +208,11 @@ $$\begin{align}
故任何离散时间线性时不变系统,可以通过其单位取样响应 $h\left(n\right)$ 来**完全表征**。 故任何离散时间线性时不变系统,可以通过其单位取样响应 $h\left(n\right)$ 来**完全表征**。
## 7.2 通过系统频率响应 $H\left(e^{j\omega}\right)$ 从频域表征系统 ## 7.2. 通过系统频率响应 $H\left(e^{j\omega}\right)$ 从频域表征系统
&emsp;&emsp;离散时间系统的频率响应是由系统的结构参数决定的。当输入频率为 $\omega$ 的复指数序列时,其输出必仍为同一频率的、乘上因子 $H\left(e^{j\omega}\right)$ 的复指数序列。随着输入频率 $\omega$ 的不同,$H\left(e^{j\omega}\right)$ 的值也不同。因此系统的频率响应 $H\left(e^{j\omega}\right)$ **描述了系统对不同频率的复指数序列的不同传输能力**。 &emsp;&emsp;离散时间系统的频率响应是由系统的结构参数决定的。当输入频率为 $\omega$ 的复指数序列时,其输出必仍为同一频率的、乘上因子 $H\left(e^{j\omega}\right)$ 的复指数序列。随着输入频率 $\omega$ 的不同,$H\left(e^{j\omega}\right)$ 的值也不同。因此系统的频率响应 $H\left(e^{j\omega}\right)$ **描述了系统对不同频率的复指数序列的不同传输能力**。
## 7.3 单位取样响应 $h\left(n\right)$ 和系统频率响应 $H\left(e^{j\omega}\right)$ 的关系 ## 7.3. 单位取样响应 $h\left(n\right)$ 和系统频率响应 $H\left(e^{j\omega}\right)$ 的关系
&emsp;&emsp;令单位取样响应为 $h\left(n\right)$ 的线性时不变系统的输入 $x\left(n\right)=Ae^{j\left(\omega n+\varphi_x\right)}=Ae^{j\omega n}e^{j\varphi_x}$,则输出 &emsp;&emsp;令单位取样响应为 $h\left(n\right)$ 的线性时不变系统的输入 $x\left(n\right)=Ae^{j\left(\omega n+\varphi_x\right)}=Ae^{j\omega n}e^{j\varphi_x}$,则输出
@@ -230,15 +230,15 @@ H\left(e^{j\omega}\right)=\sum_{k=-\infty}^{\infty}{h\left(k\right)e^{-j\omega k
# 8. 共轭对称与共轭反对称 # 8. 共轭对称与共轭反对称
## 8.1 共轭对称 ## 8.1. 共轭对称
&emsp;&emsp;若序列 $x_e\left(n\right)=x_e^\ast(-n)$,则称 $x_e\left(n\right)$ 是共轭对称的序列,对实序列,又称为偶序列。 &emsp;&emsp;若序列 $x_e\left(n\right)=x_e^\ast(-n)$,则称 $x_e\left(n\right)$ 是共轭对称的序列,对实序列,又称为偶序列。
## 8.2 共轭反对称 ## 8.2. 共轭反对称
&emsp;&emsp;若序列 $x_o\left(n\right)=-x_o^\ast(-n)$,则称 $x_o\left(n\right)$ 是共轭反对称的序列,对实序列,又称为奇序列。 &emsp;&emsp;若序列 $x_o\left(n\right)=-x_o^\ast(-n)$,则称 $x_o\left(n\right)$ 是共轭反对称的序列,对实序列,又称为奇序列。
## 8.3 序列的对称性 ## 8.3. 序列的对称性
&emsp;&emsp;若 &emsp;&emsp;若
@@ -252,7 +252,7 @@ $$\begin{equation}
x\left(n\right)=x_e\left(n\right)+x_o\left(n\right) x\left(n\right)=x_e\left(n\right)+x_o\left(n\right)
\end{equation}$$ \end{equation}$$
## 8.4 傅里叶变换的共轭对称性 ## 8.4. 傅里叶变换的共轭对称性
$$\begin{equation} $$\begin{equation}
X\left(e^{j\omega}\right)=X_e\left(e^{j\omega}\right)+X_o\left(e^{j\omega}\right) X\left(e^{j\omega}\right)=X_e\left(e^{j\omega}\right)+X_o\left(e^{j\omega}\right)
@@ -266,7 +266,7 @@ X_e\left(e^{j\omega}\right)=\frac{1}{2}\left[X\left(e^{j\omega}\right)+X^\ast\le
![傅里叶变换、拉氏变换和 $z$ 变换的关系](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-14-josh-dsp-part-1/2023-04-14-josh-dsp-part-1-010-RelationshipBetweenTransform.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/80/dissolve/20/gravity/southeast/dx/5/dy/5){width=600px} ![傅里叶变换、拉氏变换和 $z$ 变换的关系](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-14-josh-dsp-part-1/2023-04-14-josh-dsp-part-1-010-RelationshipBetweenTransform.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/80/dissolve/20/gravity/southeast/dx/5/dy/5){width=600px}
# 参考文献 # 10. 参考文献
王世一. *数字信号处理, 修订版.* 北京理工大学出版社, 1997. 王世一. *数字信号处理, 修订版.* 北京理工大学出版社, 1997.
+125
View File
@@ -0,0 +1,125 @@
---
title: Josh 的学习笔记之数字信号处理(Part 5——部分 FFT 蝶形图)
mathjax: true
comments: true
copyright: true
toc:
enable: true
number: false
wrap: ture
expand_all: false
max_depth: 4
abbrlink: 14fc3f1c
date: 2023-04-15 22:20:54
tags:
- 数字信号和处理
- DSP
- 蝶形图
- FFT
- 基2按时间抽取
- 基2按频率抽取
- 基4
- 分裂基FFT
categories:
- [Josh 的学习笔记, 数字信号处理]
---
# 1. 4 点 FFT
## 1.1. 基-2 按时间抽取 FFT(4-point radix-2 DIT-FFT)
### 1.1.1. 比特位反序输入、自然顺序输出
![4-point radix-2 DIT-FFT 比特位反序输入、自然顺序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-010-4PointRadix2DITFFTIRON.png!sign){width=400px}
<!-- more -->
### 1.1.2. 自然顺序输入、比特位反序输出
![4-point radix-2 DIT-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-020-4PointRadix2DITFFTINOR.png!sign){width=400px}
## 1.2. 基-2 按频率抽取 FFT(4-point radix-2 DIF-FFT)
### 1.2.1. 比特位反序输入、自然顺序输出
![4-point radix-2 DIF-FFT 比特位反序输入、自然顺序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-030-4PointRadix2DIFFFTIRON.png!sign){width=400px}
### 1.2.2. 自然顺序输入、比特位反序输出
![4-point radix-2 DIF-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-040-4PointRadix2DIFFFTINOR.png!sign){width=400px}
## 1.3. 分裂基按频率抽取 FFT(4-point split radix-2/4 DIF-FFT)
![4-point split radix-2/4 DIF-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-050-4PointSplitRadix24DIFFFT.png!sign){width=400px}
## 1.4. 基-4 按频率抽取 FFT(4-point radix-4 DIF-FFT)
![4-point radix-4 DIF-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-060-4PointRadix4DIFFFT.png!sign){width=400px}
# 2. 8 点 FFT
## 2.1. 基-2 按时间抽取 FFT(8-point radix-2 DIT-FFT)
### 2.1.1. 比特位反序输入、自然顺序输出
![8-point radix-2 DIT-FFT 比特位反序输入、自然顺序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-070-8PointRadix2DITFFTIRON.png!sign){width=600px}
### 2.1.2. 自然顺序输入、比特位反序输出
![8-point radix-2 DIT-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-080-8PointRadix2DITFFTINOR.png!sign){width=600px}
## 2.2. 基-2 按频率抽取 FFT(8-point radix-2 DIF-FFT)
### 2.2.1. 比特位反序输入、自然顺序输出
![8-point radix-2 DIF-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-090-8PointRadix2DIFFFTIRON.png!sign){width=600px}
### 2.2.2. 2自然顺序输入、比特位反序输出
![8-point radix-2 DIF-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-100-8PointRadix2DIFFFTINOR.png!sign){width=600px}
## 2.3. 分裂基按频率抽取 FFT(8-point split radix-2/4 DIF-FFT)
![8-point split radix-2/4 DIF-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-110-8PointSplitRadix24DIFFFT.png!sign){width=600px}
# 3. 16 点 FFT
## 3.1. 基-2 按时间抽取 FFT(16-point radix-2 DIT-FFT)
### 3.1.1. 比特位反序输入、自然顺序输出
![16-point radix-2 DIT-FFT 比特位反序输入、自然顺序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-120-16PointRadix2DITFFTIRON.png!sign){width=1000px}
### 3.1.2. 自然顺序输入、比特位反序输出
![16-point radix-2 DIT-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-130-16PointRadix2DITFFTINOR.png!sign){width=1000px}
## 3.2. 基-2 按频率抽取 FFT(16-point radix-2 DIF-FFT)
### 3.2.1. 比特位反序输入、自然顺序输出
![16-point radix-2 DIF-FFT 比特位反序输入、自然顺序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-140-16PointRadix2DIFFFTIRON.png!sign){width=1000px}
### 3.2.2. 自然顺序输入、比特位反序输出
![16-point radix-2 DIF-FFT 自然顺序输入、比特位反序输出](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-150-16PointRadix2DIFFFTINOR.png!sign){width=1000px}
## 3.3. 分裂基按时间抽取 FFT(16-point split radix-2/4 DIT-FFT)
![16-point split radix-2 DIT-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-160-16PointSplitRadix24DITFFT.png!sign){width=1000px}
## 3.4. 分裂基按频率抽取 FFT(16-point split radix-2/4 DIF-FFT)
![16-point split radix-2 DIF-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-170-16PointSplitRadix24DIFFFT.png!sign){width=1000px}
## 3.5. 基-4 按频率抽取 FFT(16-point radix-4 DIF-FFT)
![16-point radix-4 DIF-FFT](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-180-16PointRadix4DITFFT.png!sign){width=1000px}
可以定义如下基-4 DIF-FFT 简化蝶形来简化流图表示的复杂程度
![基-4 DIF-FFT 简化蝶形](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-5/2023-04-15-josh-dsp-part-5-190-SimplifiedRadix4Butterfly.png!sign){width=800px}
# 参考文献
王世一. *数字信号处理, 修订版.* 北京理工大学出版社, 1997.
+398
View File
@@ -0,0 +1,398 @@
---
title: Josh 的学习笔记之数字信号处理(Part 6——数字滤波器的基本结构)
mathjax: true
comments: true
copyright: true
toc:
enable: true
number: false
wrap: ture
expand_all: false
max_depth: 4
abbrlink: 8df56ea6
date: 2023-04-15 23:00:09
tags:
- 数字信号和处理
- DSP
- IIR
- FIR
- 直接型
- 级联型
- 并联型
- 梳状滤波器
- 谐振柜
- 频率取样
- 线性相位
categories:
- [Josh 的学习笔记, 数字信号处理]
---
# 1. 基本运算单元的结构图表示
| 基本运算单元 | 方框图 | 流图 |
| :--: | :----: | :----: |
单位延时 | ![单位延时方框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-010-UnitDelayBlock.png!sign){width=150px} | ![单位延时流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-020-UnitDelayFlow.png!sign){width=150px}
常数乘法器 | ![常数乘法器方框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-030-MultiplierBlock.png!sign){width=150px} | ![常数乘法器流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-040-MultiplierFlow.png!sign){width=150px}
加法器 | ![加法器方框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-050-AdderBlock.png!sign){width=150px} | ![加法器流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-060-AdderFlow.png!sign){width=150px}
<!-- more -->
# 2. IIR(Infinite Impulse Response)数字滤波器的基本结构
&emsp;&emsp;IIR 数字滤波器的结构特点
$$\begin{align}
&系统函数:H\left(z\right)=\frac{Y\left(z\right)}{X\left(z\right)}=\frac{\displaystyle\sum_{k=0}^{M}{b_kz^{-k}}}{1-\displaystyle\sum_{k=1}^{N}{a_kz^{-k}}}\\
&差分方程:y\left(n\right)=\sum_{k=1}^{N}{a_ky\left(n-k\right)}+\sum_{k=0}^{M}{b_kx\left(n-k\right)}
\end{align}$$
- 系统的单位脉冲响应 $h\left(n\right)$ 无限长;
- 系统函数 $H\left(z\right)$ 在有限 $z$ 平面($0<\left|z\right|<\infty$)上有极点存在;
- 存在输出到输入的反馈,递归型结构:直接Ⅰ、Ⅱ型,级、并联型。
## 2.1. 直接Ⅰ型
&emsp;&emsp;将系统函数写为
$$\begin{equation}
H\left( z \right) =\frac{Y\left( z \right)}{X\left( z \right)}=\frac{\displaystyle\sum_{k=0}^M{b_kz^{-k}}}{1-\displaystyle\sum_{k=1}^N{a_kz^{-k}}}=\underset{H_1\left( z \right)}{\underbrace{\sum_{k=0}^M{b_kz^{-k}}}}\times \underset{H_2\left( z \right)}{\underbrace{\left( 1-\displaystyle\sum_{k=1}^N{a_kz^{-k}} \right) ^{-1}}}
\end{equation}$$
则系统框图可表示为
![直接Ⅰ型系统框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-070-Direct1SystemBlock.png!sign){width=500px}
由此可得系统的两级输入输出的微分方程
$$\begin{equation}
H_1\left(z\right)=\sum_{k=0}^{M}{b_kz^{-k}}=\frac{U\left(z\right)}{X\left(z\right)}\Longrightarrow u\left(n\right)=\sum_{k=0}^{M}{b_kx\left(n-k\right)}
\end{equation}$$
$$\begin{equation}
H_2\left(z\right)=\left(1-\sum_{k=1}^{N}{a_kz^{-k}}\right)^{-1}=\frac{Y\left(z\right)}{U\left(z\right)}\Longrightarrow y\left(n\right)=u\left(n\right)+\sum_{k=1}^{M}{a_ky\left(n-k\right)}
\end{equation}$$
由微分方程可得直接Ⅰ型 IIR 滤波器的流图
![直接Ⅰ型 IIR 滤波器的流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-080-Direct1IIRFlow.png!sign){width=500px}
## 2.2. 直接Ⅱ型(典范型)
&emsp;&emsp;系统函数仍为
$$\begin{equation}
H\left( z \right) =\frac{Y\left( z \right)}{X\left( z \right)}=\frac{\displaystyle\sum_{k=0}^M{b_kz^{-k}}}{1-\displaystyle\sum_{k=1}^N{a_kz^{-k}}}=\underset{H_1\left( z \right)}{\underbrace{\sum_{k=0}^M{b_kz^{-k}}}}\times \underset{H_2\left( z \right)}{\underbrace{\left( 1-\displaystyle\sum_{k=1}^N{a_kz^{-k}} \right) ^{-1}}}
\end{equation}$$
将系统框图变为
![直接Ⅱ型系统框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-090-Direct2SystemBlock.png!sign){width=500px}
由此可得系统的两级输入输出的微分方程
$$\begin{equation}
H_2\left(z\right)=\left(1-\sum_{k=1}^{N}{a_kz^{-k}}\right)^{-1}=\frac{W\left(z\right)}{X\left(z\right)}\Longrightarrow w\left(n\right)=x\left(n\right)+\sum_{k=1}^{M}{a_kx\left(n-k\right)}
\end{equation}$$
$$\begin{equation}
H_1\left(z\right)=\sum_{k=0}^{M}{b_kz^{-k}}=\frac{Y\left(z\right)}{W\left(z\right)}\Longrightarrow y\left(n\right)=\sum_{k=0}^{M}{b_kw\left(n-k\right)}
\end{equation}$$
由微分方程可得直接Ⅱ型 IIR 滤波器的流图
![直接Ⅱ型 IIR 滤波器的流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-100-Direct2IIRFlow.png!sign){width=400px}
- 直接型 IIR 滤波器的结构特点
<table>
<tr>
<td></td>
<th>直接Ⅰ型</th>
<th>直接Ⅱ型</th>
</tr>
<tr>
<th rowspan="2">不同点</th>
<td>两个网络级联:第一个横向结构 <i>M</i> 节延时网络实现零点,第二个有反馈的 <i>N</i> 节延时网络实现极点。</td>
<td>两个网络级联:第一个有反馈的 <i>N</i> 节延时网络实现极点,第二个横向结构 <i>M</i> 节延时网络实现零点。</td>
</tr>
<tr>
<td>延时单元数:<i>N</i> + <i>M</i><br>乘法器数:<i>N</i> + <i>M</i> + 1<br>加法器数:1
</td>
<td>延时单元数:max{<i>N</i> , <i>M</i>}<br>乘法器数:<i>N</i> + <i>M</i> + 1<br>加法器数:2
</td>
</tr>
<tr>
<th rowspan="3">相同点</th>
<td colspan="2">系数 <i>a<sub>k</sub> , b<sub>k</sub></i> 不能直接决定单个零极点,因而不能很好地进行滤波器性能控制。</td>
</tr>
<tr>
<td colspan="2">极点对系数(零极点的位置)变化过于灵敏,从而使系统频率响应对系数变化过于灵敏,也就是对有限精度(有限字长)运算过于灵敏,容易出现不稳定或产生较大误差。</td>
</tr>
<tr>
<td colspan="2">计算的累积误差较大</td>
</tr>
</table>
## 2.3. 级联型
&emsp;&emsp;将系统函数按零极点因式分解,可表示为
$$\begin{equation}
H\left(z\right)=\frac{\displaystyle\sum_{k=0}^{M}{b_kz^{-k}}}{1-\displaystyle\sum_{k=1}^{N}{a_kz^{-k}}}=A\frac{\displaystyle\prod_{k=1}^{M_1}\left(1-p_kz^{-1}\right)\displaystyle\prod_{k=1}^{M_2}\left(1-q_kz^{-1}\right)\left(1-q_k^\ast z^{-1}\right)}{\displaystyle\prod_{k=1}^{N_1}\left(1-c_kz^{-1}\right)\displaystyle\prod_{k=1}^{N_2}\left(1-d_kz^{-1}\right)\left(1-d_k^\ast z^{-1}\right)}
\end{equation}$$
其中 $A$ 为常数,$M=M_1+2M_2$,$N=N_1+2N_2$,$p_k,c_k$分别为实数零、极点,$q_k,q_k^\ast$ 和 $d_k,d_k^\ast$ 分别为复共轭零、极点。将共轭成对的复数零、极点合并为为实系数二阶多项式,得
$$\begin{equation}
H\left(z\right)=A\prod_{k=1}^{L}\left[\frac{1+\beta_{1k}z^{-1}+\beta_{2k}z^{-2}}{1-\alpha_{1k}z^{-1}-\alpha_{2k}z^{-2}}\right]=A\prod_{k=1}^{L}{H_k\left(z\right)},\ \ L=\left\lfloor\frac{N+1}{2}\right\rfloor
\end{equation}$$
则系统框图可表示为
![级联型 IIR 滤波器的系统框图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-110-CascadingIIRBlock.png!sign){width=700px}
进一步可得级联型 IIR 滤波器的流图
![级联型 IIR 滤波器的流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-120-CascadingIIRFlow.png!sign){width=700px}
- 级联型 IIR 滤波器的结构特点
- 分别调整系数 $\beta_{1k},\beta_{2k}$、$\alpha_{1k},\alpha_{2k}$,能单独调整滤波器的第k对零、极点,而不影响其它零、极点,由此,可以方便的调整滤波器的频响性能。
- 运算的累积误差较小、所需存储单元少,可实现时分复用、组合方式多等。
## 2.4. 并联型
&emsp;&emsp;将系统函数展开成部分分式的形式,可表示为
$$\begin{equation}
H\left(z\right)=\sum_{k=0}^{M-N}{G_kz^{-k}}+\sum_{k=1}^{N_1}\frac{A_k}{1-g_kz^{-1}}+\sum_{k=1}^{N_2}\frac{\beta_{0k}+\beta_{1k}z^{-1}}{1-\alpha_{1k}z^{-1}-\alpha_{2k}z^{-2}}
\end{equation}$$
其中 $G_k,A_k,g_k,\beta_{0k},\beta_{1k},\alpha_{1k},\alpha_{2k}$ 均为实数。且当 $M<N$ 时,上式不包含 $\displaystyle\sum_{k=0}^{M-N}{G_kz^{-k}}$ 项;当 $M=N$ 时,上式变为
$$\begin{equation}
H\left(z\right)=G_0+\sum_{k=1}^{N_1}\frac{A_k}{1-g_kz^{-1}}+\sum_{k=1}^{N_2}\frac{\beta_{0k}+\beta_{1k}z^{-1}}{1-\alpha_{1k}z^{-1}-\alpha_{2k}z^{-2}}\ (M=N)
\end{equation}$$
可得 $M=N$ 时并联型 IIR 滤波器的系统框图和流图
![并联型 IIR 滤波器的系统框图和流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-130-ParallelIIRBlockFlow.png!sign){width=1000px}
- 并联型IIR滤波器的结构特点
- 通过调整系数 $\alpha_{1k},\alpha_{2k}$,可单独调整一对极点位置,但不能单独调整零点位置。
- 各并联基本节的误差互相不影响,故运算累积误差小。
- 可进行并行运算,运算速度高。
## 2.5. 转置定理
&emsp;&emsp;对于单输入单输出系统,将原网络中所有支路方向倒转,并将输入 $x\left(n\right)$ 和输出 $y\left(n\right)$ 相互交换,则倒转后的结构与原结构的系统函数 $H(z)$ 向相同。
# 3. FIR(Finite Impulse Response)数字滤波器的基本结构
&emsp;&emsp;FIR 数字滤波器的结构特点
$$\begin{align}
&系统函数:H\left(z\right)=\frac{Y\left(z\right)}{X\left(z\right)}=\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}\\
&差分方程:y\left(n\right)=\sum_{k=0}^{N-1}h\left(k\right)x\left(n-k\right)=h\left(n\right)\ast x\left(n\right)
\end{align}$$
- 系统的单位脉冲响应 $h(n)$ 有限长($N$ 点);
- 系统函数 $H\left(z\right)$ 在 $\left|z\right|>0$ 处收敛,有限 $z$ 平面只有零点,全部极点在 $z=0$ 处(因果系统);
- 没有输出到输入的反馈,一般为非递归型结构。
## 3.1. 直接型(卷积型、横截型)
&emsp;&emsp;由 FIR 数字滤波器的差分方程
$$\begin{equation}
y\left(n\right)=\sum_{k=0}^{N=1}h\left(k\right)x\left(n-k\right)=h\left(n\right)\ast x\left(n\right)
\end{equation}$$
可得直接型 FIR 滤波器的流图
![直接型 FIR 滤波器的流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-140-Direct1FIRFlow.png!sign){width=600px}
## 3.2. 级联型
&emsp;&emsp;当需要灵活方便地控制滤波器的传输零点时,可将 $H\left(z\right)$ 分解成实系数二阶因式的乘积形式,表示为
$$\begin{equation}
H\left(z\right)=\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}=\sum_{k=1}^{\left\lfloor\frac{N}{2}\right\rfloor}\left(\beta_{0k}+\beta_{1k}z^{-1}+\beta_{2k}z^{-2}\right)
\end{equation}$$
可得级联型 FIR 滤波器的流图
![级联型 FIR 滤波器的流图](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-150-CascadingFIRFlow.png!sign){width=600px}
- 级联型FIR滤波器的结构特点:
- 由于这种结构所需的系数比直接型多,所需乘法运算也比直接型多,很少用。
- 由于这种结构的每一节控制一对零点,因而通常仅在需要控制传输零点时用。
## 3.3. 频率取样型
&emsp;&emsp;系统函数 $H\left(z\right)$ 在单位圆上作 $N$ 等分取样的取样值就是 $h\left(n\right)$ 的 DFT $H\left(k\right)$。由[内插公式](https://josh-gao.blog.csdn.net/article/details/106087154#5__319),用 $H\left(k\right)$ 恢复 $H\left(z\right)$ 的内插公式为
$$\begin{equation}
H\left( z \right) =\underset{H_c\left( z \right)}{\underbrace{\left( 1-z^{-N} \right) }}\frac{1}{N}\sum_{k=0}^{N-1}{\underset{H_k\left( z \right)}{\underbrace{\frac{H\left( k \right)}{1-W_{N}^{-k}z^{-1}}}}}
\end{equation}$$
可见频率取样型 FIR 系统可用子 FIR 系统 $H_c\left(z\right)=1-z^{-N}$ 和子 IIR 系统 $\displaystyle\sum_{k=0}^{N-1}{H_k\left(z\right)}$ 表示。
### 3.3.1. 梳状滤波器 $H_c\left(z\right)$
![梳状滤波器](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-160-CombFilter.png!sign){width=800px}
&emsp;&emsp;子 FIR 系统 $H_c\left(z\right)=1-z^{-N}$ 是一个由 $N$ 节延迟单元组成的梳状滤波器,在单位圆上有 $N$ 个等分零点。可将梳状滤波器的频率响应写为
$$\begin{equation}
\begin{aligned}
H_c\left(e^{j\omega}\right)&=\left.H_c\left(z\right)\right|_{z=e^{j\omega}}=1-e^{-j\omega N}\\
&=e^{-j\frac{\omega N}{2}}\left(e^{j\frac{\omega N}{2}}-e^{-j\frac{\omega N}{2}}\right)=2je^{-j\frac{\omega N}{2}}\sin{\frac{\omega N}{2}}
\end{aligned}
\end{equation}$$
其幅频特性
$$\begin{equation}
\left|H_c\left(e^{j\omega}\right)\right|=2\left|\sin{\frac{\omega N}{2}}\right|
\end{equation}$$
### 3.3.2. 谐振柜 $\displaystyle\sum_{k=0}^{N-1}{H_k\left(z\right)}$
&emsp;&emsp;子 IIR 系统 $\displaystyle\sum_{k=0}^{N-1}{H_k\left(z\right)}$ 是由 $N$ 个谐振器组成的谐振“柜”。每一个谐振器 $H_k\left(z\right)=\dfrac{H\left(k\right)}{1-W_N^{-k}z^{-1}}$ 都是一个一阶网络,在单位圆上有一极点 $z_k=W_N^{-k}=e^{j\frac{2\pi}{N}k}$,因此谐振器对频率为 $\omega=\dfrac{2\pi}{N}k$ 的响应是 $\infty$,是一个谐振频率为 $\dfrac{2\pi}{N}k$ 的无耗谐振器。并联谐振柜的极点正好各自抵消一个梳状滤波器的零点,从而使系统在频率点 $\omega=\dfrac{2\pi}{N}k$ 的响应就是 $H\left(k\right)$。
&emsp;&emsp;将梳状滤波器和谐振柜级联可得到频率取样型 FIR 滤波器的结构
![频率取样型 FIR 滤波器的结构](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-170-FrequencySampling.png!sign){width=600px}
- 频率取样型 FIR 滤波器的结构特点:
- (优点)调整 $H\left(k\right)$ 就可以有效地调整频响特性(在频率 $\omega_k=\dfrac{2\pi}{N}k$ 处的响应即为 $H\left(k\right)$)。
- (优点)若 $h\left(n\right)$ 长度相同,则除了各支路增益 $H\left(k\right)$ 外网络结构完全相同,便于标准化、模块化。
- (缺点)有限字长效应可能导致零极点不能完全对消(梳状滤波器的零点由延时器形成,并不受量化误差影响),导致系统不稳定。
- (缺点)系数多为复数,增加了复数乘法和存储量。
### 3.3.3. 修正频率取样型
&emsp;&emsp;由于谐振器的所有极点均在单位圆上,当系数量化时,这些极点会移动,因此系统的稳定裕度为零,实际上是不能使用的。因此将所有谐振器的极点设置在半径 $r$ 小于 $1$ 又接近于 $1$ 的圆周上,为了使得子 FIR 系统的零点需要和这些极点重合以相互抵消,故梳状滤波器的零点也移到半径r的圆周上。修正后的系统函数为
$$\begin{equation}
H\left(z\right)=\frac{1-r^Nz^{-N}}{N}\sum_{k=0}^{N-1}\frac{H_r\left(k\right)}{1-rW_N^{-k}z^{-1}}
\end{equation}$$
此时谐振柜的第 $k$ 个谐振器的极点变为 $rW_N^{-k}$,其中 $H_r\left(k\right)$ 是修正点的取样值,因为 $r\approx1$,则
$$\begin{equation}
H_r\left(k\right)=\left.H\left(z\right)\right|_{z=rW_N^{-k}}=H\left(rW_N^{-k}\right)\approx H\left(W_N^{-k}\right)=H\left(k\right)
\end{equation}$$
则修正后的系统函数可近似为
$$\begin{equation}
H\left(z\right)=\frac{1-r^Nz^{-N}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{1-rW_N^{-k}z^{-1}}
\end{equation}$$
为了使系数是实数,将共轭根合并,这些共轭根在半径为r的圆周上以实轴对称分布。由对称性 $z_{N-k}=z_k^\ast,W_N^{-\left(N-k\right)}=W_N^k=\left(W_N^{-k}\right)^\ast$,将第 $k$ 个和第 $N-k$ 个谐振器合并成一个实系数的二阶网络
$$\begin{equation}
\begin{aligned}
H_k\left(z\right)&\approx\frac{H\left(k\right)}{1-rW_N^{-k}z^{-1}}+\frac{H\left(N-k\right)}{1-rW_N^{-\left(N-k\right)}z^{-1}}=\frac{H\left(k\right)}{1-rW_N^{-k}z^{-1}}+\frac{H^\ast\left(k\right)}{1-r\left(W_N^{-k}\right)^\ast z^{-1}}\\
&=\frac{H\left(k\right)+H^\ast\left(k\right)-H\left(k\right)rW_N^kz^{-1}-H^\ast\left(k\right)rW_N^{-k}z^{-1}}{1-z^{-1}\left(W_N^{-k}+W_N^k\right)+r^2z^{-2}}\\
&=\frac{\beta_{0k}+\beta_{1k}z^{-1}}{1-z^{-1}2r\cos{\left(\frac{2\pi}{N}k\right)+r^2z^{-2}}}
\end{aligned}
\end{equation}$$
其中
$$\begin{equation}
\begin{cases}
\beta_{0k}=2\Re{\left[H\left(k\right)\right]}\\
\beta_{1k}=-2r\Re{\left[H\left(k\right)W_N^k\right]}
\end{cases},\ \
\begin{cases}
\begin{aligned}
k&=1,2,\cdots,\frac{N-1}{2},\ \ &k为奇数\\
k&=1,2,\cdots,\frac{N}{2},&k为偶数
\end{aligned}
\end{cases}
\end{equation}$$
![修正频率取样型](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-180-ModifiedFrequencySampling.png!sign){width=800px}
&emsp;&emsp;当 $N$ 为偶数时,除了共轭根,还有一对实数根,分别位于 $k=0,\dfrac{N}{2}$ 两点,则此时系统函数为
$$\begin{equation}
H\left(z\right)=\left(1-r^Nz^{-N}\right)\cdot\frac{1}{N}\cdot\left[H_0\left(z\right)+H_\frac{N}{2}\left(z\right)+\sum_{k=1}^{\frac{N}{2}-1}{H_k\left(z\right)}\right]
\end{equation}$$
&emsp;&emsp;当 $N$ 为奇数时,除了共轭根,只有一个实数根,位于 $k=0$ 处,则此时系统函数为
$$\begin{equation}
H\left(z\right)=\left(1-r^Nz^{-N}\right)\cdot\frac{1}{N}\cdot\left[H_0\left(z\right)+\sum_{k=1}^{\frac{N-1}{2}}{H_k\left(z\right)}\right]
\end{equation}$$
在上两式中
$$\begin{equation}
H_0\left(z\right)=\frac{H\left(0\right)}{1-rz^{-1}},\ \ H_\frac{N}{2}\left(z\right)=\frac{H\left(\dfrac{N}{2}\right)}{1+rz^{-1}}
\end{equation}$$
则修正频率取样型 FIR 滤波器的结构为
![修正频率取样型 FIR 滤波器的结构](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-190-ModifiedFrequencySamplingFIRStructure.png!sign){width=600px}
- 修正频率取样型 FIR 滤波器的结构特点:
- 结构有递归部分——谐振柜;又有非递归部分——梳状滤波器。
- 它的零、极点数目只取决于单位脉冲响应的长度,因而单位脉冲响应长度相同。利用同一梳状滤波器、同一结构而只有加权系数 $\beta_{0k},\beta_{1k},H\left(0\right),H\left(\dfrac{N}{2}\right)$ 不同的谐振器,就能得到不同的滤波器。
- 其结构可以高度模块化,可时分复用。
## 3.4. 线性相位型
&emsp;&emsp;线性相位的因果FIR系统的单位取样响应满足
$$\begin{equation}
h\left(n\right)=\pm h\left(N-1-n\right)
\end{equation}$$
即序列要么是奇对称的,要么是偶对称的。
&emsp;&emsp;当 $N$ 为奇数时,系统函数可表示为
$$\begin{equation}
\begin{aligned}
H\left(z\right)&=\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}=\sum_{n=0}^{\frac{N-1}{2}-1}{h\left(n\right)z^{-n}}+h\left(\frac{N-1}{2}\right)z^\frac{N-1}{2}+\sum_{n=\frac{N-1}{2}+1}^{N-1}{h\left(n\right)z^{-n}}\\
&=\sum_{n=0}^{\frac{N-1}{2}-1}h\left(n\right)\left[z^{-n}\pm z^{-\left(N-1-n\right)}\right]+h\left(\frac{N-1}{2}\right)z^\frac{N-1}{2}
\end{aligned}
\end{equation}$$
&emsp;&emsp;当 $N$ 为偶数时,系统函数可表示为
$$\begin{equation}
H\left(z\right)=\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}=\sum_{n=0}^{\frac{N}{2}-1}{h\left(n\right)z^{-n}}+\sum_{n=\frac{N}{2}}^{N-1}{h\left(n\right)z^{-n}}=\sum_{n=0}^{\frac{N}{2}-1}h\left(n\right)\left[z^{-n}\pm z^{-\left(N-1-n\right)}\right]
\end{equation}$$
**当序列 $h\left(n\right)$ 偶对称时,取“$+$”号;当序列奇对称时,取“$-$”号**。则线性相位型 FIR 滤波器的结构为
![线性相位型 FIR 滤波器的结构](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-6/2023-04-15-josh-dsp-part-6-200-LinearPhaseFIRStructure.png!sign){width=900px}
## 3.5. 快速卷积型(略)
# 参考文献
王世一. *数字信号处理, 修订版.* 北京理工大学出版社, 1997.
+542
View File
@@ -0,0 +1,542 @@
---
title: Josh 的学习笔记之数字信号处理(Part 7——数字滤波器设计)
mathjax: true
comments: true
copyright: true
toc:
enable: true
number: false
wrap: ture
expand_all: false
max_depth: 4
tags:
- 数字信号和处理
- DSP
- 巴特沃斯
- 数字滤波器
- IIR
- FIR
- 频率取样
- 窗函数
- 通带波动
- 阻带衰减
- 截止频率
- 系统函数
- 脉冲响应不变
- 双线性变换
- 线性相位
categories:
- - Josh 的学习笔记
- 数字信号处理
abbrlink: 60664a7e
date: 2023-04-15 23:33:09
---
# 1. 幅度平方响应与数字滤波器的技术指标
## 1.1. 幅度平方响应
&emsp;&emsp;常采用滤波器的幅度平方响应 $\left|H\left(e^{j\omega}\right)\right|^2$ 来描述滤波器的选频特性。
## 1.2. 数字滤波器的技术指标
![数字滤波器的技术指标](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-010-DigtalFilterBenchmark.png!sign){width=600px}
1. 通带截止频率(passband edge frequency):$\omega_p$。
2. 阻带截止频率(stopband edge frequency):$\omega_s$。
3. 通带波动(passband ripple in dB):$R_p=-10\lg{\dfrac{1}{1+\varepsilon^2}}$,其中 $\varepsilon$ 为通带波动系数。
4. 阻带衰减(stopband attenuation in dB):$A_s=20\lg{\delta}$。
<!-- more -->
# 2. 低通 IIR 数字滤波器设计
## 2.1. 巴特沃斯(Butterworth)模拟原型滤波器
![巴特沃斯(Butterworth)模拟原型滤波器](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-020-ButterworthAnalogFilter.png!sign){width=500px}
### 2.1.1. 幅度平方频率响应
&emsp;&emsp;$N$ 阶 Butterworth 模拟滤波器的幅度平方频率响应为
$$\begin{equation}
A^2\left(\Omega\right)=\left|H_a\left(j\Omega\right)\right|^2=\frac{1}{1+\left(\dfrac{\Omega}{\Omega_c}\right)^{2N}}
\end{equation}$$
其中 $A^2\left(\Omega\right)$ 为幅度平方函数,整数 $N$ 为滤波器阶数,$\Omega_c$ 为 3 dB 截止频率,$\Omega_p$ 为通带截止频率,$\left(1+\varepsilon^2\right)^{-1}$ 为通带截止频率处的幅度平方频响值,$\Omega_s$ 为阻带截止频率,$\delta^2$ 为阻带截止频率处的幅度平方频响值。
&emsp;&emsp;Butterworth 滤波器在通带中拥有最大平坦的振幅特性,即 $N$ 阶低通 Butterworth 滤波器在 $\Omega=0$ 处的幅度平方函数的前 $(2N-1)$ 阶导数等于零,在止带内接近于单调变化。
### 2.1.2. 极点分布及系统函数的确定
&emsp;&emsp;$N$ 阶 Butterworth 模拟滤波器的幅度平方频率响应可表示为
$$\begin{equation}
\begin{aligned}
A^2\left(\Omega\right)&=\left|H_a\left(j\Omega\right)\right|^2=H_a\left(j\Omega\right)H_a^\ast\left(j\Omega\right)=H_a\left(j\Omega\right)H_a\left(-j\Omega\right)\\
&=\left.H_a\left(s\right)H_a\left(-s\right)\right|_{s=j\Omega}=\frac{1}{1+\left(\dfrac{s}{j\Omega_c}\right)^{2N}}
\end{aligned}
\end{equation}$$
令 $A^2\left(\Omega\right)=0$,可解得极点
$$\begin{equation}
s_k=\left(-1\right)^\frac{1}{2N}\left(j\Omega_c\right)=\Omega_ce^{j\left(\frac{1}{2}+\frac{2k+1}{2N}\right)\pi},\ \ k=0,1,\cdots,2N-1
\end{equation}$$
由此可得常用低阶次Butterworth滤波器的系统函数
| 阶次 | 系统函数 $H_a\left(s\right)=\dfrac{\left(-1\right)^Ns_0s_1\cdots s_{N-1}}{\left(s-s_0\right)\left(s-s_1\right)\cdots(s-s_{N-1})}$ |
| :--: | :--------------: |
| 1 | $\displaystyle\frac{\Omega_c}{\left(s+\Omega_c\right)}$ |
| 2 | $\displaystyle\frac{\Omega_c^2}{\left(s^2+\sqrt2\Omega_cs+\Omega_c^2\right)}$ |
| 3 | $\displaystyle\frac{\Omega_c^3}{(s^3+2\Omega_cs^2+2\Omega_c^2s+\Omega_c^3)}$ |
### 2.1.3. 参数 $N$ 和 $\Omega_c$ 的确定
#### 2.1.3.1. 参数选取原则
1. 在通带范围内允许的最大衰减为 $\left(1+\varepsilon^2\right)^{-1}$ 或 $\alpha_p\text{dB}$,截止频率为$\Omega_p$。
$$\begin{equation}
10\lg{\frac{1}{1+\varepsilon^2}}=-\alpha_p\Longrightarrow\lg{\left(1+\varepsilon^2\right)}=\frac{\alpha_p}{10}\Longrightarrow\varepsilon=\sqrt{10^{\frac{\alpha_p}{10}-1}}
\end{equation}$$
2. 在阻带范围内允许的最小衰减为 $\delta^2$ 或 $\alpha_s\text{dB}$,临界频率为 $\Omega_s$。
$$\begin{equation}
10\lg{\delta^2}=-\alpha_s\Longrightarrow\delta^{-2}={10}^\frac{\alpha_s}{10}
\end{equation}$$
#### 2.1.3.2. 参数确定
&emsp;&emsp;由参数选取原则,有
$$\begin{equation}
\begin{aligned}
&\left|H_a\left(j\Omega_p\right)\right|^2=\frac{1}{1+\left(\frac{\Omega_p}{\Omega_c}\right)^{2N}}\geqslant\frac{1}{1+\varepsilon^2}\Longrightarrow\left(\frac{\Omega_p}{\Omega_c}\right)^{2N}\leqslant\varepsilon^2\\
\Longrightarrow&\left(\frac{\Omega_c}{\Omega_p}\right)^N\geqslant\varepsilon^{-1}\\
&\left|H_a\left(j\Omega_s\right)\right|^2=\frac{1}{1+\left(\dfrac{\Omega_s}{\Omega_c}\right)^{2N}}\leqslant\delta^2\Longrightarrow\left(\frac{\Omega_s}{\Omega_c}\right)^{2N}\geqslant\delta^{-2}-1\\
\Longrightarrow&\left(\frac{\Omega_s}{\Omega_c}\right)^N\geqslant\sqrt{\delta^{-2}-1}
\end{aligned}
\end{equation}$$
由上两式,有
$$\begin{equation}
N\geqslant\left\lceil\frac{\lg{\left(\dfrac{\sqrt{\delta^{-2}-1}}{\varepsilon}\right)}}{\lg{\left(\dfrac{\Omega_s}{\Omega_p}\right)}}\right\rceil=\left\lceil\frac{\lg{\dfrac{10^\frac{\alpha_s}{10}-1}{10^\frac{\alpha_p}{10}-1}}}{2\lg{\left(\dfrac{\Omega_s}{\Omega_p}\right)}}\right\rceil
\end{equation}$$
$$\begin{equation}
\Omega_c\in\left[\Omega_p\varepsilon^{-\frac{1}{N}},\Omega_s\left(\delta^2-1\right)^{-\frac{1}{2N}}\right]=\left[\Omega_p\left({10}^\frac{\alpha_p}{10}-1\right)^{-\frac{1}{2N}},\Omega_s\left({10}^\frac{\alpha_s}{10}-1\right)^{-\frac{1}{2N}}\right]
\end{equation}$$
对于 $\Omega_c$,通常取其下边带即可,即
$$\begin{equation}
\Omega_c=\Omega_p\varepsilon^{-\frac{1}{N}}=\Omega_p\left({10}^\frac{\alpha_p}{10}-1\right)^{-\frac{1}{2N}}
\end{equation}$$
## 2.2. 模拟原型低通滤波器数字化的时域方法——脉冲响应不变法(Impulse Invariance Method)
### 2.2.1. 变换原理
&emsp;&emsp;对模拟原型滤波器的系统函数 $H_a\left(s\right)$ 进行反拉氏变换,得到相应模拟滤波器的单位脉冲响应 $h_a\left(t\right)$,即
$$\begin{equation}
h_a\left(t\right)=\mathrm{ILT}\left[H_a\left(s\right)\right]=\mathrm{ILT}\left[\sum_{k=0}^{N-1}\frac{c_k}{s-s_k}\right]=\sum_{k=0}^{N-1}{c_ke^{s_kt}u\left(t\right)}
\end{equation}$$
对模拟滤波器的单位脉冲响应进行采样后进行 $z$ 变换即可得到数字滤波器的系统函数 $H\left(z\right)$,即
$$\begin{equation}
H\left(z\right)=\mathrm{ZT}\left[h\left(n\right)\right]=\mathrm{ZT}\left[\left.h_a\left(t\right)\right|_{t=nT}\right]
\end{equation}$$
在实际设计时,为了避免数字滤波器在取样间隔T很小(采样频率很高)的情况下出现过高的增益,对取样进行如下修正
$$\begin{equation}
h\left(n\right)=Th_a\left(nT\right)
\end{equation}$$
由此可将导出 Butterworth 数字低通滤波器的系统函数
$$\begin{equation}
\begin{aligned}
H\left(z\right)&=\mathrm{ZT}\left[h\left(n\right)\right]=\mathrm{ZT}\left[Th_a\left(nT\right)\right]=\mathrm{ZT}\left[\sum_{k=0}^{N-1}{Tc_ke^{s_knT}u\left(t\right)}\right]\\
&=\sum_{n=-\infty}^{\infty}{\left[\sum_{k=0}^{N-1}{Tc_k\left(e^{s_kT}\right)^nu\left(t\right)}\right]z^{-n}}=\sum_{k=0}^{N-1}{Tc_k\left[\sum_{n=0}^{\infty}\left(e^{s_kT}z^{-1}\right)^n\right]}\\
&=\sum_{k=0}^{N-1}{Tc_k\left[ \lim_{N\rightarrow \infty} \!\:\frac{1-\left( e^{s_kT}z^{-1} \right) ^N}{1-e^{s_kT}z^{-1}} \right]}\\
&\xlongequal{\left|z\right|>\left|e^{s_kT}\right|}\sum_{k=1}^{N-1}\frac{Tc_k}{1-e^{s_kT}z^{-1}}
\end{aligned}
\end{equation}$$
对比模拟滤波器的单位脉冲响应 $h_a\left(t\right)$,可得脉冲响应不变法的系统函数转换关系
$$\begin{equation}
H_a\left(s\right)=\sum_{k=0}^{N-1}\frac{c_k}{s-s_k}\Longleftrightarrow H\left(z\right)=\sum_{k=1}^{N-1}\frac{Tc_k}{1-e^{s_kT}z^{-1}}
\end{equation}$$
### 2.2.2. 变换后数字滤波器的稳定性
&emsp;&emsp;模拟 Butterworth 滤波器的所有极点均在 $s$ 平面的左半平面内,其实部 $\sigma_k<0$,则在极点变化的过程中 $s_k\Rightarrow e^{s_kT}<1$,即变换后得到的数字滤波器的极点位于 $z$ 平面的单位圆内,因而脉冲响应不变法所设计的数字滤波器也是稳定的。
### 2.2.3. 优缺点
1. (优点)脉冲响应变换法的频率坐标变换是线性的,即 $\omega=\Omega T$。因此如果模拟滤波器的频响是带限的且在折叠频率以内的话,变换后的得到的数字滤波器的频响可以不失真地反映原响应与频率的关系
$$\begin{equation}
H\left(e^{j\Omega T}\right)=H\left(j\Omega\right),\ \ \left|\Omega\right|<\frac{\pi}{T}
\end{equation}$$
2. (主要缺点)由于时域的取样,$h_a\left(t\right)$ 拉氏变换 $H_a\left(s\right)$ 在 $s$ 平面上沿虚轴周期延拓,然后再经过 $z=e^{sT}$ 的映射关系,将 $H_a\left(s\right)$ 映射到 $z$ 平面上,得到 $H\left(z\right)$。对于上述修正后的变换
$$\begin{equation}
H\left(e^{j\omega}\right)=\left.H\left(z\right)\right|_{z=e^{j\omega}}=\sum_{k=0}^{N-1}\frac{Tc_k}{1-s^{s_kTe^{-j\omega}}}=\sum_{m=-\infty}^{\infty}{H_a\left(j\frac{\omega-2\pi m}{T}\right)}\approx{\widetilde{H}}_a\left(j\frac{\omega}{T}\right)
\end{equation}$$
由于 $H_a\left(s\right)$ 的周期延拓,可能造成频谱混叠,导致滤波器的阻带性能降低。因此只能用于具有带限的频响特性的信号,**一般用于设计低通、带通滤波器,而不用于设计高通、带阻滤波器**。
### 2.2.4. 脉冲响应不变法的主要步骤
1. 确定滤波器的技术指标(通常在数字域给出)
1. 通带、阻带的波动;
2. 通带、过渡带、阻带的截止频率;
3. 频率选择特性(低通)。
2. 对数字域的频率指标进行如下变换
$$\begin{equation}
\Omega=\frac{\omega}{T}
\end{equation}$$
3. 选择模拟逼近方法(Butterworth),并确定其传递函数 $H_a\left(s\right)$。
4. 按照脉冲响应不变法的系统函数转换关系,将 $H_a\left(s\right)$ 转变为 $H\left(z\right)$,完成数字化。
$$\begin{equation}
H_a\left(s\right)=\sum_{k=0}^{N-1}\frac{c_k}{s-s_k}\Longleftrightarrow H\left(z\right)=\sum_{k=1}^{N-1}\frac{Tc_k}{1-e^{s_kT}z^{-1}}
\end{equation}$$
## 2.3. 模拟原型低通滤波器数字化的频域方法——双线性变换法(Bilinear Transform Method)
### 2.3.1. 变换原理
&emsp;&emsp;由 $s$ 平面与 $z$ 平面的双线性变换关系(变化式中 $s$ 与 $z$ 的关系无论分子还是分母部分都是线性的)
$$\begin{equation}
s=\frac{2}{T}\cdot\frac{1-z^{-1}}{1+z^{-1}},\ \ z=\frac{2/T+s}{2/T-s}
\end{equation}$$
将 $s=\sigma+j\omega$ 代入可得
$$\begin{equation}
z=\frac{2/T+\sigma+j\Omega}{2/T-\sigma-j\Omega}\Longrightarrow\left|z\right|=\sqrt{\frac{\left( 2/T+\sigma\right)^2+\Omega^2}{\left(2/T-\sigma\right)^2+\Omega^2}}
\end{equation}$$
由上式,当 $\sigma<0$ 时,$\left|z\right|<1$;当 $\sigma=0$ 时,$\left|z\right|=1$;当 $\sigma>0$ 时,$\left|z\right|>1$。也即把 $s$ 左半开平面映射在单位圆 $\left|z\right|=1$ 的内部;把 $s$ 平面的整个 $j\Omega$ 轴映射成单位圆 $\left|z\right|=1$,把 $s$ 右半开平面映射到单位圆 $\left|z\right|=1$ 的外部。
由 $s$ 平面与 $z$ 平面的双线性变换关系(变化式中 $s$ 与 $z$ 的关系无论分子还是分母部考虑映射到单位圆上的情况,则由 $s$ 平面与 $z$ 平面的双线性变换关系可得模拟滤波器和数字滤波器的频率关系
$$\begin{equation}
\begin{aligned}
&z=e^{j\omega}=\frac{2/T+j\Omega}{2/T-j\Omega}\\
\Longrightarrow&\Omega=j\frac{2}{T}\cdot\frac{1-e^{j\omega}}{1+e^{j\omega}}=j\frac{2}{T}\cdot\frac{e^{j\frac{\omega}{2}}\left(e^{-j\frac{\omega}{2}}-e^{j\frac{\omega}{2}}\right)}{e^{j\frac{\omega}{2}}\left(e^{-j\frac{\omega}{2}}+e^{j\frac{\omega}{2}}\right)}=j\frac{2}{T}\cdot\frac{-2j\sin{\dfrac{\omega}{2}}}{2\cos{\dfrac{\omega}{2}}}=\dfrac{2}{T}\tan{\frac{\omega}{2}}
\end{aligned}
\end{equation}$$
### 2.3.2. 优缺点
1. (优点)消除了混频误差。
2. (优点)在零频附近,模拟频率 $\Omega$ 与数字频率 $\omega$ 的关系接近与线性。
3. (缺点)模拟滤波器的全部频响特性被压缩在等效的数字频率 $0<\omega<\pi$ 之间,可见**双线性变换消除混叠的特性是依托严重的非线性得到的**。
### 2.3.3. 双线性变换法的主要步骤
1. 确定滤波器的技术指标(通常在数字域给出)
1. 通带、阻带的波动;
2. 通带、过渡带、阻带的截止频率;
3. 频率选择特性(低通)。
2. 对数字域的指标进行如下式的**预畸**处理
$$\begin{equation}
\Omega=\frac{2}{T}\tan{\frac{\omega}{2}}
\end{equation}$$
3. 选择模拟逼近方法(Butterworth),并确定其传递函数 $H_a\left(s\right)$。
4. 按照双线性变换关系将 $H_a\left(s\right)$ 转变为 $H\left(z\right)$,完成数字化。
$$\begin{equation}
s=\frac{2}{T}\cdot\frac{1-z^{-1}}{1+z^{-1}}
\end{equation}$$
5. 检查结果是否满足指标,如不满足,返回第 3 步,改变 $N$。
# 3. 线性相位 FIR 数字滤波器的特点
## 3.1. 线性相位条件
$$\begin{align}
&偶对称\qquad h\left(n\right)=h\left(N-1-n\right)\\
&奇对称\qquad h\left(n\right)=-h\left(N-1-n\right)
\end{align}$$
![线性相位条件](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-030-LinearPhaseCondition.png!sign){width=700px}
## 3.2. 线性相位 FIR 系统的频域特点($h\left(n\right)$ 中心偶对称,$N$ 为奇数时)
### 3.2.1. $h\left(n\right)$ 中心偶对称,$N$ 为奇数情况的推导<a name="3.2.1"></a>
$$\begin{equation}
\begin{aligned}
H\left(e^{j\omega}\right)&=\sum_{n=0}^{N-1}{h\left(n\right)e^{-j\omega n}}=\sum_{n=0}^{\frac{N-1}{2}-1}{h\left(n\right)e^{-j\omega n}}+h\left(\frac{N-1}{2}\right)e^{-j\omega\left(\frac{N-1}{2}\right)}+\sum_{n=\frac{N+1}{2}}^{N-1}{h\left(n\right)e^{-j\omega n}}\\
&=\sum_{n=0}^{\frac{N-1}{2}-1}{h\left(n\right)e^{-j\omega n}}+h\left(\frac{N-1}{2}\right)e^{-j\omega\left(\frac{N-1}{2}\right)}+\sum_{n=0}^{\frac{N-1}{2}-1}{h\left(N-1-n\right)e^{-j\omega\left(N-1-n\right)}}\\
&=\sum_{n=0}^{\frac{N-1}{2}-1}h\left(n\right)\left[e^{-j\omega n}+e^{-j\omega\left(N-1-n\right)}\right]+h\left(\frac{N-1}{2}\right)e^{-j\omega\left(\frac{N-1}{2}\right)}\\
&=e^{-j\omega\left(\frac{N-1}{2}\right)}\left\{h\left(\frac{N-1}{2}\right)+\sum_{n=0}^{\frac{N-1}{2}-1}h\left(n\right)\left[e^{j\omega\left(\frac{N-1}{2}-n\right)}+e^{-j\omega\left(\frac{N-1}{2}-n\right)}\right]\right\}\\
&=e^{-j\omega\left(\frac{N-1}{2}\right)}\left\{h\left(\frac{N-1}{2}\right)+\sum_{n=0}^{\frac{N-1}{2}-1}{2h\left(n\right)\cos{\left[\omega\left(\frac{N-1}{2}-n\right)\right]}}\right\}
\end{aligned}
\end{equation}$$
定义一个 $\dfrac{N+1}{2}$ 点序列 $a\left(n\right)$
$$\begin{equation}
\begin{cases}
a\left(0\right)=h\left(\dfrac{N-1}{2}\right)\\
a\left(n\right)=2h\left(\dfrac{N-1}{2}-n\right),\qquad n=1,2,\cdots,\dfrac{N-1}{2}
\end{cases}
\end{equation}$$
即**取序列 $h\left(n\right)$ 的后半部,中间值不变,其余翻倍**。则 $H\left(e^{j\omega}\right)$ 可以进一步化为
$$\begin{equation}
H\left(e^{j\omega}\right)=e^{-j\omega\left(\frac{N-1}{2}\right)}\sum_{n=0}^{\frac{N-1}{2}}{a\left(n\right)\cos{\left(\omega n\right)}}=A\left(\omega\right)e^{j\varphi\left(\omega\right)}
\end{equation}$$
其中 $A\left(\omega\right)=\displaystyle\sum_{n=0}^{\frac{N-1}{2}}{a\left(n\right)\cos{\left(\omega n\right)}}$ 称为符幅频率响应,其值可正可负,其与幅度频率响应的关系为 $\left|A\left(\omega\right)\right|=\left|H\left(e^{j\omega}\right)\right|$。
### 3.2.2. 四种线性相位FIR滤波器的特性
| | $h\left(n\right)$ | $N$ | 单位脉冲响应 |符幅频率响应 | 相位特性 | 特点 |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| 情况 1 | 中<br>心<br>偶<br>对<br>称 | 奇数 | ![情况1-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-040-Case1h.png!sign){width=150px} ![情况1-a](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-050-Case1a.png!sign){width=150px} | $\displaystyle A\left(\omega\right)=\sum_{n=0}^{\frac{N-1}{2}}{a\left(n\right)\cos{\left(\omega n\right)}}$ ![情况1-A](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-060-Case1A.png!sign){width=200px} | $\displaystyle\varphi\left(\omega\right)=-\frac{N-1}{2}\omega$ ![情况1-相位](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-070-Case1phi.png!sign){width=1200px} | 可实现<br>低通<br>高通<br>带通<br>带阻 |
| 情况 2 | 中<br>心<br>偶<br>对<br>称 | 偶数 | ![情况2-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-080-Case2h.png!sign){width=200px} ![情况2-b](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-090-Case2b.png!sign){width=150px} | $\displaystyle B\left(\omega\right)=\sum_{n=0}^{\frac{N}{2}}{b\left(n\right)\cos{\left[\omega\left(n-\frac{1}{2}\right)\right]}}$ ![情况2-B](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-100-Case2B.png!sign){width=200px} | 同上 | 可实现<br>低通<br>带通 |
| 情况 3 | 中心奇对称 | 奇数 | ![情况3-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-110-Case3h.png!sign){width=200px} ![情况3-c](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-120-Case3c.png!sign){width=150px} | $\displaystyle C\left(\omega\right)=\sum_{n=0}^{\frac{N-1}{2}}{c\left(n\right)\sin{\left(\omega n\right)}}$ ![情况3-C](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-130-Case3C.png!sign){width=200px} | $\displaystyle\varphi\left(\omega\right)=\frac{\pi}{2}-\frac{N-1}{2}\omega$ ![情况3-相位](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-140-Case3phi.png!sign){width=120px} | 可实现<br>带通 |
| 情况 4 | 中心奇对称 | 偶数 | ![情况4-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-150-Case4h.png!sign){width=200px} ![情况4-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-160-Case4d.png!sign){width=150px} | $\displaystyle D\left(\omega\right)=\sum_{n=0}^{\frac{N}{2}}{d\left(n\right)\sin{\left[\omega\left(n-\frac{1}{2}\right)\right]}}$ ![情况4-h](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-170-Case4D.png!sign){width=200px} | 同上 | 可实现<br>高通<br>带阻 |
## 3.3. 线性相位 FIR 滤波器的零点位置
&emsp;&emsp;由 $h\left(n\right)$ 的中心对称性,有
$$\begin{equation}
\begin{aligned}
H\left(z\right)&=\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}=\sum_{n=0}^{N-1}{\pm h\left(N-1-n\right)z^{-n}}=\sum_{m=0}^{N-1}{\pm h\left(m\right)z^{-\left(N-1-m\right)}}\\
&=\pm z^{-\left(N-1\right)}\sum_{m=0}^{N-1}{h\left(m\right)\left(z^{-1}\right)^{-m}}=\pm z^{-\left(N-1\right)}H\left(z^{-1}\right)
\end{aligned}
\end{equation}$$
由 $h\left(n\right)$ 的实值性,有
$$\begin{equation}
H^\ast\left(z\right)=\left[\sum_{n=0}^{N-1}{h\left(n\right)z^{-n}}\right]^\ast=\sum_{n=0}^{N-1}{h\left(n\right)\left(z^\ast\right)^{-n}}=H\left(z^\ast\right)
\end{equation}$$
由上两式可知,若 $z=z_i$ 是 $H\left(z\right)$ 的零点,则 $z_i$ 的倒数 $z=z_i^{-1}、z_i$ 的共轭 $z=z_i^\ast$、$z_i$ 共轭的倒数 $z=\left(z_i^\ast\right)^{-1}$ 也一定是 $H\left(z\right)$ 的零点。因此线性相位FIR滤波器的零点位置有四种可能,如下表。
| $z_i$ 的位置 | 对应所有零点的位置 | 在下图中的对应点 |
| :--: | :--: | :--: |
即不在实轴上又不在单位圆上 | 互为倒数的两组共轭对 |$z_1$
即在实轴上又在单位圆上 | $z=+1$ 或 $z=-1$ | $z_2,z_3$
不在实轴上但在单位圆上 | 一组共轭对 | $z_4$
在实轴上但不在单位圆上 | 一组互为倒数的实数对 | $z_5$
![线性相位 FIR 滤波器的零点位置](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-180-ZeroPointOfLinearPhaseFIR.png!sign){width=300px} | |
# 4. FIR 数字滤波器的设计
- 需要掌握低通、带通、带阻、高通四种选频特性 FIR 滤波器的设计。
- 若要求 FIR 数字滤波器具有线性相位响应,只考虑第一种情形,即 $h\left(n\right)$ 为奇点数中心偶对称。
- 需要掌握窗函数法和频率取样法。
## 4.1. FIR 数字滤波器设计的时域方法——窗函数法(Windowing Method)
### 4.1.1. 窗函数法设计 FIR 数字低通滤波器的步骤
&emsp;&emsp;窗函数设计法的基本思想为,首先选择一个适当的理想的滤波器 $H_d\left(e^{j\omega}\right)$,然后用窗函数截取它的单位脉冲响应 $h_d\left(n\right)$,平移后得到线性相位和因果的FIR滤波器。这种方法的重点是选择一个合适的窗函数和理想滤波器,使设计的滤波器的单位脉冲响应逼近理想滤波器的单位脉冲响应。
1. 根据给定指标确定理想低通数字滤波器的截止频率,以及相应的理想频率响应 $H_d\left(e^{j\omega}\right)$,其相位响应为零(或将相位响应设为 $-\dfrac{\left(N-1\right)\omega}{2}$,而非零相位响应,这样即无需步骤 3 中的平移操作,直接加窗即可)。
2. 利用 IDTFT 计算理想低通系统的单位脉冲响应序列 $h_d\left(n\right)$
$$\begin{equation}
h_d\left(n\right)=\frac{1}{2\pi}\int_{2\pi}{H_d\left(e^{j\omega}\right)e^{j\omega n}\mathrm{d}\omega}
\end{equation}$$
3. 确定滤波器阶数 $N$,将 $h_d\left(n\right)$ 向右平移 $\tau=\dfrac{\left(N-1\right)}{2}$,加窗得到 $h\left(n\right)$
$$\begin{equation}
h\left(n\right)=w\left(n\right)h_d\left[n-\tau\right]
\end{equation}$$
由此,实际频率响应为平移后的脉冲响应序列与窗函数频域卷积,即
$$\begin{equation}
H\left(e^{j\omega}\right)=H_d^\prime\left(e^{j\omega}\right)\ast W\left(e^{j\omega}\right)=\frac{1}{2\pi}\int_{2\pi}{H_d\left(e^{j\omega}\right)e^{-j\frac{\left(N-1\right)\theta}{2}}W\left[e^{j\left(\omega-\theta\right)}\right]\mathrm{d}\theta}
\end{equation}$$
4. 检验结果,如果不满足指标要求,则返回步骤 3,重新选择窗长或窗形进行设计,直到满足要求。
### 4.1.2. 窗函数法设计高通、带通、带阻滤波器
![窗函数法设计高通、带通、带阻滤波器](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-15-josh-dsp-part-7/2023-04-15-josh-dsp-part-7-190-WindowingMethod.png!sign){width=900px}
| 滤波器类型 | 理想滤波器的<br>频率响应 | 理想滤波器的<br>单位抽样响应 |
| :--: | :--------: | :--------------: |
| 高通 | $H_d\left(e^{j\omega}\right)=\begin{aligned}\begin{cases}e^{-j\omega\tau},&\omega_c\leqslant\begin{vmatrix}\omega\end{vmatrix}\leqslant\pi\\0,&\text{otherwise}\end{cases}\end{aligned}$ | $\begin{aligned}h_d\left(n\right)&=\frac{1}{2\pi}\left[\int_{-\pi}^{-\omega_c}e^{j\omega\left(n-\tau\right)d\omega}+\int_{\omega_c}^{\pi}e^{j\omega\left(n-\tau\right)d\omega}\right]\\&=\begin{aligned}\begin{cases}\dfrac{1}{\pi\left(n-\tau\right)}\left\{\sin{\pi\left(n-\tau\right)}-\sin{\left[\omega_c\left(n-\tau\right)\right]}\right\},&n\neq\tau\\ \dfrac{\pi-\omega_c}{\pi},&n=\tau\end{cases}\end{aligned}\end{aligned}$ |
| 带通 | $H_d\left(e^{j\omega}\right)=\begin{aligned}\begin{cases}e^{-j\omega\tau},&0<\omega_1\leqslant\begin{vmatrix}\omega\end{vmatrix}\leqslant\omega_2<\pi\ \\ 0,&\text{otherwise} \end{cases}\end{aligned}$$ | $\begin{aligned}h_d\left(n\right)&=\frac{1}{2\pi}\left[\int_{-\omega_2}^{-\omega_1}e^{j\omega\left(n-\tau\right)d\omega}+\int_{\omega_1}^{\omega_2}e^{j\omega\left(n-\tau\right)d\omega}\right] \\ &=\begin{aligned}\begin{cases}\dfrac{1}{\pi\left(n-\tau\right)}\left\{\sin{\omega_2\left(n-\tau\right)}-\sin{\left[\omega_1\left(n-\tau\right)\right]}\right\},&n\neq\tau \\ \dfrac{\omega_2-\omega_1}{\pi},&n=\tau\end{cases}\end{aligned}\end{aligned}$ |
| 带阻 | $H_d\left(e^{j\omega}\right)=\begin{aligned}\begin{cases}e^{-j\omega\tau},&0\leqslant\begin{vmatrix}\omega\end{vmatrix}\leqslant\omega_1,\omega_2\leqslant\begin{vmatrix}\omega\end{vmatrix}\leqslant\pi\ \\ 0,&\text{otherwise}\end{cases}\end{aligned}$ | $\begin{aligned}h_d\left(n\right)&=\frac{1}{2\pi}\left[\int_{-\pi}^{-\omega_2}e^{j\omega\left(n-\tau\right)d\omega}+\int_{-\omega_1}^{\omega_1}e^{j\omega\left(n-\tau\right)d\omega}+\int_{\omega_2}^{\pi}e^{j\omega\left(n-\tau\right)d\omega}\right]\\ &= \begin{aligned}\begin{cases}\dfrac{1}{\pi\left(n-\tau\right)}\left\{\sin{\pi\left(n-\tau\right)}+\sin{\left[\omega_1\left(n-\tau\right)\right]}-\sin{\left[\omega_2\left(n-\tau\right)\right]}\right\},&n\neq\tau \\ \dfrac{\pi+\omega_1-\omega_2}{\pi},&n=\tau\end{cases}\end{aligned}\end{aligned}$ |
> 说明:
>
> 1. 表中理想频率 $H_d\left(e^{j\omega}\right)$ 具有线性相位,理想低通系统的单位抽样响应 $h_d\left(n\right)$ 无需平移即可加窗。
>
> 2. 数字滤波器的单位抽样响应 $h\left(n\right)=w\left(n\right)\cdot h_d\left(n\right)$。
>
> 3. $\tau=\dfrac{\left(N-1\right)}{2}$。
## 4.2. FIR 数字滤波器设计的频域方法——频率取样法(Frequency Sampling Method)
### 4.2.1. 取样原则
1. 预期频率特性的取样点数应等于滤波器阶数 $N$,并在单位圆上等间隔分布;
2. 为保证滤波器系数为实数,单位抽样序列应为实序列,取样频率特性应具有圆周共轭对称性;
3. 为使预期频率特性具有线性相位,其幅度特性和傅氏反变换得到的序列应为中心对称或中心反对称结构。
### 4.2.2. 取样值的确定($h\left(n\right)$ 为中心偶对称,阶数 $N$ 为奇数时)
&emsp;&emsp;由 [3.2.1](#3.2.1) $h\left(n\right)$ 中心偶对称,$N$ 为奇数情况的推导,有
$$\begin{equation}
H_d\left(e^{j\omega}\right)=e^{-j\omega\left(\frac{N-1}{2}\right)}H\left(\omega\right)
\end{equation}$$
其中符幅频率响应函数 $H\left(\omega\right)$ 是偶对称的,即
$$\begin{equation}
H\left(\omega\right)=H\left(2\pi-\omega\right)
\end{equation}$$
对 $H\left(e^{j\omega}\right)$ 在 $0\sim2\pi$ 之间等间隔取样 $N$ 点,得到 $H\left(k\right)$,即
$$\begin{equation}
H\left(k\right)=\left.H_d\left(e^{j\omega}\right)\right|_{\omega=\frac{2\pi}{N}k}=H_ke^{j\theta_k},\ \ k=0,1,\cdots,N-1
\end{equation}$$
其中频率采样符幅满足
$$\begin{equation}
H_k=H_{\frac{2\pi}{N}k}=H_{\frac{2\pi}{N}\left(N-k\right)}=H_{N-k};\left|H_k\right|=\left|H\left(k\right)\right|
\end{equation}$$
频率采样相位
$$\begin{equation}
\theta_k=-\frac{N-1}{2}\cdot\frac{2\pi}{N}k=-k\pi\left(1-\frac{1}{N}\right);e^{j\theta_{\left(N-k\right)}}=-e^{j\theta_k}
\end{equation}$$
### 4.2.3. 系统单位脉冲响应、传递函数和频率响应($h\left(n\right)$ 为中心偶对称,阶数 $N$ 为奇数时)<a name="4.2.3"></a>
&emsp;&emsp;由于 $H\left(k\right)$ 是 $h\left(n\right)$ 的 DFT
$$\begin{equation}
\begin{aligned}
h\left(n\right)&=\mathrm{IDFT}\left[H\left(k\right)\right]=\frac{1}{N}\sum_{k=0}^{N-1}{H\left(k\right)e^{j\frac{2\pi}{N}kn}}=\frac{1}{N}\sum_{k=0}^{N-1}{H_ke^{j\theta_k}e^{j\frac{2\pi}{N}nk}}\\
&=\frac{H_0e^{j\theta_0}}{N}+\frac{1}{N}\sum_{k=1}^{\frac{N-1}{2}}{H_k\left[e^{j\theta_k}e^{j\frac{2\pi}{N}nk}+e^{j\theta_{\left(N-k\right)}}e^{j\frac{2\pi}{N}n\left(N-k\right)}\right]}\\
&=\frac{H_0}{N}+\frac{1}{N}\sum_{k=1}^{\frac{N-1}{2}}{H_k\left[e^{j\theta_k}e^{j\frac{2\pi}{N}nk}+e^{-j\theta_k}e^{-j\frac{2\pi}{N}nk}\right]}\\
&=\frac{H_0}{N}+\frac{2}{N}\sum_{k=1}^{\frac{N-1}{2}}{H_k\cos{\left(\theta_k+\frac{2\pi}{N}nk\right)}}
\\
&=\frac{H_0}{N}+\frac{2}{N}\sum_{k=1}^{\frac{N-1}{2}}{H_k\cos{\left[-\left(1-\frac{1}{N}\right)k\pi+\frac{2\pi}{N}nk\right]}}
\end{aligned}
\end{equation}$$
&emsp;&emsp;由内插公式从 $H\left(k\right)$ 计算 $H\left(z\right)$
$$\begin{equation}
\begin{aligned}
H\left(z\right)&=\frac{1-z^{-N}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{1-W_N^{-k}z^{-1}}\\
&=\frac{1-z^{-N}}{N}\left\{\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\left[\frac{e^{j\theta_k}}{1-W_N^{-k}z^{-1}}+\frac{e^{j\theta_{\left(N-k\right)}}}{1-W_N^{-\left(N-k\right)}z^{-1}}\right]}\right\}\\
&=\frac{1-z^{-N}}{N}\left[\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\left(\frac{e^{j\theta_k}}{1-W_N^{-k}z^{-1}}+\frac{e^{-j\theta_k}}{1-W_N^kz^{-1}}\right)}\right]\\
&=\frac{1-z^{-N}}{N}\left\{\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\frac{e^{j\theta_k}+\left(e^{j\theta_k}\right)^\ast-\left[e^{j\theta_k}W_N^k+\left(e^{j\theta_k}W_N^k\right)^\ast\right]z^{-1}}{1-z^{-1}\left(W_N^{-k}+W_N^k\right)+z^{-2}}}\right\}\\
&=\frac{1-z^{-N}}{N}\left[\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\frac{2\cos{\theta_k}-2z^{-1}\Re{\left[e^{j\theta_k}W_N^k\right]}}{1-z^{-1}\left(W_N^{-k}+W_N^k\right)+z^{-2}}}\right]\\
&\xlongequal{\theta_k=-k\pi\left(1-\frac{1}{N}\right)}\frac{1-z^{-N}}{N}\left[\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\frac{2\left(-1\right)^k\cos{\left(\dfrac{\pi}{N}k\right)}\left(1-z^{-1}\right)}{1-2\cos{\left(\dfrac{2\pi}{N}k\right)}z^{-1}+z^{-2}}}\right]
\end{aligned}
\end{equation}$$
由 $H\left(z\right)$ 和 $H\left(e^{j\omega}\right)$ 的关系
$$\begin{equation}
\begin{aligned}
H\left(e^{j\omega}\right)&=\left.H\left(z\right)\right|_{z=e^{j\omega}}=\frac{1-e^{-j\omega N}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{1-W_N^{-k}e^{-j\omega}}=\frac{1-e^{-j\omega N}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{1-e^{-j\left(\omega-\frac{2\pi}{N}k\right)}}\\
&=e^{-j\frac{\left(N-1\right)}{2}\omega}\frac{\left(e^{j\frac{N\omega}{2}}-e^{-j\frac{N\omega}{2}}\right)e^{-j\frac{\omega}{2}}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{e^{-j\left(\frac{\omega}{2}-\frac{\pi}{N}k\right)}\left[e^{j\left(\frac{\omega}{2}-\frac{\pi}{N}k\right)}-e^{-j\left(\frac{\omega}{2}-\frac{\pi}{N}k\right)}\right]}\\
&=e^{-j\frac{\left(N-1\right)}{2}\omega}\frac{2j\sin{\left(\dfrac{N\omega}{2}\right)}e^{-j\frac{\omega}{2}}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)}{e^{-j\left(\frac{\omega}{2}-\frac{\pi}{N}k\right)}2j\sin{\left(\frac{\omega}{2}-\frac{\pi}{N}k\right)}}\\
&\xlongequal{约分}e^{-j\frac{\left(N-1\right)}{2}\omega}\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{N}\sum_{k=0}^{N-1}\frac{H\left(k\right)e^{-j\frac{\pi}{N}k}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}\\
&\xlongequal[将第1项分开]{H\left(k\right)=H_ke^{j\theta_k}}e^{-j\frac{\left(N-1\right)}{2}\omega}\left\{\frac{H_0}{N}\cdot\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}\right)}}+\sum_{k=1}^{N-1}{\frac{H_ke^{j\theta_k}}{N}\cdot\frac{e^{-j\frac{\pi}{N}k}\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}}\right\}\\
&\xlongequal{合并}e^{-j\frac{\left(N-1\right)}{2}\omega}\left\{\frac{H_0}{N}\cdot\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}\right)}}+\sum_{k=1}^{\frac{N-1}{2}}{\frac{H_k}{N}\cdot\left[\frac{e^{j\theta_k}e^{-j\frac{\pi}{N}k}\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}+\frac{e^{j\theta_{\left(N-k\right)}}e^{-j\frac{\pi}{N}\left(N-k\right)}\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left[\dfrac{\omega}{2}-\dfrac{\pi}{N}\left(N-k\right)\right]}}\right]}\right\}\\
&\xlongequal{\theta_k=-k\pi\left(1-\frac{1}{N}\right)}e^{-j\frac{\left(N-1\right)}{2}\omega}\left\{\frac{H_0}{N}\cdot\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}\right)}}+\sum_{k=1}^{\frac{N-1}{2}}{\frac{H_k}{N}\cdot\left[\frac{e^{-jk\pi}\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}+\frac{e^{jk\pi}\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}+\dfrac{\pi}{N}k\right)}}\right]}\right\}\\
&=e^{-j\frac{\left(N-1\right)}{2}\omega}\left\{\frac{H_0}{N}\cdot\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}\right)}}+\sum_{k=1}^{\frac{N-1}{2}}{\frac{H_k}{N}\cdot\left[\frac{\sin{\left[N\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)\right]}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}+\frac{\left[\sin{N\left(\dfrac{\omega}{2}+\dfrac{\pi}{N}k\right)}\right]}{\sin{\left(\dfrac{\omega}{2}+\dfrac{\pi}{N}k\right)}}\right]}\right\}
\end{aligned}
\end{equation}$$
其中最后一步化简
$$\begin{equation}
\begin{aligned}
\sin{\left[N\left(\frac{\omega}{2}+\frac{\pi}{N}k\right)\right]}&=\frac{1}{2j}\left[e^{jN\left(\frac{\omega}{2}+\frac{\pi}{N}k\right)}-e^{-jN\left(\frac{\omega}{2}+\frac{\pi}{N}k\right)}\right]=\frac{e^{-jk\pi}}{2j}\left[e^{j\left(N\frac{\omega}{2}+2\pi k\right)}-e^{-j\left(\frac{N\omega}{2}+\pi k\right)}\right]\\
&\xlongequal{e^{j2\pi k}=1}\frac{e^{-jk\pi}}{2j}\left[e^{j\left(N\frac{\omega}{2}\right)}-e^{-j\left(\frac{N\omega}{2}\right)}\right]=e^{-jk\pi}\sin{\left(\frac{N\omega}{2}\right)}
\end{aligned}
\end{equation}$$
### 4.2.4. 频率取样法设计滤波器的步骤
1. 确定滤波器的技术指标,及预期频率响应(简单起见,可从理想选频特性开始)。
2. 选择频率采样类型(Ⅰ型),确定采样频点
$$\begin{equation}
\omega_k=k\frac{f_s}{N}
\end{equation}$$
3. 计算所需频率采样点数 $N$ 及对应的频域采样值 $H\left(k\right)$,确定过渡带中频率采样点数 $M$ 以及对应的幅度。
4. 利用 [4.2.3](#4.2.3) 中推导的公式计算滤波器的参数
$$\begin{equation}
h\left(n\right)=\frac{H_0}{N}+\frac{2}{N}\sum_{k=1}^{\frac{N-1}{2}}{H_k\cos{\left[-\left(1-\frac{1}{N}\right)k\pi+\frac{2\pi}{N}nk\right]}}
\end{equation}$$
$$\begin{equation}
H\left(z\right)=\frac{1-z^{-N}}{N}\left[\frac{H_0}{1-z^{-1}}+\sum_{k=1}^{\frac{N-1}{2}}{H_k\frac{2\left(-1\right)^k\cos{\left(\frac{\pi}{N}k\right)}\left(1-z^{-1}\right)}{1-2\cos{\left(\frac{2\pi}{N}k\right)}z^{-1}+z^{-2}}}\right]
\end{equation}$$
$$\begin{equation}
H\left(e^{j\omega}\right)=e^{-j\frac{\left(N-1\right)}{2}\omega}\left\{\frac{H_0}{N}\cdot\frac{\sin{\left(\dfrac{N\omega}{2}\right)}}{\sin{\left(\dfrac{\omega}{2}\right)}}+\sum_{k=1}^{\frac{N-1}{2}}{\frac{H_k}{N}\cdot\left[\frac{\sin{\left[N\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)\right]}}{\sin{\left(\dfrac{\omega}{2}-\dfrac{\pi}{N}k\right)}}+\frac{\left[\sin{N\left(\dfrac{\omega}{2}+\dfrac{\pi}{N}k\right)}\right]}{\sin{\left(\dfrac{\omega}{2}+\dfrac{\pi}{N}k\right)}}\right]}\right\}
\end{equation}$$
5. 检验结果,如果不满足指标要求,则返回步骤 3 重新设计。
# 参考文献
王世一. *数字信号处理, 修订版.* 北京理工大学出版社, 1997.