FIR滤波器的设计与实现

上传人:ji****72 文档编号:45523721 上传时间:2018-06-17 格式:PDF 页数:13 大小:626.03KB
返回 下载 相关 举报
FIR滤波器的设计与实现_第1页
第1页 / 共13页
FIR滤波器的设计与实现_第2页
第2页 / 共13页
FIR滤波器的设计与实现_第3页
第3页 / 共13页
FIR滤波器的设计与实现_第4页
第4页 / 共13页
FIR滤波器的设计与实现_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《FIR滤波器的设计与实现》由会员分享,可在线阅读,更多相关《FIR滤波器的设计与实现(13页珍藏版)》请在金锄头文库上搜索。

1、 0 FIR 滤波器的设计与实现 一、一、 实验目的和要求实验目的和要求 1、了解 FIR(finite impulse response)滤波器的种类、基本结构、设计过程; 2、学会用窗函数法、频率采样设计法来设计 FIR 数字滤波器; 3、学会调用 MATLAB 信号处理工具箱中滤波器设计函数 4、自己编程实现 FIR 的直接实现法;并考虑实际工程中的处理效率。 5、学会使用 cooledit 软件来对音频信号做简单的处理。 二、二、 实验原理实验原理 1、FIR 数字滤波器的设计数字滤波器的设计 FIR 数字滤波器的主要设计方法有窗函数设计法和频率采样设计法, 还可以频率采样法 和窗函数

2、法结合设计。 窗函数法的频率采样法设计过程简单,计算量小,但对滤波特性的控制作用较弱,没有 明确的算法。FIR 的优化设计基于函数逼近理论,通过不同误差准则对滤波特性进行优化。 常用的算法有切比雪夫(等纹波)逼近法和最小二乘滤波算法。 2、FIR 数字滤波器的实现数字滤波器的实现 FIR 滤波器的实现通常由直接型、级联型和频率采样、快速卷积几种实现结构。本实验 使用直接型来实现,具体原理如下: 传递函数0( )N r r rH zb z可得直接实现型的差分方程为:0( )()Nr ry nb x nr三、三、 实验内容与步骤实验内容与步骤 1、已知一段已知一段 48KHZ 的语音信号(的语音信

3、号(20 秒长左右) ,试秒长左右) ,试用用 matlab 设计设计 256 阶阶 FIR 滤波器滤波器 实现实现 1KHZ 低通滤波及低通滤波及 5KHZ 高通滤波高通滤波: 实验要求没有明确给出所需设计低通、 高通滤波器的类型以及具体指标。 下面用 matlab 自带的函数 fir1 来实现 256 阶的波特沃兹滤波器。其中 wn 是截止频率归一化后的值: * %音频信号文件的读入。存为音频信号文件的读入。存为 x x,fs,bits=wavread(10s_.wav); %1.wav为已给的语音信号剪辑 %= %设计一个设计一个 fc=1kHz 的的 8 阶模拟、数字低通滤波器阶模拟、

4、数字低通滤波器 %指标指标 fs=48000Hz Fp=1000Hz % b=fir1(N,wn) %= Fp=1000; N=256; 1 wn=Fp/(fs/2); % Wn 是一个归一化频率,在滤波器设计中是用 fs/2 进行归一 figure(1) b_low=fir1(N,wn); h,w=freqz(b_low,1,512); f=w*fs/(2*pi); plot(f,abs(h),-r) xlabel(频率); ylabel(幅度); title(Butterwoth 低通滤波器); hold on %= %设计一个设计一个 fc=5kHz 的的 8 阶模拟、数字高通滤波器阶模

5、拟、数字高通滤波器 %指标指标 fs=48000Hz Fp=5000Hz % b=fir1(N,wn ,high) %= Fp=5000; N=256; wn=Fp/(fs/2); % Wn 是一个归一化频率,在滤波器设计中是用 fs/2 进行归一 b_high=fir1(N,wn,high); h,w=freqz(b_high,1,512); f=w*fs/(2*pi); plot(f,abs(h) set(gca,ylim,0 1.1); %最大频率为 Fs legend(低通 Filter,高通 Filter);%图标 hold off 2、用上述用上述滤波器的滤波器的设计结果,对给定语

6、音信号进行处理【设计结果,对给定语音信号进行处理【自己编制自己编制 my_fir_filter.m 函函 数来实现滤波, 用数来实现滤波, 用 matlab 自带的自带的 filter 函数来验证结果函数来验证结果】 , 模拟实际处理过程,】 , 模拟实际处理过程, 实现实现按帧按帧 (每每 帧长度帧长度 128 点点)处理处理 (1) my_fir_filter.m 模拟了实际处理过程,实现了按帧(每帧 128 点)处理。并且仅仅开 辟了长度为滤波器阶数 256 点的缓存区 x_temp=zeros(1,jieshu)。每次读入新的数据 x(n)时,即时地根据式子计算0( )()Nr ry

7、nb x nr。其中除了 x(n),对于其它 256 个 x(n-r)(r=1:256)个数值存储在 x_temp=zeros(1,jieshu)中。 为了减少内存中的数据计算量为了减少内存中的数据计算量,每次使用前,不需要对 x_temp 进行移位处理。只需使用一个索引 index=n,在使用时,依0( )_()Nr ry nb xtemp indexr。一旦发现index-rCount) break %数据点处理完毕,跳出循环数据点处理完毕,跳出循环 end if(mod(zhen_count,2)=1) %奇数帧奇数帧 x_temp(j)=x(i); %依次依次将将这一帧的这一帧的 12

8、8 个数据个数据存入缓存区存入缓存区的前的前 128 个位置个位置 index=j; %建立索引,每次都是直接从建立索引,每次都是直接从 x_tempindex当前的值开始算当前的值开始算 y(i)=b0* x_temp(index); for k=1:jieshu if(index-kCount) break end y(i)=num*x(i),x_temp; x_temp(1)=x(i); for k=jieshu:-1:2 x_temp(k)=x_temp(k-1); end 7 end end end %= %第第 3 种滤波处理函数,种滤波处理函数,my_filter_vector.

9、m 函数函数 %= function y=my_filter_vector(num,x) jieshu=length(num)-1; b0=num(1); b=num(2:jieshu+1); SIZE=size(x); Count=SIZE(1); zhen_count_max=(Count-mod(Count,128)/128+1;% 模 拟 实 际 , x序 列 中 , 总 共 有 zhen_count_max*128 帧数据 x_temp=zeros(1,jieshu);%开辟缓存区 i=0; y=zeros(1,Count); zhen_in=zeros(128,zhen_count

10、_max); %模拟实际,将 x 信号按帧分组,并存储于 zhen_in 数据结构中。 for zhen_count=1:zhen_count_max zhen_count; for j=1:128 i=(zhen_count-1)*128+j; if(iCount) break end y(i)=num*x(i),x_temp; x_temp=x(i),x_temp(1:jieshu-1); end end end 8 四、四、 实验结果与分析实验结果与分析 1、使用自己编制的滤波函数使用自己编制的滤波函数 my_filter.m 处理结果处理结果 (1)进行 1KHz 低通 FIR 滤波器

11、滤波后得到 %编写编写 my_fir_filter.m 文件模拟实际处理过程,按帧对文件模拟实际处理过程,按帧对 x 进行滤波处理,每帧进行滤波处理,每帧 128 点点 (2)进行 5KHz 高通 FIR 滤波器滤波后得到 %编写编写 my_fir_filter.m 文件模拟实际处理过程,按帧对文件模拟实际处理过程,按帧对 x 进行滤波处理,每帧进行滤波处理,每帧 128 点点 9 2、使用、使用 matlab 自带的滤波函数自带的滤波函数 filter.m 处理结果处理结果 (1)进行 1KHz 低通 FIR 滤波器滤波后得到 %编写编写 filter.m 文件模拟实际处理过程文件模拟实际处

12、理过程 (2)进行 5KHz 高通 FIR 滤波器滤波后得到 %编写编写 filter.m 文件模拟实际处理过程文件模拟实际处理过程 10 分析:与 1 结果相似。 3、计算机随机产生、计算机随机产生 x_noise 信号,由信号,由 100 串白噪声叠加而成(能够包含所有频率的信号) ,串白噪声叠加而成(能够包含所有频率的信号) , 让其通过滤波函数得到新的信号。对新旧信号进行让其通过滤波函数得到新的信号。对新旧信号进行 FFT 频谱分析频谱分析验证验证滤波器设计正确。滤波器设计正确。 %= %加入白噪声信号,用编写的加入白噪声信号,用编写的 my_filter.m 文件对信号进行低通滤波,

13、绘制频谱,分析文件对信号进行低通滤波,绘制频谱,分析 %= %白噪声,验证所设计滤波器的正确性白噪声,验证所设计滤波器的正确性 Xnoise=zeros(100000,1); for i=1:100 Xnoise=Xnoise+wgn(100000,1,10); end Xnoise=Xnoise/100; 再对 Xnoise 进行频谱分析 (1)低通滤波得到: 11 (2)高通滤波得到: 4、四个滤波函数的处理时间比较:四个滤波函数的处理时间比较: (1)低通)低通计时结果计时结果 12 (2)高通)高通计时结果计时结果 结果:结果:在 matlab 中,无法验证算法四的高效性。 原因:原因

14、:在在 matlab 中很好地对一些基本操作进行了优化,特别是非常擅长矩阵运算。而 函数四中虽然避免了每读一个输入 x(i)值就进行 256 次移位,大大减少了数据量,但是也同 时增加了判断语句。时间反而更长。 需要在实际底层硬件中,用 C 语言或者汇编语言来实现上诉算法,进一步验证算法四 的有效性。 5、给出设计前后的音频文件,试听并给出主观评价给出设计前后的音频文件,试听并给出主观评价 %将处理过后的音频信号,重新存储为将处理过后的音频信号,重新存储为 wav 格式。格式。 wavwrite(y_low,fs,bits,y_low_out.wav); 听经过 1KHz 低通滤波器处理过后的 y_low_out.wav 音频文件,隐约还是能够听到文字 信息,声音很低沉。 wavwrite(y_high,fs,bits,y_high_out.wav); 听经过 5KHz 高通滤波器处理过后的 y_high_out

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号