课程设计

  • 格式:doc
  • 大小:1.30 MB
  • 文档页数:24

山东轻工业学院课程设计任务书学院电子信息与控制工程学院专业通信工程姓名王光龙班级通信09-1 学号200902041017 题目简单语音处理系统设计主要内容:在一个正常的听觉过程中,声波从外耳经由中耳到达耳蜗,在那里声信号被转换成电脉冲并传向大脑。

大多数的严重听力损伤病例都有耳蜗声电转换功能损坏这一问题存在。

人工耳蜗起到了模拟和替代从外耳到内耳的整体听觉功能的作用。

语音信号处理器就是人工耳蜗的大脑。

了解人工耳蜗中语音信号处理的原理,综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,模拟人工耳蜗中语音信号处理的过程对语音信号进行处理,从而加深对所学知识的理解,建立概念。

录制一段语音信号,确定采样频率;画出采样得到信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法(或等波纹最佳逼近法)、双线性变换法或其他设计方法设计一组滤波器,画出滤波器的频率响应;然后用设计的一组滤波器对采集的信号进行滤波,放大(放大倍数由增益确定),检测各路信号时域包络;然后将各路信号通过一定的方式叠加在一起,合成原信号,绘制时域波形,频谱,并进行回放。

基本要求(1)掌握数字信号处理的基本概念、基本原理和基本方法;掌握DFT对模拟信号进行频谱分析的方法;确定系统的采样频率;掌握windows环境下进行语音信号采集数据的方法;(2)掌握设计FIR和IIR数字滤波器的方法;FDATool工具的应用;(3)设计出系统模块图,记录仿真结果;(4)对结果进行分析,写出设计报告。

主要参考资料[1]高西全,丁玉美. 数字信号处理(第三版). 西安电子科技大学出版社. 2009.01[2]A.V.奥本海姆,R.W.谢弗. 离散时间数字信号处理.(第二版) . [3]胡广书. 数字信号处理. 清华大学出版社.[4]语音信号处理方面、人工耳蜗方面的参考资料完成期限:自 2012 年 6 月 28 日至 2010 年 7 月 13 日指导教师:张凯丽教研室主任:孙宝江摘要数字信号处理是一门以算法为核心、理论和实践性较强的学科。

是通信工程专业的一门重要的专业基础课。

为了巩固所学的数字信号处理理论知识,理解信号的采集、处理、传输、显示和存储过程以及培养运用专业基础知识,解决实际工程技术问题的能力,本次课程设计要求设计一个基于MATLAB 的语音处理系统以实现对语音信号的滤波。

滤波器按频率划分有低通、高通、带通、带阻、全通等类型。

经过滤波器处理后,不仅滤除掉了原信号的部分频率分量,原信号的幅度也会有所衰减,通过对滤波前后各波形的比较,能更清楚的发现滤波器能滤除掉阻带内的频率分量而保留通带内的频率分量的作用。

在这次设计中采用了双线性变换法和窗函数法两种方法设计滤波器,用这两种方法设计的滤波器又分别采用了高通、低通、带通三种频率特性实现,从横向上和纵向上都可以进行对比,表现出各种滤波器的不同特性。

关键词数字信号处理滤波器双线性变换法窗函数法目录1 绪论 (1)2 设计目的及要求 (1)2.1 课程设计目的 (1)2.2 课程设计基本要求 (1)3 课程设计的内容 (2)3.1 语音信号的采集 (2)3.2 语音信号的频谱分析 (2)3.3 设计数字滤波器和画出其频率响应 (2)3.4 用滤波器对信号进行滤波 (2)3.5 比较滤波前后语音信号的波形及频谱 (2)3.6 回放语音信号 (2)3.7 设计系统界面 (2)3.8 运行结果和分析 (9)总结 (20)参考文献 (21)1 绪论数字信号处理(digital signal processing,DSP)是从20世纪60年代以来,随着信息学科和计算机学科的高速发展而迅速发展起来的一门新兴学科。

它的重要性日益在各个领域的应用中表现出来。

简言之,数字信号处理是把信号用数字或符号表示的序列,通过计算机或通用(专用)信号处理设备,用数字的数值计算方法处理(例如滤波、变换、压缩、增强、估计、识别等),以达到提取有用信息便于应用的目的。

数字信号处理的应用包括滤波与变换、通信、语音、语言、图像、图形、消费电子、仪器、工业控制与自动化、医疗、军事等。

其发展方向也是多方面的,包括数字汇聚、远程会议系统、融合网络、数字图书馆、图像与文本合一的信息检索业务、多媒体通信、个人信息终端等。

在本次设计中,就以设计一个数字滤波器系统为目的。

