当前位置:   article > 正文

数字滤波器的MATLAB和FPGA实现-读书笔记 (1/3)_fpga matlab

fpga matlab

写在前面

本读书笔记为个人学习笔记,可以通过笔记了解这本书大概讲了些什么,如果对更具体内容感兴趣,请翻阅原书《数字滤波器的MATLAB和FPGA实现》。

第1-2章 各种简介

主要内容:

滤波器简介、FPGA简介、FPGA器件、FPGA开发流程、MATLAB和ISE联合使用

比较重要的:

  • MATLAB和ISE联合使用(可能不如一些博客详细)
  • 混频器实例(从MATLAB仿真到硬件描述语言的设计例子)

内容搬运:

数字滤波器分类

经典滤波器主要有低通滤波器(Low Pass Filter,LPF)、高通滤波器(High Pass Filter,HPF)、带通滤波器(Band Pass Filter,BPF)、带阻滤波器(Band Stop Filter,BSF)以及全通滤波器(All Pass Filter,APF)等。

现代滤波器把信号和噪声都视为随机信号,利用它们的统计特征(如自相关函数、功率谱函数等)推导出一套最佳的估值算法,然后用硬件或软件实现。现代滤波器主要有维纳滤波器(Wiener Filter)、卡尔曼滤波器(Kalman Filter)、线性预测器(Liner Predictor)、自适应滤波器(Adaptive Filter)等。一些专著将基于特征分解的频率估计及奇异值分解算法也归入现代滤波器的范畴。

从实现的网络结构或者单位脉冲响应来看,数字滤波器可以分成无限脉冲响应(Infinite Impulse Response,IIR)滤波器和有限脉冲响应(Finite Impulse Response,FIR)滤波器。

第3章 数的表示,运算

主要内容:

数的表示、FPGA中数的运算,有限字长效应、FPGA常用运算模块

比较重要的:

  • 定点数和浮点数是什么
  • FPGA如何实现浮点数运算
  • 有效数据位,保证运算精度,节约硬件资源
  • 有限字长效应
  • 加法器,乘法器,除法器,CORDIC运算,浮点运算IP核

内容搬运:

浮点数相加

对阶操作:比较指数大小,对指数小的操作数的尾数进行移位,完成尾数的对阶操作。

尾数相加:对对阶后的尾数进行加(减)操作。

规格化:规格化有效位并且根据移位的方向和位数修改最终的阶码。

浮点数相乘

指数相加:完成两个操作数的指数相加运算。

尾数调整:将尾数f 调整为1.f 的补码格式。

尾数相乘:完成两个操作数的尾数相乘运算。

规格化:根据尾数运算结果调整指数位,并对尾数进行舍入截位操作,规格化输出结果。

有限字长效应:

AD转换时量化精度有限引入的量化误差。

滤波器系数有限字长导致零极点偏移,引起滤波器性能偏差。

运算时字长有限导致的舍入误差。

第4章 FIR(有限脉冲响应)滤波器的FPGA设计与实现

理论:

线性时不变系统,线性相位系统

线性系统是指满足叠加原理的一类系统。

时域离散系统的参数和特性不随时间变化。

线性相位系统保证所有通带内的输入信号的相位响应是线性的,即保证了输入信号的延时特性。

FIR滤波器特性

单位取样响应h(n)是一个N点长的有限长序列,0≤ n ≤N-1。滤波器的输出y(n)可表示为输入序列x(n)与单位取样响应h(n)的线性卷积。

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

 系统函数

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

只有当FIR滤波器单位取样响应满足对称条件时,FIR滤波器才具有线性相位特性。

奇对称时,系统除具有M /2个群延时外,还产生了一个90°的相移。这种在所有频率上都产生90°相移的变换称为信号的正交变换,这种网络称为正交变换网络

对于非线性相位的滤波器系统来讲,IIR滤波器要比FIR滤波器优越些,主要表现在占用的硬件资源及滤波性能上。

单位取样

相应特征

相位特性幅度特性滤波器种类

偶对称

偶整数

线性相位w=0,pi,2pi偶对称各种

偶对称

奇整数

线性相位

w=0,2pi偶对称

w=pi奇对称

w=pi为0

不适合高通、带阻

奇对称

偶整数

线性相位

90°相移

w=0,pi,2pi奇对称

w=0,pi,2pi为0

只适合带通

奇对称

奇整数

线性相位

90°相移

w=0,2pi奇数对称

w=pi偶对称

w=0,2pi为0

适合高通,带通

FIR滤波器设计方法

窗函数法、频率取样法、最优设计法

“对于工程设计来讲,要知道你所做的工作中有百分之九十都是别人已经做过的。因此,你在动手进行工程设计之前首要的工作是查阅资料,吸取前人的研究成果。”------------本章有意义的一句话

实践之MATLAB实现:(搬了一些内容方便直接查阅,想要更完整的内容可以查阅原书)

fir1 函数:

  1. %一般形式
  2. b=fir1(n,wn,'ftype',window);
  3. %归一化滤波器幅度
  4. b=fir1(XXXXXX,'noscale');

