FIR滤波器实际是一个乘累加的运算,切乘累加的次数由滤波器阶数决定
结构:
串行结构:将每级延时单元与相应系数的乘积累加,因此只需要一个乘法器。系统频率是除数频率的N倍(N为乘加运算的次数)
并行结构:将具有对称系数的输入数据进行累加,有多个乘法器,占资源大,但运算速度快,系统频率与数据频率相同
分布式结构:将各输入数据每一对应位产生的运算结果预先进行累加形成相应的部分积 ,然后对各部分积进行累加形成最终结果;而传统算法则是等到所有成绩结果产生之后再进行累加,从而完成整个乘加运算 系统频率是和数据频率的M倍(M为数据位宽+1)。因此当数据位宽较小时,滤波器阶数较长时,采用分布式结构可以获得很好的性能。
FIR滤波器指标:
通带最大衰减:1db ap=-20log10(1-α1) a1是matlab程序参数
阻带最小衰减: 40db as=-20log10(α2)
采样率:12.5Mhz
过渡带:其实也是截止频率 [2.5*10^6 3*10^6];
滤波器阶数:在滤波器的传递函数中有几个极点.阶数同时也决定了转折区的下降速度,一般每增加一阶(一个极点),就会增加一20dBDec(一20dB每十倍频程)。
阶数就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶数越高,滤波效果就越好,但是,阶数越高,成本也就越高,因此,选择合适的阶数是非常重要的。
阶数的计算:
这里举一个选用海明窗函数设计低通滤波器的例子。
低通滤波器的设计要求是:采样频率为100Hz,通带截至频率为3 Hz,阻带截止频率为5 Hz,通带内最大衰减不高于0.5 dB,阻带最小衰减不小于50 dB。使用海明窗函数。确定N的步骤有:
1,从上表可查得海明窗的精确过渡带宽为6.6pi/N;(在有些书中用近似过渡带来计算,这当然没有错,但阶数增大了,相应也增加计算量。)
2,本低通滤波器的过渡带是:
DeltaW=Ws-Wp=(5-3)*pi/50=.04pi (在MATLAB的滤波器设计中一般都把fs/2归一为1,而上例中fs=100,fs/2=50,所以用50来归一)
3,N=6.6pi/DeltaW=6.6pi/.04pi=165
所以滤波器的阶数至少是165。在该帖子中是用理想低通滤波器的方法来计算的,这里用fir1函数来计算,相应的程序有
fs=100; % 采样频率
wp = 3*pi/50; ws = 5*pi/50; deltaw= ws - wp; % 过渡带宽Δω的计算
N = ceil(6.6*pi/ deltaw) + 1; % 按海明窗计算所需的滤波器阶数N0
wdham = (hamming(N+1))'; % 海明窗计算
Wn=(3+5)/100; % 计算截止频率
b=fir1(N,Wn,wdham);
[H,w]=freqz(b,1);
db=20*log10(abs(H));
% 画频响曲线
plot(w*fs/(2*pi),db);title('幅度响应(单位: dB)');grid
axis([0 50 -100 10]); xlabel('频率(单位:Hz)'); ylabel('分贝')
set(gca,'XTickMode','manual','XTick',[0,3,5,50])
set(gca,'YTickMode','manual','YTick',[-50,0])