2 设计目的及要求2.1 课程设计目的(1)巩固所学的数字信号处理理论知识,理解信号的采集、处理、传输、显示和存储过程;(2)综合运用专业及基础知识,解决实际工程技术问题的能力;(3)学习资料的收集与整理,学会撰写课程设计报告。

2.2 课程设计基本要求(1)录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后设计一个信号处理系统界面。

(2)利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;3课程设计的内容3.1 语音信号的采集利用Windows下的录音机,录制一段自己的话音,时间在1 s内。

然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。

通过wavread函数的使用,学生很快理解了采样频率、采样位数等概念。

3.2 语音信号的频谱分析首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深学生对频谱特性的理解。

3.3 设计数字滤波器和画出其频率响应给出各滤波器的性能指标:(1)低通滤波器性能指标fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。

(2)高通滤波器性能指标fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。

(3)带通滤波器性能指标fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As=100 dB,Ap=1 dB。

用窗函数法和双线性变换法设计上面要求的3种滤波器。

在Matlab中,可以利用函数fir1设计FIR滤波器,可以利用函数butte,cheby1和ellip设计IIR 滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。

3.4 用滤波器对信号进行滤波用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。

3.5 比较滤波前后语音信号的波形及频谱在一个窗口同时画出滤波前后的波形及频谱。

3.6 回放语音信号在Matlab中,函数sound可以对声音进行回放。

其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。

3.7 设计系统界面为了简化界面的设计过程,在这次课程设计中采用了MATLAB中的工具GUI。

其设计过程为:(1)打开GUI窗口:File →New →GUI →Create New GUI →Blank GUI(Default) →OK(2)控件设计:在控件布局设计区放置十个Push Button控件(3)修改控件属性:选中需要修改属性的控件,双击打开属性查看器(4)保存:设置好各个控件的属性,回到GUI主窗口保存,给文件命名为why,同时why.m文件打开。

(5)设置回调函数:在why.m文件窗口中设置回函数。

这里,虽然GUI自动生成了回调函数,但是回调函数是空的,需要在why.m文件中对它进行定义说明。

