本书以Xilinx公司的Artix-7系列FPGA器件为开发平台,以MATLAB及Verilog HDL语言为开发工具,详细阐述数字滤波器的FPGA实现原理、结构、方法及仿真测试过程,并通过大量工程实例分析使用FPGA实现滤波器的具体技术细节,主要包括FIR滤波器、IIR滤波器、多速率滤波器、自适应滤波器、变换域滤波器、DPSK调制解调等内容。本书思路清晰、语言流畅、分析透彻,在简明阐述设计原理的基础上,主要追求对工程实践的指导性,力求使读者在较短的时间内掌握数字滤波器的FPGA设计知识和技能。编著者精心设计了与本书配套的FPGA数字信号处理开发板,详细讲解了工程实例的板载测试步骤及方法,形成了从理论到实践的完整学习过程,可以有效加深读者对数字滤波器技术的理解,提高学习效率。本书的配套资源包含完整的MATLAB及Verilog HDL实例工程代码。读者可以关注编著者的微信公众号“杜勇FPGA”下载程序资料及开发环境,关注B站UP主“杜勇FPGA”观看教学视频。
杜勇,四川省广安市人,高级工程师。1999年于湖南大学获电子工程专业学士学位,2005年于国防科技大学获信息与通信工程专业硕士学位。主要从事数字信号处理、无线通信以及FPGA应用技术研究。发表学术论文十余篇,出版《数字滤波器的MATLAB与FPGA实现(第2版)》、《数字通信同步技术的MATLAB与FPGA实现》、《数字调制解调技术的MATLAB与FPGA实现》等多部著作。
目 录
第1章 数字滤波器及FPGA概述1
1.1 滤波器概述1
1.1.1 滤波器简介1
1.1.2 数字滤波器的分类3
1.1.3 滤波器的特征参数4
1.2 FPGA基本知识5
1.2.1 FPGA的基本概念及发展历程5
1.2.2 FPGA的结构和工作原理7
1.2.3 IP核的概念12
1.3 FPGA在数字信号处理中的应用13
1.4 AMD系列器件简介14
1.4.1 AMD系列器件概览14
1.4.2 7系列FPGA芯片简介16
1.5 FPGA信号处理板CXD72017
1.6 小结19
第2章 设计语言及环境介绍20
2.1 Verilog HDL语言简介20
2.1.1 HDL语言20
2.1.2 Verilog HDL语言21
2.1.3 本书中的Verilog HDL代码设计原则24
2.2 FPGA设计流程24
2.3 Vivado软件开发步骤27
2.3.1 流水灯电路功能27
2.3.2 流水灯电路设计输入与实现28
2.3.3 程序下载32
2.4 MATLAB软件简介33
2.5 MATLAB的常用信号处理函数36
2.5.1 常用的信号产生函数36
2.5.2 常用的信号分析函数38
2.5.3 滤波器设计分析工具FDATOOL43
2.6 MATLAB与Vivado的联合应用44
2.7 小结45
第3章 FPGA实现数字信号处理基础46
3.1 数的表示46
3.1.1 莱布尼茨与二进制46
3.1.2 定点数表示法47
3.1.3 浮点数表示法49
3.2 FPGA中数的运算52
3.2.1 加/减法运算52
3.2.2 乘法运算55
3.2.3 除法运算56
3.2.4 有效数据位的计算56
3.3 有限字长效应59
3.3.1 字长效应的产生因素59
3.3.2 A/D转换的字长效应60
3.3.3 数字滤波器系数的字长效应61
3.3.4 滤波器运算中的字长效应62
3.4 小结63
第4章 FIR滤波器原理及Verilog HDL设计64
4.1 FIR滤波器的理论基础64
4.1.1 线性时不变系统64
4.1.2 FIR滤波器的原理66
4.1.3 FIR滤波器的特性67
4.1.4 FIR滤波器的结构形式71
4.2 FIR滤波器的设计方法74
4.2.1 窗函数法74
4.2.2 频率取样法76
4.2.3 等纹波切比雪夫逼近法77
4.3 FIR滤波器的MATLAB设计78
4.3.1 采用fir1函数设计78
4.3.2 采用kaiserord函数设计83
4.3.3 采用fir2函数设计84
4.3.4 采用firpm函数设计85
4.4 FIR滤波器的系数量化方法88
4.4.1 常规的FIR滤波器系数量化原理88
4.4.2 滤波器系数量化前后的性能对比89
4.4.3 采用FDATOOL设计滤波器90
4.5 并行结构FIR滤波器的Verilog HDL设计92
4.5.1 并行结构FIR滤波器原理92
4.5.2 并行结构FIR滤波器的Verilog HDL设计93
4.5.3 乘法器IP核的应用96
4.5.4 测试数据模块设计及DDS核的应用97
4.5.5 并行结构FIR滤波器的仿真测试99
4.6 串行结构FIR滤波器的Verilog HDL设计102
4.6.1 串行结构FIR滤波器原理102
4.6.2 串行结构FIR滤波器的Verilog HDL设计102
4.6.3 串行结构FIR滤波器的仿真测试106
4.6.4 串行结构FIR滤波器的运算时序107
4.7 FIR滤波器的板载测试108
4.7.1 硬件接口电路108
4.7.2 板载测试程序109
4.7.3 板载测试验证113
4.8 小结114
第5章 FIR滤波器IP核设计115
5.1 FIR核设计并行结构滤波器115
5.1.1 新建FIR核并完成参数设置115
5.1.2 并行结构FIR核滤波器仿真118
5.2 FIR核设计串行结构滤波器119
5.2.1 改进的滤波器系数量化方法119
5.2.2 MATLAB设计滤波器系数文件120
5.2.3 串行结构FIR核滤波器设计121
5.3 FIR核设计滤波器的板载测试124
5.3.1 硬件接口电路及板载测试程序124
5.3.2 板载测试验证125
5.4 FIR核的系数重载设计126
5.4.1 FIR核的系数重载方法126
5.4.2 系数可重载的FIR滤波器设计129
5.5 系数可重载FIR滤波器的板载测试132
5.5.1 硬件接口电路及板载测试程序132
5.5.2 板载测试验证133
5.6 小结134
第6章 IIR滤波器设计135
6.1 IIR滤波器的理论基础135
6.1.1 IIR滤波器的原理及特性135
6.1.2 IIR滤波器的结构形式136
6.1.3 IIR滤波器与FIR滤波器的比较138
6.2 IIR滤波器的设计方法139
6.2.1 几种典型的模拟滤波器139
6.2.2 原型转换设计方法142
6.2.3 直接设计方法143
6.3 IIR滤波器的MATLAB设计144
6.3.1 采用butter函数设计144
6.3.2 采用cheby1函数设计144
6.3.3 采用cheby2函数设计145
6.3.4 采用ellip函数设计145
6.3.5 采用yulewalk函数设计146
6.3.6 几种设计函数的比较147
6.3.7 采用FDATOOL设计149
6.4 IIR滤波器的系数量化方法150
6.4.1 量化直接型IIR滤波器系数150
6.4.2 IIR滤波器系数的字长效应151
6.5 直接型IIR滤波器设计154
6.5.1 直接型IIR滤波器的实现方法154
6.5.2 零点系数的Verilog HDL设计156
6.5.3 极点系数的Verilog HDL设计157
6.5.4 顶层文件的设计159
6.5.5 直接型IIR滤波器仿真测试161
6.5.6 直接型IIR滤波器的改进设计163
6.6 直接型IIR滤波器板载测试163
6.6.1 硬件接口电路及板载测试程序163
6.6.2 板载测试验证164
6.7 级联型IIR滤波器系数量化设计166
6.7.1 将IIR滤波器转换成级联型结构166
6.7.2 对级联型IIR滤波器系数进行量化167
6.8 级联型IIR滤波器设计及仿真168
6.8.1 级联型IIR滤波器设计168
6.8.2 级联型IIR滤波器仿真测试172
6.9 小结173
第7章 多速率信号处理原理及CIC滤波器设计174
7.1 多速率信号处理基础知识174
7.1.1 多速率信号处理的概念及作用174
7.1.2 多速率信号处理的一般步骤175
7.1.3 软件无线电中的多速率信号处理176
7.2 抽取与内插处理177
7.2.1 整数倍抽取177
7.2.2 整数倍内插179
7.2.3 比值为有理数的抽样频率转换181
7.3 CIC滤波器原理及应用条件181
7.3.1 多级CIC滤波器原理及仿真181
7.3.2 单级CIC滤波器原理及仿真182
7.3.3 CIC滤波器的应用条件分析184
7.4 单级CIC滤波器的Verilog HDL设计及测试185
7.4.1 单级CIC滤波器的Verilog HDL设计185
7.4.2 单级CIC滤波器的仿真测试186
7.5 多级CIC滤波器的Verilog HDL设计及测试188
7.5.1 多级CIC滤波器结构分析188
7.5.2 多级CIC滤波器设计中数据位宽的讨论189
7.5.3 多级CIC滤波器的Verilog HDL设计190
7.5.4 多级CIC滤波器的仿真测试193
7.6 CIC滤波器IP核的使用195
7.6.1 CIC滤波器IP核简介195
7.6.2 IP核设计多级CIC抽取滤波器及仿真测试197
7.7 CIC滤波器的板载测试198
7.7.1 硬件接口电路及板载测试程序198
7.7.2 板载测试验证199
7.8 小结200
第8章 半带滤波器设计202
8.1 FIR半带滤波器原理及MATLAB设计202
8.1.1 半带滤波器的原理202
8.1.2 半带滤波器的MATLAB设计203
8.2 单级半带滤波器的Verilog HDL设计及仿真205
8.2.1 单级半带滤波器系数的设计205
8.2.2 半带滤波器IP核的创建206
8.2.3 半带滤波器的仿真测试208
8.3 多级半带滤波器MATLAB设计210
8.3.1 各级半带滤波器的总体技术要求210
8.3.2 允许过渡带有混叠的设计210
8.3.3 不允许过渡带有混叠的设计211
8.4 多级半带滤波器的FPGA设计212
8.4.1 多级半带滤波器的性能指标设计212
8.4.2 多级抽取系统的Verilog HDL设计215
8.4.3 多级抽取系统的测试仿真217
8.5 多级半带滤波器的板载测试219
8.5.1 硬件接口电路及板载测试程序219
8.5.2 板载测试验证220
8.6 小结221
第9章 自适应滤波器原理及Verilog HDL设计222
9.1 自适应滤波器简介222
9.1.1 自适应滤波器的概念222
9.1.2 自适应滤波器的应用223
9.2 自适应算法的一般原理225
9.2.1 常用误差准则226
9.2.2 维纳-霍夫方程227
9.3 LMS算法原理及实现结构227
9.3.1 LMS算法的原理227
9.3.2 LMS算法的实现结构228
9.3.3 LMS算法的字长效应229
9.3.4 符号LMS算法原理230
9.4 LMS算法的MATLAB仿真231
9.4.1 蒙特-卡罗仿真方法231
9.4.2 LMS算法仿真模型232
9.4.3 LMS算法仿真232
9.5 自适应线性滤波器原理及仿真235
9.5.1 自适应线性滤波器原理235
9.5.2 利用线性滤波器实现通道失配校正236
9.5.3 校正算法的MATLAB仿真237
9.6 通道失配校正算法的Verilog HDL设计239
9.6.1 确定运算字长及数据截位方法239
9.6.2 计算时钟频率并分配各步骤所需时钟周期241
9.6.3 算法的Verilog HDL实现241
9.6.4 FPGA实现后的仿真测试245
9.6.5 关于通道失配校正算法数据范围的讨论247
9.7 通道失配校正算法的板载测试247
9.7.1 硬件接口电路247
9.7.2 板载测试程序248
9.7.3 板载测试验证250
9.8 小结252
第10章 自适应天线阵及陷波器Verilog HDL设计253
10.1 自适应天线阵的原理253
10.2 自适应天线阵的MATLAB仿真255
10.3 自适应天线阵的FPGA实现260
10.3.1 自适应天线阵的Verilog HDL设计260
10.3.2 FPGA实现后的仿真测试264
10.4 自适应陷波器原理267
10.5 自适应陷波器的MATLAB仿真268
10.6 自适应陷波器的FPGA实现270
10.6.1 自适应陷波器的Verilog HDL设计270
10.6.2 FPGA实1