例:采用海明窗,分别设计长度为41(阶数为40)的低通(截止频率为200 Hz)、高通(截止频率为200 Hz)、带通(通带为200~400 Hz)、带阻滤波器(阻带为200~400 Hz)FIR滤波器,采样频率为2 000 Hz,画出其脉冲响应及幅频响应图。

  1. N=41;%滤波器长度
  2. fs=2000;%采样频率
  3. %各种滤波器的特征频率
  4. fc_lpf=200;
  5. fc_hpf=200;
  6. fp_bandpass=[200 400];
  7. fc_stop=[200 400];
  8. %以采样频率的一半,对频率进行归一化处理
  9. wn_lpf=fc_lpf*2/fs;
  10. wn_hpf=fc_hpf*2/fs;
  11. wn_bandpass=fp_bandpass*2/fs;
  12. wn_stop=fc_stop*2/fs;
  13. %采用 fir1 函数设计 FIR 滤波器
  14. b_lpf=fir1(N-1,wn_lpf);
  15. b_hpf=fir1(N-1,wn_hpf,'high');
  16. b_bandpass=fir1(N-1,wn_bandpass,'bandpass');
  17. b_stop=fir1(N-1,wn_stop,'stop');
  18. %求滤波器的幅频响应
  19. m_lpf=20*log(abs(fft(b_lpf)))/log(10);
  20. m_hpf=20*log(abs(fft(b_hpf)))/log(10);
  21. m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);
  22. m_stop=20*log(abs(fft(b_stop)))/log(10);
  23. %设置幅频响应的横坐标单位为 Hz
  24. x_f=[0:(fs/length(m_lpf)):fs/2];
  25. %绘制单位脉冲响应
  26. subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');
  27. subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');
  28. subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');
  29. subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');
  30. %绘制幅频响应曲线
  31. subplot(422);plot(x_f,m_lpf(1:length(x_f)));
  32. xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
  33. subplot(424);plot(x_f,m_hpf(1:length(x_f)));
  34. xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
  35. subplot(426);plot(x_f,m_bandpass(1:length(x_f)));
  36. xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
  37. subplot(428);plot(x_f,m_stop(1:length(x_f)));
  38. xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);

矩形窗的过渡带最窄,但其旁瓣峰值最高,阻带衰减最少;与汉宁窗相比,海明窗的过渡带与汉宁窗相同,但其旁瓣峰值更小,且阻带衰减更大,因此性能比汉宁窗更好;当凯塞窗函数的β 取7.856时,与布拉克曼窗相比,从过渡带、旁瓣峰值、阻带衰减等性能指标看,凯塞窗均表现出更好的性能。

Kaiserord函数

[n,wn,beta,filtype] =kaiserord(f,a,dev,fs);

fir2函数:

b=fir2(n,f,m,npt,lap,window);

例:利用fir2函数设计120阶的FIR滤波器,要求设计的滤波器在归一化频率0~0.125范围内幅度为1,在0.125~0.25范围内幅度为0.5,在0.25~0.5范围内幅度为0.25,在0.5~1范围内幅度为0.125。绘出滤波器的频率响应曲线。

  1. N=120; %滤波器阶数
  2. fc=[0 0.125 0.125 0.25 0.25 0.5 0.5 1]; %截止频率
  3. mag=[1 1 0.5 0.5 0.25 0.25 0.125 0.125 ]; %理想滤波器幅度
  4. b=fir2(N,fc,mag); %设计海明窗滤波器
  5. freqz(b); %绘制频率响应曲线

firpm函数

  1. b = firpm(n,f,a,w,'ftype');
  2. [b,delta] = firpm(...);

FDATOOL工具箱

根据图形化界面配置参数完成设计

实践之FPGA实现:

FIR滤波器结构:

FPGA实现直接型结构的FIR滤波器,可以采用串行结构、并行结构、分布式结构,以及直接使用ISE提供的FIR滤波器核等方式。

分布式算法

对于长度为N 的乘加运算,只需构造一个深度为N 的存储器查找表,通过M (M 为变量的数据长度)次查找表运算、M −1次移位运算及1次M 输入的加法运算即可完成整个乘加运算。

不同结构滤波器性能对比:

  • 四种实现结构中,从代码实现的复杂度来看,从低到高依次是并行结构、半串行结构、全串行结构、分布式结构。其中编写并行结构的VHDL代码时,基本不需要考虑时序关系,编写分布式结构时不仅需要花费心思对乘加运算进行拆分组合,还需考虑运算过程中的严格时序对应关系。
  • 从资源占用情况来看,全串行结构占用逻辑资源最少,但需要占用1个乘法器资源。并行结构占用资源最多,尤其需要占用大量的乘法器资源,且所占用的资源随滤波器阶数的增加而增加。即使滤波器阶数增加,串行结构和分布式结构所占用的资源也不会有太大变化。分布式结构不需要占用乘法器资源。如果分布式结构中的ROM核采用片内存储器硬核实现,则分布式结构将占用更少的逻辑资源。
  • 并行结构具有很高的数据处理速度,其系统频率与数据速率相同;串行结构的系统频率是数据速率的N 倍(N 为乘加运算的次数),分布式结构的系统频率是数据速率的M 倍(M 为数据位宽+1)。因此,当数据位宽较小时,滤波器阶数较长时,采用分布式结构可以获得很好的性能。
  • 本实例中的乘法器均采用的是硬件乘法器IP核,因此具有很高的运算速度。IP核的种类及数量与目标器件有关,当器件不支持硬件乘法器IP核时,采用并行结构或串行结构的系统速度通常大大受限于乘法器的运算速度

FIR核实现:

调用FIR核,选择合适的参数,实现FIR滤波器设计

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/134980
推荐阅读
相关标签
  

闽ICP备14008679号