内容发布更新时间 : 2024/12/22 23:08:25星期一 下面是文章的全部内容请认真阅读。
(2)采用hamming窗设计FIR滤波器
(3)窗长增大一倍,采用hamming窗设计FIR滤波器
六.结果分析
上图为选用汉宁窗和汉明窗的FIR 滤波器的相频特性、幅频特性及单位取样响应hd(n)。
由运行得出的幅频特性可知,满足设计指标通带截止频率:ωp=0.5π;阻带截止频率:ωs=0.66π。得出的窗主瓣宽度较宽,旁瓣宽度较窄,也合乎要求。
七.专题实习心得
在本实验中,选用汉宁窗即可达到要求。窗函数法设计FIR数字滤波器是傅立叶变换的典型运用。通过上机实习,加深对数字滤波器的理解,并提高使用傅立叶变换分析解决实际问题的能力。这一阶段的实习让我体会到了能读懂程序和自己编写程序的差距是很大的,理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,经过大量的亲身实践后才能够得到更深的掌握,最终达到融会贯通的效果。
题目五
一、实验内容
录制一段自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法或双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的语音信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,用MATLAB设计一信号处理系统界面。
二、实验目的
1、掌握用滤波器处理语音信号的原理和方法。 2、掌握用matlab设计界面。
三、原理及算法概要
调用函数function pushbutton1_Callback(hObject, eventdata, handles)实现一个信号处理系统界面。选择button1时,用双线性变换法设计滤波器来对信号进行处理。读取语音信号,对语音信号进行f=8000的频率进行采样,调用函数y1=fft(x1,2048)对所采集的点做2048点FFT变换。先设计butterworth模拟滤波器,再用双线性变换法实现模拟滤波器到数字滤波器的转换。最后调用函数f1=filter(bz,az,x2)对加了噪声的语音信号进行滤波,得到滤波后的频谱图。
四.程序
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc;
fs=8000; %语音信号采样频率为8000 x1=wavread('D:\\matlab2011\\work\\shua.wav'); t=(0:length(x1)-1)/8000;
y1=fft(x1,2048); %对信号做2048点FFT变换 f=fs*(0:1023)/2048;
plot(handles.axes1,t,x1); %做原始信号的时域波形
grid on;axis tight;
title(handles.axes1,'原始语音信号
');xlabel(handles.axes1,'time(s)');ylabel(handles.axes1,'幅度'); plot(handles.axes2,f,abs(y1(1:1024))); %做原始信号的FFT频谱 grid on;axis tight;
title(handles.axes2,'原始语音信号的FFT频谱');
xlabel(handles.axes2,'Hz');ylabel(handles.axes2,'幅度');%双线性变换法设计的巴特沃斯滤波器 A1=0.05;A2=0.10;
d=[A1*cos(2*pi*3800*t)+A2*sin(2*pi*3600*t)]'; x2=x1+d;
wp=0.8*pi;ws=0.85*pi; Rp=1;Rs=15; Fs=8000;Ts=1/Fs;
wp1=2/Ts*tan(wp/2); %将模拟指标转换为数字指标 ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s'); %选择滤波器最小阶数 [Z,P,K]=buttap(N); %创建butterworth模拟滤波器 [Bap,Aap]=zp2tf(Z,P,K); [b,a]=lp2lp(Bap,Aap,Wn);
[bz,az]=bilinear(b,a,Fs); %用双线性法实现模拟到数字的转换 [H,W]=freqz(bz,az); %绘制频率响应曲线 plot(handles.axes3,W*Fs/(2*pi),abs(H)); grid on;axis tight;
xlabel(handles.axes3,'频率(Hz)');ylabel(handles.axes3,'频率响应'); title(handles.axes3,'Butterworth'); f1=filter(bz,az,x2);
plot(handles.axes4,t,x2); %画出滤波前的时域图 grid on;axis tight;title(handles.axes4,'加噪声信号滤波前的时域波形'); plot(handles.axes5,t,f1); %画出滤波后的时域图 grid on;axis tight;title(handles.axes5,'滤波后的时域波形'); y3=fft(f1,2048);y2=fft(x2,2048);
plot(handles.axes6,f,abs(y2(1:1024))); %画出滤波前的频谱图 grid on;axis tight;title(handles.axes6,'加噪声信号滤波前的频谱'); xlabel(handles.axes6,'Hz');ylabel(handles.axes6,'幅度');
plot(handles.axes7,f,abs(y3(1:1024))); %画出滤波后的频谱图 grid on;axis tight;
title(handles.axes7,'滤波后的频谱');
xlabel(handles.axes7,'Hz');ylabel(handles.axes7,'幅度');
四.实验结果
1.实验界面
2.原始信号和加噪声信号的时域、频域波形
3.巴特沃斯滤波器