第5章IIR(无限脉冲响应)滤波器
理论:
IIR滤波器特性:
- 同时存在不为零的极点和零点,只可能实现近似的线性相位特性
- 存在反馈结构,受限于有限的寄存器长度,无法通过增加字长来实现全精度的滤波器运算
IIR滤波器结构:
直接I型、直接Ⅱ型、级联型及并联型
IIR滤波器和FIR滤波器比较:
- 通常在满足同样幅频响应设计指标情况下,FIR滤波器的阶数等于5~10倍IIR滤波器的阶数。
- FIR滤波器能得到严格的线性相位特性(当滤波器系数具有对称性时)。IIR滤波器在相同的阶数情况下,具有更好的幅度特性,但相位特性是非线性的。
- FIR滤波器的单位脉冲响应是有限长的,一般采用非递归结构,必是稳定的系统。IIR滤波器必须采用递归结构,极点在单位圆内时才能稳定。这种具有反馈的结构,由于运算的舍入处理,易引起振荡现象。
- FIR滤波器的运算是一种卷积运算,它可以利用快速傅里叶变换和其他快速算法来实现,运算速度快。IIR滤波器无法采用类似的快速算法。
- IIR滤波器主要用于设计规格化的、频率特性为分段恒定的标准滤波器,FIR滤波器要灵活得多,适应性更强。
- 在FPGA设计中,FIR滤波器可以采用现成的IP核进行设计,工作量较小。IIR滤波器的IP核很少,一般需要手动编写代码,工作量较大。
- 当给定幅频特性,而不考虑相位特性时,用IIR滤波器较好。当要求严格线性相位特性时,或幅度特性不同于典型模拟滤波器特性时,通常选用FIR滤波器。
实践之MATLAB实现:(搬了一些内容方便直接查阅,想要更完整的内容可以查阅原书)
butter函数:
[b,a]=butter(n,Wn);
[b,a]=butter(n,Wn,’ftype’);
[z,p,k]=butter(n,Wn);
[z,p,k]=butter(n,Wn,’ftype’);
[A,B,C,D]=butter(n,Wn);
[A,B,C,D]= butter(n,Wn,’ftype’);
cheby1函数:
[b,a]= cheby1 (n,Rp,Wn);
[b,a]= cheby1 (n, Rp,Wn,’ftype’);
[z,p,k]= cheby1 (n, Rp,Wn);
[z,p,k]= cheby1 (n, Rp,Wn,’ftype’);
[A,B,C,D]= cheby1 (n, Rp,Wn);
[A,B,C,D]= cheby1 (n, Rp,Wn,’ftype’);
cheby2函数:
cheby1函数设计的滤波器在通带是等波纹的,在阻带是单调的
cheby2函数设计的滤波器在阻带是等波纹的,在通带是单调的
ellip函数:
[b,a]= ellip (n,Rp,Rs,Wn);
[b,a]= ellip (n, Rp,Rs,Wn,’ftype’);
[z,p,k]= ellip (n,Rp,Rs,Wn);
[z,p,k]= ellip (n, Rp,Rs,Wn,’ftype’);
[A,B,C,D]= ellip (n,Rp,Rs,Wn);
[A,B,C,D]= ellip (n, Rp,Rs,Wn,’ftype’);
yulewalk函数:
[b,a]=yulewalk(n,f,m)
例:设计一个IIR数字低通滤波器,要求通带最大衰减为3 dB、阻带最小衰减为60 dB、通带截止频率为1 000 Hz、阻带截止频率为2 000 Hz、采样频率为8 000 Hz。利用巴特沃斯滤波器阶数计算公式,计算出满足需求的最小滤波器阶数。分别使用butter、cheby1、cheby2、ellip、yulewalk函数设计相同参数的滤波器,画出滤波器的幅频响应曲线,并进行简单比较。
fs=8000; %采样频率
fp=1000; %通带截止频率
fc=2000; %阻带截止频率
Rp=3; %通带衰减(dB)
Rs=60; %阻带衰减(dB)
N=0; %滤波器阶数清零
%计算巴特沃斯滤波器的最小滤波器阶数
na=sqrt(10^(0.1*Rp)-1);
ea=sqrt(10^(0.1*Rs)-1);
N=ceil(log10(ea/na)/log10(fc/fp))
[Bb,Ba]=butter(N,fp*2/fs); %巴特沃斯滤波器
[Eb,Ea]=ellip(N,Rp,Rs,fp*2/fs); %椭圆滤波器
[C1b,C1a]=cheby1(N,Rp,fp*2/fs); %切比雪夫 I 型滤波器
[C2b,C2a]=cheby2(N,Rs,fp*2/fs); %切比雪夫 II 型滤波器
%yulewalk 滤波器
f=[0 fp*2/fs fc*2/fs 1];
m=[1 1 0 0];
[Yb,Ya]=yulewalk(N,f,m);
%求取单位脉冲响应
delta=[1,zeros(1,511)];
fB=filter(Bb,Ba,delta);
fE=filter(Eb,Ea,delta);
fC1=filter(C1b,C1a,delta);
fC2=filter(C2b,C2a,delta);
fY=filter(Yb,Ya,delta);
%求滤波器的幅频响应
fB=20*log10(abs(fft(fB)));
fE=20*log10(abs(fft(fE)));
fC1=20*log10(abs(fft(fC1)));
fC2=20*log10(abs(fft(fC2)));
fY=20*log10(abs(fft(fY)));
%设置幅频响应的横坐标单位为 Hz
x_f=[0:(fs/length(delta)):fs-1];
plot(x_f,fB,'-',x_f,fE,'.',x_f,fC1,'-.',x_f,fC2,'+',x_f,fY,'*');
%只显示正频率部分的幅频响应
axis([0 fs/2 -100 5]);
xlabel('频率(Hz)');ylabel('幅度(dB)');
legend('butter','ellip','cheby1','cheby2','yulewalk'); grid;
FDATOOL工具
FDATOOL工具的突出优点是直观、方便,用户只需设置几个滤波器参数,即可查看滤波器频率响应、零极点图、单位脉冲响应、滤波器系数等信息
实践之FPGA实现:(可参考原书VHDL代码)
FPGA结构:
零点系数运算,极点系数运算,顶层
总结:
级联型结构因为具有运行速度快,占用资源少的优势,是IIR滤波器更为常用的实现结构
第6章 多速率滤波器的FPGA实现
速率转换:
数据速率转换:
多速率信号处理过程中的一个基本操作在于数据速率的转换。在满足抽样定理的前提下,数据速率的转换有两种途径:一种是将某一抽样率得到的数字信号经数/模转换器转换成模拟信号,而后经模/数转换器用另一个抽样率进行抽样;另一种方式是利用数字信号处理的方法直接完成抽样率的转换。显然,数字处理的方法更加直接、方便、灵活。速率转换的基本方法是抽取及插值操作。
多速率滤波器:
多速率滤波器从本质上来讲是具有线性相位的FIR滤波器,常用的多速率滤波器有多速率FIR滤波器、积分梳状(Cascaded Integrator Comb,CIC)滤波器和半带(Half Band,HB)滤波器。
多速率FIR滤波器由于信号速率很高,FIR滤波器需要工作在很高的频率上,大量的乘法器使用资源多、功耗大。
常用的结构是将CIC滤波器作为第一级滤波器,实现抽取、低通滤波;而在第二级采用FIR实现的半带滤波器。
抽取原则:
只有在抽取之后的抽样率仍然符合抽样定理的要求时,才能无失真地恢复出原来的模拟信号,否则就必须采取措施。通常采取的措施是抗混叠滤波。
CIC滤波器:
原理:
CIC滤波器是无线通信中的常用模块,一般用于数字下变频(DDC)和数字上变频(DUC)系统。
系统函数
CIC滤波器应用条件:
讨论CIC滤波器的应用条件,即是讨论其在给定过渡带条件下的通带容限及阻带容限大小。CIC滤波器通常适用于多速率信号处理中的前端抗混叠抽取滤波器,或后端抗混叠内插滤波器。IC滤波器最广泛的用处是实现抽取前端或内插后端倍数小于等于7倍(3倍、5倍或7倍)的数据速率转换滤波器
多级CIC:
为了进一步降低CIC滤波器的旁瓣电平,可采用多级CIC滤波器级联的方法。
CIC滤波器IP核:
半带滤波器:
半带滤波器特点:
半带滤波器可以使2倍抽取的每秒乘法次数比一般线性相位的FIR滤波器减少近1/2。当半带滤波器的通带很小时,这种过渡带对于多级滤波器的最后一级来说往往过大,不能满足滤波特性的总体要求,因此不适合用做多级抽取滤波器的最后一级,即后级滤波器必须有其他类型的FIR滤波器。
MATLAB设计:
b = firhalfband(n,fp);
b = firhalfband(n,win);
b = firhalfband(n,dev,'dev');
b = firhalfband('minorder',fp,dev);
b = firhalfband('minorder',fp,dev,'kaiser');
b = firhalfband(...,'high');
b = firhalfband(...,'minphase');
FPGA设计:
性能指标设计,matlab仿真,注意合理确定各级滤波器输入/输出数据位宽。
多相分解技术:
特点:
有效减少运算量、提高运算速度是多相分解技术需要解决的问题。多相分解技术的实现,最终反映出的是针对内插、抽取、分数倍转换滤波器的多相滤波器结构。
FPGA实现:
FIR滤波器核来实现多速率转换系统。
第7章 自适应滤波器
自适应滤波原理:
自适应干扰抵消:
s(n)为有用信号,N1(n)为叠加噪声,N2(n) 为与N1(n)相关的噪声信号。
N2(n)经过自适应滤波器,产生y(n),即N1(n)的最佳估计。原始信号减去y(n),=,即产生了s(n)的最佳估计e(n)。
自适应预测:
若将自适应干扰抵消器中的输入信号用有用信号的时延来取代,则构成自适应预测器。当完成自适应调整后,将自适应滤波器的参数复制到预测滤波器上,那么后者的输出便是对有用信号的预测,预测时间与时延时间相等。
自适应预测的应用之一是分离窄带信号和宽带信号。若输入端加入的是一个窄带信号S N (n )和一个宽带信号S B (n )的混合信号,由于窄带信号的自相关函数R N (k )比宽带信号的自相关函数R B (k )的有效宽度要短些,当延迟时间选为k B <Δ <k N 时,信号S B (n )与S B (n −Δ)将不再相关,而S N (n )与S N (n −Δ )仍然相关,自适应滤波器输出的将只是S N (n )。
自适应建模:
正向建模,逆向建模。
误差准则:
最小均方误差(Least Mean Square,LMS)准则和递推最小均方(Recursive Least-mean Square,RLS)准则是最常用的准则。
最大后验概率(Maximum Posteriori Probability,MAP),最大似然(Maximum Likelihood,ML)准则,均方误差(Mean Square,MS)准则,线性均方误差(Liner Mean Square,LMS)准则。
算法比较:
维纳-霍夫方程只是给出了理论上的最佳解,还无法在实际工程中进行应用。如果自适应滤波器只停留在理论阶段,显然对工程实践没有多大的意义,LMS算法、RLS算法等各种自适应算法正是为解决工程应用问题而被提出的。
RLS算法能实现快速收敛。当工作环境处于时变状态时,RLS算法具有较好的性能。但增加计算复杂度和牺牲稳定性。
LMS算法来说,并不会因为工作环境的变化而额外增加运算复杂度或出现稳定性问题。
LMS算法:
LMS算法其实是一组递推公式,通过循环迭代来求解最佳权矢量,以达到误差信号的均方值为最小的目标,只需要加减法和乘法。
符号LMS提高运算速度,节约硬件资源。误差大,收敛性能降低。
FPGA实现
自适应线性滤波器FPGA实现:
自适应线性滤波器中的滤波器部分其实是FIR滤波器,且FIR滤波器的各抽头系数由LMS算法进行实时调整,最终使FIR滤波器的输出信号收敛到所需的信号上。
通道失配校正:
注入信号同时送至参考通道和待校正通道,当LMS算法收敛后,参考信号与经校正后的通道输出信号之间的均方差值趋向最小。
自适应均衡器FPGA实现:
基于自适应均衡技术的均衡器装置,能够基于对信道特性的测量随时调整自己的系数,以适应信道特性的变化,消除码间干扰。
自适应均衡器一般包含两种工作模式,即训练模式和跟踪模式。均衡器从调整参数至形成收敛,整个过程是均衡器算法、结构和通信变化率的函数。为了能有效地消除码间干扰,均衡器需要周期性地做重复训练。在数字通信系统中用户数据是被分为若干段并被放在相应的时间段中传送的,每当收到新的时间段数据,均衡器将用同样的训练序列进行修正。在自适应均衡器算法中,训练序列即为算法的期望信号。
智能天线阵FPGA实现:
智能天线(Smart Antenna)是指采用天线阵列,根据信号的空间特性,能够自适应调整加权值,以调整其方向图,形成多个自适应波束,达到抑制干扰、提取信号目的的天线。智能天线的原理是将无线电的信号导向某个具体的方向,产生空间定向波束,使天线主波束对准用户信号到达方向(Direction of Arrival,DOA),旁瓣或零陷对准干扰信号到达方向,达到充分高效利用移动用户信号并删除或抑制干扰信号的目的。
自适应陷波器FPGA实现:
陷波器也是一种滤波器,其主要特点在于对输入信号中的某些已知的频率信号进行滤除。这里所说的已知频率信号,是指已知干扰信号的频率,不知信号的相位和幅度信息。自适应陷波器,就是可以根据干扰频率信号的相位和幅度,自适应地调整滤波器系数,跟踪其参数变化,保持对干扰信号的有效滤除。
FPGA实现总结:
在FPGA实现过程中,关键在于清楚掌握算法实现过程中各数据变量的变化范围,并以此确定各中间变量的数据字长及小数点位置,同时还需根据各运算步骤所需的运算量,合理分配各时钟周期内的运算量,以提高系统的整体运算速度。