FIR滤波器的实现
FIR滤波器具有严格的线性相位,依据的离散卷积公式:,
其中N为滤波器阶数。FIR滤波器的设计的关键在于设计出恰当的样值响应函数h(n),h(n)可以选择加窗法、等纹波法等方法进行设计。本文是基于等纹波法设计的h(n),函数h(n)序列数据通过MATLAB计算得到。
1. 利用MATLAB中FDATool工具获得样值响应函数h(n),设置好恰当的参数;
2. 利用上面的离散卷积公式在MATLAB中编写代码(因h(n)序列数据已导出,故可直接改写成C),如下:
load('Oxygen.mat');
x=val(1,:);
figure
plot(x);
load('FIR_Equiripple_Coeff20.mat');
h1=Num;
h1_len=length(h1);
x_len=length(x);
convolution=zeros(1,h1_len+x_len-1);
for i=1:1:h1_len+x_len-1
for j=1:1:h1_len
if i-j>=0&&i-j<x_len
convolution(1,i)=convolution(1,i)+h1(1,j)*x(1,i-j+1);
end
end
end
figure
plot(convolution);
y1=zeros(1,x_len);
for k=1:1:x_len
y1(1,k)=convolution(1,k+(h1_len-1)/2);
end
figure
plot(y1);
其中,x为待滤波数据(存放在了文件'Oxygen.mat'中),h1为样值响应函数h(n)序列数据(存放在了文件'FIR_Equiripple_Coeff20.mat'中),convolution为滤波后数据,y1是截取convolution中的有效数据。
原始数据:
滤波后数据: