基于MATLAB的FIR数字滤波器设计分析.pdf

上传人:白大夫 文档编号:5433425 上传时间:2020-05-09 格式:PDF 页数:11 大小:307.37KB
返回 下载 相关 举报
基于MATLAB的FIR数字滤波器设计分析.pdf_第1页
第1页 / 共11页
基于MATLAB的FIR数字滤波器设计分析.pdf_第2页
第2页 / 共11页
基于MATLAB的FIR数字滤波器设计分析.pdf_第3页
第3页 / 共11页
基于MATLAB的FIR数字滤波器设计分析.pdf_第4页
第4页 / 共11页
基于MATLAB的FIR数字滤波器设计分析.pdf_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于MATLAB的FIR数字滤波器设计分析.pdf》由会员分享,可在线阅读,更多相关《基于MATLAB的FIR数字滤波器设计分析.pdf(11页珍藏版)》请在三一文库上搜索。

1、1 数字信号处理课程设计报告 课设名称:基于MATLAB 的 FIR 数字滤波器设计 学院:信息工程 专业:通信工程 班级:2012159 学号:201215910 姓名:张孟承 辅导老师:李亚萍陈黎霞 时间:2015.12.21 2015.12.30 2 基于MATLAB 的FIR数字滤波器设计 摘要: 论文针对窗函数法、 频率采样法和最优化设计法三种设计方法,采用MATLAB 进行FIR滤波器的设计与仿真,并比较了三种方法的特点。结果表明,在同样的 设计指标下,利用等波纹切比雪夫逼近法则的设计可以获得最佳的频率特性和衰 耗特性,具有通带和阻带平坦,过渡带窄等优点。 关键词:FIR 滤波器;

2、 MATLAB; 频率采样法; 一、设计目的 本次课程设计的目的是利用MATLAB 对语音信号进行数字信号处理和分析,要 求学生对语音信号进行频谱分析,并对采集语音信号加入干扰, 对加入信号后的 频谱进行频谱分析, 设计合适的滤波器滤除噪声,恢复原信号, 学会 GUI界面设 计方法,掌握基本操作原理。 二设计要求 1. 采集一段语音信号,并对其频谱进行分析。 2. 设计滤波器,可以选用高通,低通或带通滤波器,滤除噪声,分析滤波后信号 的时域或频域特征。 3. 播放三段语音对比频谱,分析其异同。 三 FIR 数字滤波器设计 FIR滤波器设计的任务是选择有限长度的( )h n,使传输函数() jw

3、 H e满足一定 的幅度特性和线性相位要求。 由于FIR 滤波器很容易实现严格的线性相位,所以 FIR 数字滤波器设计的核心思想是求出有限的脉冲响应来逼近给定的频率响应。 设计过程一般包括以下三个基本问题: (1) 根据实际要求确定数字滤波器性能指标; (2) 用一个因果稳定的系统函数去逼近这个理想性能指标; (3) 用一个有限精度的运算去实现这个传输函数。 频率采样法: 频率采样法是从频域出发,根据频域采样定理,对给定的理想滤波器的频率响 3 应() jw H e加以等间隔的抽样,得到( ) d hk 。 而在各采样点间的频率响应则是其的加权内插函数延伸叠加的结果。但对于 一个无限长的序列,

4、用频率采样法必然有一定的逼近误差, 误差的大小取决于理 想频响曲线的形状 , 理想频响特性变换越平缓, 则内插函数值越接近理想值, 误差越小。为了提高逼近的质量, 可以通过在频率相应的过渡带内插入比较连续 的采样点,扩展过渡带使其比较连续,从而使得通带和阻带之间变换比较缓慢, 以达到减少逼近误差的目的。 选取 w0,2内 N 个采样点的约束条件为: ( )() ()() H kHNk mNm01kN (3-3) (1)增大阻带衰减三种方法: 1)加宽过渡带宽,以牺牲过渡带换取阻带衰减的增加。 2)过渡带的优化设计 利用线性最优化的方法确定过渡带采样点的值,得到要求的滤波器的最佳逼 近(而不是盲

5、目地设定一个过渡带值) 。 3)增大 N。如果要进一步增加阻带衰减,但又不增加过渡带宽,可增加采 样点数 N 。代价是滤波器阶数增加,运算量增加。 直接从频域进行设计,物理概念清楚,直观方便;适合于窄带滤波器设计, 这时频率响应只有少数几个非零值,但是截止频率难以控制。 典型应用:用一串窄带滤波器组成多卜勒雷达接收机,覆盖不同的频段, 多 卜勒频偏可反映被测目标的运动速度。 四 GUI设计效果图 图 4.GUI 效果初始界面图 4 五课程设计的具体实现 1、 信号的采集 要求录制一段语音信号,并对录制的信号进行采样。在MATLAB中可以使用 wavread()函数完成。 2、 语音信号的读入与

6、打开 在 MATLAB 中 wavread(); 用于读取语音, 采样值放在向量y 中,fs 表示采样频率 (Hz) ,bits表示采样位数。 sound() ;用于语音的播放,用于对声音的回放。 3、 语音信号的 FFT变换 FFT即为快速傅氏变换,是离散傅氏变换的快速算法,在MATLAB 的信号处理工 具箱中函数 FFT用于快速傅立叶变换。 其调用格式为 y=fft(x), 其中,x 是序列, y 是序列的 FFT ,x 可以为一向量或矩阵,若x 为一向量, y 是 x 的 FFT且和 x 相同长度;若 x 为一矩阵,则 y 是对矩阵的每一列向量进行FFT 。函数 FFT的另 一种调用格式

7、为y=fft(x,N),式中, x,y 意义同前, N 为正整数。函数执行N 点的 FFT ,若 x 为向量且长度小于N,则函数将 x 补零至长度 N ;若向量 x 的长 度大于 N ,则函数截短 x 使之长度为 N;若 x 为矩阵,按相同方法对 x 进行处理。 对语音信号进行 FFT变换就是为了得到它的频域的图形, 便于从图中观察出信号 的幅度等特性。 4、含噪信号的合成 在 MATLAB 软件平台下,给原始的语音信号叠加上噪声,此次课程设计为三个正 弦波的叠加。绘制出叠加噪声之后的语音信号时域图形及频域图形,在视觉上 与原始信号图形对比,也可以通过Windows 播放软件或者是利用MATL

8、AB 中的 sound() 函数从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改 5 变。 5、 利用 FIR 滤波器滤波 利用窗函数法设计FIR 低通滤波器, 对合成的含噪信号进行滤波, 绘出滤波后的 时域波形和频谱图, 并对滤波前后的信号进行对比,分析信号的变化; 并从理论 上进行分析。 图 5.1 原始界面 图 5.2 原始信号时域频域波形 6 图 5.3 加入噪声后信号时域频域波形 图 5.4 滤波后信号时域频域波形 7 图 5.5 滤波器参数图 六心得体会 通过本次课程设计我加深了对滤波器的理解,掌握了基本滤波器的设计方法。 通过结果的对比分析我们可以知道滤波后的波形中噪声

9、很明显的被衰弱了,声音 的噪声也不那么明显, 并且滤波器实验阶数越高, 滤波效果越明显从频谱图中我 们还可以看出声音的能量信号主要集中在低频部分,说明高频语音信号被滤出, 滤波器达到既定要求。在此感谢同学和老师在本次设计中给予我的帮助。 七附带程序代码 function varargout = untitled(varargin) gui_Singleton = 1; gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, untitled_OpeningFcn, . g

10、ui_OutputFcn, untitled_OutputFcn, . gui_LayoutFcn, , . gui_Callback, ); if nargin 8 end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end handles.output = hObject; guidata(hObject, handles); if strcmp(get(hObject,Visible),off) end varargou

11、t1 = handles.output; function pushbutton1_Callback(hObject, eventdata, handles) popup_sel_index = get(handles.popupmenu1, Value); global f x fs bits normal n x2 X2 z; switch popup_sel_index case 1 x,fs,bits=wavread(Windows.wav); x=x(:,1); set(handles.axes1,Visible,on); cla reset; axes(handles.axes1)

12、;plot(x);title(原始信号波形 );xlim(0,60000); len=length(x)/2; X=fft(x); f=1:len*(fs)/len; f=f; set(handles.axes2,Visible,on); 9 axes(handles.axes2);plot(f,abs(X);title(原 始 信 号 频 谱 );ylim(0,250); case 2 normal=x/max(x); sound(normal,fs,bits); case 3 ns1=7000;%高频噪声 ns2=8000;%高频噪声 ns3=9000;%高频噪声 N=size(x); n

13、=1:N; T=1/fs; nose1=sin(2*pi*ns1*n*T); nose2=sin(2*pi*ns2*n*T); nose3=sin(2*pi*ns3*n*T); nose1=nose1; nose2=nose2; nose3=nose3; for i=1:size(x) x2(i)=x(i)+0.004*nose1(i)+0.004*nose2(i)+0.004*nose3(i); end axes(handles.axes1);cla reset;plot(x2);title(加噪声后语音信 号波形 );xlim(0,60000); X2=abs(fft(x2); axes(

14、handles.axes2);plot(X2);title(加 噪 声 后 语 音 信 号 频 谱 );xlim(0,60000);ylim(0,250);text(8000,100,7000Hz噪声 );text(9000,60,8000Hz噪声);text(10000,30,9000Hz噪声); case 4 normal2=x2/max(x2); 10 sound(normal2,fs,bits); case 5 N=81; Wn=0.2; b=fir1(N,Wn); z=filter(b,1,x2); axes(handles.axes1);plot(z);title(FIR滤 波 后

15、 信 号 波 形 );xlim(0,60000); Z=fft(z); axes(handles.axes2);plot(abs(Z);title(FIR滤 波 后 信 号 频 谱 );xlim(0,60000);ylim(0,250); case 6 xout=z/max(z); sound(xout,fs,bits); end %- function FileMenu_Callback(hObject, eventdata, handles) %- function OpenMenuItem_Callback(hObject, eventdata, handles) file = uige

16、tfile(*.fig); if isequal(file, 0) open(file); end %- function PrintMenuItem_Callback(hObject, eventdata, handles) % hObject handle to PrintMenuItem (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) printdlg(hand

17、les.figure1) 11 %- function CloseMenuItem_Callback(hObject, eventdata, handles) selection = questdlg(Close get(handles.figure1,Name) ?,. Close get(handles.figure1,Name) .,. Yes,No,Yes); if strcmp(selection,No) return; end delete(handles.figure1) if ispc end set(hObject, String, 载入源波并解析 , 播放源波 , 加入噪声 , 播 放加入噪声 ,滤波解析 ,播放滤波 );

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1