fir低通滤波器设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
滤波器设计原理
本文将介绍数字滤波器的设计基础及用窗函数法设计FIR 滤波器的方法,运用MATLAB 语言实现了低通滤波器的设计以及用CCS软件进行滤波效果的观察。读取语音文件,并加入一定的随机噪声,最后使用窗函数滤波法进行语音滤波,将加噪后的语音文件转换为.dat文件使其能和ccs软件链接,输出个阶段的时域和频域波形。
根据数字滤波器冲激响应函数的时域特性。可将数字滤波器分为两种,即无限长冲激响应( IIR) 滤波器和有限长冲激响应(FIR) 滤波器。IIR 滤波器的特征是具有无限持续时间的冲激响应;FIR 滤波器冲激响应只能延续一定时间。其中FIR 滤波器很容易实现严格的线性相位,使信号经过处理后不产生相位失真,舍入误差小,稳定等优点。能够设计具有优良特性的多带通滤波器、微分器和希尔伯特变换器,所以在数字系统、多媒体系统中获得极其广泛的应用。FIR数字滤波器的设计方法有多种,如窗函数设计法、最优化设计和频率取样法等等。而随着MATLAB软件尤其是MATLAB 的信号处理工具箱和Simulink 仿真工具的不断完善,不仅数字滤波器的计算机辅助设计有了可能而且还可以使设计达到最优化。
FIR滤波器的窗函数法的设计
采用汉明窗设计低通FIR滤波器
使用b=fir1(n,Wn)可得到低通滤波器。其中,0Wn1,Wn=1相当于0.5。其语法格式为
b=fir1(n,Wn);
采用:b=fir1(25, 0.25);
得到归一化系数:
或者在命令行输入fdatool进入滤波器的图形设置界面,如下图所示
得到系数(并没有归一化)
const int BL = 26;
const int16_T B[26] = {
-26, 33, 126, 207, 138, -212, -757, -1096, -652,
950, 3513, 6212, 7948, 7948, 6212, 3513, 950, -652,
-1096, -757, -212, 138, 207, 126, 33, -26
};
FIR滤波器的设计(Matlab)
技术指标为:采用25阶低通滤波器,汉明窗(Hamming Window)函数,截止频率为1000Hz,采样频率为8000Hz,增益40db。
下面的程序功能是:读取语音文件,并加入一定的随机噪声,最后使用窗函数滤波法进行语音滤波,将加噪后的语音文件转换为.dat文件使其能和ccs软件链接,输出个阶段的时域和频域波形。
原程序如下:
[x,fs,bits]=wavread('how.wav'); %读取语音文件
m=max(x);
normal1=x/max(x); %归一化
sound(normal1,fs,bits); %播放归一化后的语音信号indata=round(32767*normal1); %数据最大取16位的数即32768 tem1=fopen('indata.dat','w'); %打开文件保存数据
fprintf(tem1,'1651 1 0 0 0\n'); %输出文件头
fprintf(tem1,'%d\n',indata); %输出
fclose(tem1); %关闭
n = length (x); %求出语音信号的长度
X=fft(x,n); %傅里叶变换
%x2=randn(1,length(x)); %产生一与x长度一致的随机信号%sound(x2,fs,bits);
m=randn(size(x)); %产生随机噪声
x2=0.1*m+x;
X2=fft(x2,n); %傅里叶变换
normal=x2/max(x2); %归一化
chang=round(32767*normal);
sound(normal,fs,bits); %播放加噪声后的音乐
ch=fopen('chang.dat','w');
fprintf(ch,'1651 1 0 0 0\n');
fprintf(ch,'%d\n',chang);
fclose(ch);
subplot(2,2,1);plot(x);title('原始信号波形');
subplot(2,2,2);plot(abs(X));title('原始信号频谱');
subplot(2,2,3);plot(x2);title('加噪声后的语音信号波形');
subplot(2,2,4);plot(abs(X2));title('加噪声后的语音信号频谱');
%figure(2)
N=24;Wn=0.25; %海明窗滤波器
b=fir1(N,Wn);
hd = dfilt.dffir(b); %画出滤波器的频率响应图freqz(hd);
figure(3)
z=filter(b,1,x2); %对信号进行滤波
m=length(z);
Z=fft(z,m);
subplot(211);plot(z);title('FIR滤波后信号的波形');
subplot(212);plot(abs(Z));title('FIR滤波后信号的频谱');
%pause(1); %延时1秒
sound(z,fs,bits); %播放滤波后的语音信号xout=z/max(z);
xto_ccs=round(32767*xout)
fid=fopen('output2.dat','w');
fprintf(fid,'1651 1 0 0 0\n');
fprintf(fid,'%d\n',xto_ccs);
fclose(fid);
运行上面的m文件,得到下图1、图2、图3:
图 1原始信号和加噪声后的语音信号的时域和频域波形