
数字信号处理课程设计...doc
29页word课程设计报告 课程名称: 数字信号处理 课题名称: 语音信号的处理与滤波姓 名: 学 号: 院 系: 专业班级: 指导教师: 完成日期: 2013年7月2日 目录第1局部 课程设计报告………………………………………3一.设计目的……………………………………………3二.设计内容……………………………………………3三.设计原理……………………………………………3四.具体实现……………………………………………51. 录制一段声音…………………………………52. 巴特沃斯滤波器的设计………………………83. 将声音信号送入滤波器滤波…………………134. 语音信号的回放………………………………195. 男女语音信号的频谱分析……………………196. 噪声的叠加和滤除……………………………22五. 结果分析……………………………………………27第2局部 课程设计总结………………………………28一. 参考文献……………………………………………28第1局部 课程设计报告一.设计目的 综合运用本课程的理论知识进展频谱分析以与滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进展实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。
二.设计内容录制一段个人自己的语音信号,并对录制的信号进展采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换法设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进展滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进展比照,分析信号的变化;回放语音信号;换一个与你性别相异的人录制同样一段语音内容,分析两段内容一样的语音信号频谱之间有什么特点;再录制一段同样长时间的背景噪声叠加到你的语音信号中,分析叠加前后信号频谱的变化,设计一个适宜的滤波器,能够把该噪声滤除; 三.设计原理1.在Matlab软件平台下,利用函数wavrecord(),wavwrite(),wavread(),wavplay()对语音信号进展录制,存储,读取,回放y=fft(x)对采集的信号做快速傅立叶变换,并用[h1,w]=freqz(h)进展DTFT变换3.掌握FIR DF线性相位的概念,即线性相位对与零点的约束,了解四种FIR DF的频响特点4.在Matlab中,FIR滤波器利用函数fftfilt对信号进展滤波5.抽样定理 连续信号经理想抽样后时域、频域发生的变化〔理想抽样信号与连续信号频谱之间的关系〕 理想抽样信号能否代表原始信号、如何不失真地复原信号即由离散信号恢复连续信号的条件〔抽样定理〕 理想采样过程描述:时域描述:频域描述:利用傅氏变换的性质,时域相乘频域卷积,假设如此有与的关系:理想抽样信号的频谱是连续信号频谱的周期延拓,重复周期为Ws(采样角频率)。
如果:即连续信号是带限的,且信号最高频率不超过抽样频率的二分之一,如此可不失真恢复奈奎斯特采样定理:要使实信号采样后能够不失真复原,采样频率必须大于信号最高频率的两倍:四.具体实现在MATLAB中用wavrecord、wavread、wavplay、wavwrite对声音进展录制、读取、回放、存储程序如下:Fs=8000; %抽样频率time=3; %录音时间fprintf('按Enter键录音%ds',time); %文字提示pause; %暂停命令fprintf('录音中......');x=wavrecord(time*Fs,Fs,'double'); %录制语音信号fprintf('录音完毕'); %文字提示fprintf('按Enter键回放录音'); pause; %暂停命令wavplay(x,Fs); %按任意键播放语音信号wavwrite(x,Fs,'C:\Users\acer\Desktop\数字信号\sound.wav'); %存储语音信号N=length(x);%返回采样点数df=fs/N;%采样间隔n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%频带宽度figure(2);subplot(2,1,1);plot(x);%录制信号的时域波形title('原始信号的时域波形');%加标题ylabel('幅值/A');%显示纵坐标的表示意义grid;%加网格y0=fft(x);%快速傅立叶变换figure(2);subplot(2,1,2);plot(f,abs(y0(n1)));%原始信号的频谱图title('原始信号的频谱图');%加标题xlabel('频率w/pi');%显示横坐标表示的意义ylabel('幅值 ');%显示纵坐标表示的意义title('原始信号的频谱图');%加标题grid;%加网格图1.1 原始信号的时域与频谱图针对实际发出声音落后录制动作半拍的现象,如何拔除对无效点的采样的问题: 出现这种现象的原因主要是录音开始时,人的反响慢了半拍,导致出现了一些无效点,而后而出现的无效的点,主要是已经没有声音的动作,先读取声音出来,将原始语音信号时域波形图画出来,根据己得到的信号,可以在第二次读取声音的后面设定采样点,取好有效点,画出滤除无效点后的语音信号时域波形图,比照可以看出。
这样就可以解决这个问题x=wavread('C:\Users\acer\Desktop\数字信号\sound.wav', [4000,24000] );%从4000点截取到24000完毕plot (x);%画出截取后的时域图形title('截取后的声音时域图形');%标题xlabel('频率');ylabel('振幅') ;grid; %画网格图1.2 去除无效点MATLAB程序如下滤波器图如图3.3所示低通滤波fp=1000;fs=1200;Fs=22050;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,Fs1);figure(1);[h,w]=freqz(Bz,Az,512,Fs1*22050);plot(w,abs(h));title('巴特沃斯低通滤波器');xlabel('频率〔HZ〕');ylabel('耗损〔dB〕');gridon;图2.1 巴特沃思低通滤波器MATLAB程序如下。
滤波器图如图3.5所示高通滤波fp=4800;fs=5000;Fs=22050;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;T=1;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'high','s');[Bz,Az]=bilinear(B,A,Fs1);figure(1);[h,w]=freqz(Bz,Az,512,Fs1*22050);plot(w,abs(h));title('巴特沃斯高通滤波器');xlabel('频率〔HZ〕');ylabel('耗损〔dB〕');grid on;MATLAB程序如下滤波器图如图3.7所示带通滤波fp=[1200,3000];fs=[1000,3200];Fs=8000;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;T=1;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,Fs1);figure(4);[h,w]=freqz(Bz,Az,512,Fs1*1000);plot(w,abs(h));title('巴特沃斯带通滤波器');xlabel('频率〔HZ〕');ylabel('耗损〔dB〕');grid on;3.将声音信号送入滤波器滤波x=wavread('C:\Users\acer\Desktop\数字信号');%播放原始信号wavplay(x,fs); %播放原始信号N=length(x);%返回采样点数df=fs/N;%采样间隔n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%频带宽度figure(4);subplot(4,2,1);plot(x);%录制信号的时域波形title('原始信号的时域波形');%加标题ylabel('幅值/A');%显示纵坐标的表示意义grid;%加网格y0=fft(x);%快速傅立叶变换subplot(4,2,3);plot(f,abs(y0(n1)));%原始信号的频谱图title('原始信号的频谱图');%加标题xlabel('频率w/pi');%显示横坐标表示的意义ylabel('幅值 ');%显示纵坐标表示的意义title('原始信号的频谱图');%加标题grid;%加网格3.1低通滤波器滤波fs=8000;beta=10.056;wc=2*pi*1000/fs;ws=2*pi*1200/fs;width=ws-wc;wn=(ws+wc)/2; n=ceil(12.8*pi /width);h=fir1(n,wn/pi,'band',kaiser(n+1,beta));[h1,w]=freqz(h);ys=fftfilt(h,x);%信号送入滤波器滤波,ys为输出fftwave=fft(ys);%将滤波后的语音信号进展快速傅立叶变换figure(4);subplot(4,2,2);%在四行两列的第二个窗口显示图形plot(ys);%信号的时域波形title('低通滤波后信号的时域波形');%加标题xlabel('频率w/pi');ylabel('幅值/A');%显示标表示的意义grid;%网格subplot(4,2,4); %在四行两列的第四个窗口显示图形plot(f, abs(fftwave(n1)));%绘制模值xlabel('频率w/pi');yl。