该程序只需要对十个Push Button控件的回调函数进行定义说明:function pushbutton1_Callback(hObject, eventdata, handles)x1=wavread('C:\Program Files\MatLab71\work\1.wav'); %读取原始信号figure(1); %绘制原始信号的波形plot(x1);title('原始信号的时域波形');xlabel('时间轴n');ylabel('幅值A');function pushbutton2_Callback(hObject, eventdata, handles)x1=wavread('C:\Program Files\MatLab71\work\1.wav');fs=22052;f=fs*(0:511)/1024;y=fft(x1,1024);figure(2);%绘制原始信号的频谱plot(f,abs(y(1:512)));title('原始信号的频谱')function pushbutton3_Callback(hObject, eventdata, handles)[x1,fs,bits]=wavread('C:\Program Files\MatLab71\work\1.wav');sound(x1,fs); %播放原始语音信号function pushbutton4_Callback(hObject, eventdata, handles)fb=1000;fc=1200;As=100;Ap=1;fs=22050; % IIR低通滤波器x2=wavread('C:\Program Files\MatLab71\work\1.wav');Ts=1/fs;R1=10;wp=2*pi*fb/fs;ws=2*pi*fc/fs;wp1=2/Ts*tan(wp/2);ws1=2/Ts*tan(ws/2);[N,Wn]=buttord(wp1,ws1,Ap,R1,'s');[Z,P,K]=buttap(N);[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2lp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,fs);[H,W]=freqz(bz,az);figure(1)plot(W*fs/(2*pi),abs(H))xlabel('频率/Hz')ylabel('频率响应幅度')title('IIR低通滤波器')f1=filter(bz,az,x2);figure(2)subplot(2,1,1)plot(x2)title('IIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1);title('IIR低通滤波器滤波后的时域波形');sound(f1,44100);F0=fft(f1,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x2,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('IIR低通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');subplot(2,1,2)F1=plot(f,abs(F0(1:512)));title(' IIR低通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton5_Callback(hObject, eventdata, handles) fs=22050; % IIR高通滤波器x1=wavread('C:\Program Files\MatLab71\work\1.wav');Fs=22050;Ts=1/Fs;R1=50;Wp=2*pi*5000/fs;Ws=2*pi*4800/fs;Rp=1;Rl=100;Wp1=2/Ts*tan(Wp/2);Ws1=2/Ts*tan(Ws/2);[N,Wn]=cheb2ord(Wp1,Ws1,Rp,Rl,'s');[Z,P,K]=cheb2ap(N,Rl);[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2hp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,Fs);[H,W]=freqz(bz,az);figure(1)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz ')ylabel('频率响应幅度')title('IIR高通滤波器')f1=filter(bz,az,x1);figure(2)subplot(2,1,1)plot(x1)title('IIR高通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1);title(' IIR高通滤波器滤波后的时域波形');sound(f1,44100);F0=fft(f1,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('IIR高通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title(' IIR高通滤波器滤波后的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton6_Callback(hObject, eventdata, handles) % IIR带通滤波器fb1=1200,fb2=3000,fc1=1000,fc2=3200,As=100;Ap=1;fs=22050;Fs=22050;x1=wavread('C:\Program Files\MatLab71\work\1.wav');Ts=1/fs;R1=30;W1=2*fb1*pi/fs;W2=2*fc1*pi/fs;W3=2*fb2*pi/fs;W4=2*fc2*pi/fs;Wb=[W1,W3];Wc=[W2,W4];Wb1=2/Ts*tan(Wb/2);Wc1=2/Ts*tan(Wc/2);[N,Wn]=cheb2ord(Wb1,Wc1,Ap,R1,'s');[Z,P,K]=cheb2ap(N,R1);[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2bp(Bap,Aap,2100*2*pi,1800*2*pi);[bz,az]=bilinear(b,a,Fs);[H,W]=freqz(bz,az);figure(1)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz')ylabel('频率响应幅度')title(' IIR带通滤波器')f1=filter(bz,az,x1);figure(2)subplot(2,1,1)plot(x1)title('IIR带通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1);title(' IIR带通滤波器滤波前的时域波形');sound(f1,44100);F0=fft(f1,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('IIR带通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title('IIR带通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton7_Callback(hObject, eventdata, handles) %FIR低通滤波器fb=1000;fc=1200;As=100;Ap=1;fs=22050;x1=wavread('C:\Program Files\MatLab71\work\1.wav');wc=2*pi*fc/fs;wn=2*pi*(fc-fb)/fs;N=ceil((As-7.95)/(2.286*wn));beta=0.1102*(As-8.7);Win=Kaiser(N+1,beta);b=fir1(N,wc/pi,'low',Win);figure(1);freqz(b,1,512);title(' FIR低通滤波器');f2=filter(b,1,x1);figure(2)subplot(2,1,1)plot(x1)title('FIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR低通滤波器滤波后的时域波形');sound(f2,44100);F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR低通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');subplot(2,1,2)F2=plot(f,abs(F0(1:512)));title(' FIR低通滤波器滤波后的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton8_Callback(hObject, eventdata, handles) %FIR高通滤波器fc=4800;fb=5000;As=100;Ap=1;fs=22050;x1=wavread('C:\Program Files\MatLab71\work\1.wav');wc=2*pi*fc/fs; wb=2*pi*fb/fs;wn=wb-wc;N=ceil((As-7.95)/(2.286*wn))+1;beta=0.1102*(As-8.7);Win=Kaiser(N+1,beta);b=fir1(N,(fb+fc)/(2*fs),'high',Win);figure(1);freqz(b,1,512);title(' FIR高通滤波器');f2=filter(b,1,x1);figure(2);subplot(2,1,1)plot(x1)title(' FIR高通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title(' FIR高通滤波器滤波后的时域波形');sound(f2,44100);F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title(' FIR高通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');subplot(2,1,2)F2=plot(f,abs(F0(1:512)));title(' FIR高通滤波器滤波后的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton9_Callback(hObject, eventdata, handles) %FIR带通滤波器fb1=1200,fb2=3000,fc1=1000,fc2=3200,As=100;Ap=1;fs=22050;x1=wavread('C:\Program Files\MatLab71\work\1.wav');wb1=2*pi*fb1/fs;wb2=2*pi*fb2/fs;wc1=2*pi*fc1/fs;wc2=2*pi*fc2/fs;wc=pi*(fb1+fc1)/fs;wb=pi*(fb2+fc2)/fs;wn=wb-wc;N=ceil((As-7.95)/(2.286*wn))+1;beta=0.1102*(As-8.7);Win=Kaiser(N,beta);b=fir1(N,[wc,wb]);figure(1);freqz(b,1,512);title(' FIR带通滤波器');f2=filter(b,1,x1);figure(2)subplot(2,1,1)plot(x1)title(' FIR带通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title(' FIR带通滤波器滤波后的时域波形');sound(f2,44100);F0=fft(f2,1024);f=fs*(1:512)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title(' FIR带通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title(' FIR带通滤波器滤波前的频谱')xlabel('频率/Hz ');ylabel('幅值');function pushbutton10_Callback(hObject, eventdata, handles) %结束close;(6) 保存修改后的why.m文件,单击GUI主窗口工具栏中的“激活运行”按钮,在GUI界面中按下“原始信号”按键就可以看到原始信号的波形和频谱,并播放原始信号;选择滤波器种类,就可以看到原信号经过滤波器后的信号的波形与频谱,并播放该信号。