数 字 信 号 处 理
—综合实验报告
综合实验名称: 应用MatLab对语音信号进行
频谱分析及滤波
系 :
学生姓名:
班 级:
学 号:
成 绩:
指导教师:
开课时间 学年 学期
目 录
一.综合实验题目 1
二、综合实验目的和意义 1
2.1 综合实验目的 1
2.2 综合实验的意义 1
三.综合实验的主要内容和要求 1
3.2 综合实验的要求: 2
四.实验的原理 2
4.1 数字滤波器的概念 2
4.2 数字滤波器的分类 2
(1)根据单位冲激响应h(n)的时间特性分类 2
五.实验的步骤 3
下面对各步骤加以具体说明。 5.1语音信号的采集 3
5.2 语音信号的频谱分析; 3
5.3 设计数字滤波器和画出其频率响应 5
5.3.1设计数字滤波器的性能指标: 5
5.3.2 用Matlab设计数字滤波器 6
5.6 设计系统界面 19
六、心得体会 20
参考文献: 21
一.综合实验题目
应用MatLab对语音信号进行频谱分析及滤波
二、综合实验目的和意义
2.1 综合实验目的
为了巩固所学的数字信号处理理论知识,使学生对信号的采集、处理、传输、显示和存储等有一个系统的掌握和理解,再者,加强学生对Matlab软件在信号分析和处理的运用
综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。
2.2 综合实验的意义
语言是我们人类所特有的功能,它是传承和记载人类几千年文明史,没有语言就没有我们今天人类的文明。语音是语言最基本的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
现形式,是相互传递信息最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。
语音信号处理属于信息科学的一个重要分支,大规模集成技术的高度发展和计算机技术的飞速前进,推动了这一技术的发展;它是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科,因此我们进行语言信号处理具有时代的意义。
三.综合实验的主要内容和要求
3.1综合实验的主要内容:
录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号; 综合实验应完成的工作:
(1)语音信号的采集;
(2)语音信号的频谱分析;
(3)数字滤波器的设计;
(4)对语音信号进行滤波处理;
(5)对滤波前后的语音信号频谱进行对比分析;
3.2 综合实验的要求:
(1)学生能够根据设计内容积极主动查找相关资料;
(2)滤波器的性能指标可以根据实际情况作调整;
(3)对设计结果进行独立思考和分析;
(4)设计完成后,要提交相关的文档;
① 综合实验报告
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
(纸质和电子版各一份,具体格式参照学校课程设计管理规定),报告内容要涵盖设计题目、设计任务、详细的设计过程、原理说明、、频谱图的分析、调试总结、心得体会、参考文献(在报告中参考文献要做标注,不少于5篇)。
② 可运行的源程序代码(电子版)
(5)在基本要求的基础上,学生可以根据个人对该综合实验的理解,添加一些新的内容。
四.实验的原理
4.1 数字滤波器的概念:
若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。【1】
数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。【2】
4.2 数字滤波器的分类:
数字滤波器根据不同的分类
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
可以将滤波器分成不同的类别。
(1)根据单位冲激响应h(n)的时间特性分类
无限冲激响应(IIR)数字滤波器
有限冲激响应(FIR)数字滤波器[1]
(2)根据实现
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
和形式分类
递归型数字滤波器
非递归型数字滤波器
快速卷积型
(3)根据频率特性分类
低通数字滤波器、高通数字滤波器、带通数字波器
4.3 滤波器的作用:
滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的直流电【3】。对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器,其功能就是得到一个特定频率或消除一个特定频率。
五.实验的步骤
录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
下面对各步骤加以具体说明。
5.1语音信号的采集:
利用 PC机上的声卡和 Windows操作系统可以进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒读一段话,读完后停止录音,屏幕左侧将显示所录声音的长度。【1】
5.2 语音信号的频谱分析:
(1)首先画出由wavread函数采样后的信号的时域波形和它的频域响应波形;
语音信号的程序如下:
[x1,fs,bits]=wavread('c:\wudan2.wav'); %读取语音信号的数据,赋给变量x1
figure(20)
plot(x1) %做原始语音信号以44.1k采样后的时域图形
title('原始语音采样后时域信号');
xlabel('时间轴 n');
ylabel('幅值 A');
figure(21)
freqz(x1) %绘制原始语音信号采样后的频率响应图
title('原始语音信号采样后频率响应图');
运行结果:
图1
图2
(2) 对语音信号进行FFT变换,得到FFT频谱特性曲线,与原语音信号的频谱特性曲线进行比较。
语音信号FFT的程序如下:
[x1,fs,bits]=wavread(' c:\wudan2.wav'); %读取语音信号的数据,赋给变量x1
y1=fft(x1,1024); %对采样后信号做1024点FFT变换
f=fs*(0:511)/1024;
figure(19)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱')
xlabel('频率/Hz');
ylabel('幅值')
subplot(2,1,2);
plot(abs(y1(1:1024))) %采样后信号的FFT频谱图
title('原始语音信号FFT频谱')
xlabel('点数N');
ylabel('幅值');
运行结果:
图3
5.3 设计数字滤波器和画出其频率响应
5.3.1设计数字滤波器的性能指标:
① 低通滤波器性能指标fb=1000Hz,fc=1200Hz, As=100db,Ap=1db。
② 高通滤波器性能指标 fs=4800Hz,fb=5000Hz,As=100db,Ap=1db。
③ 带通滤波器性能指标 fb1=1200Hz,fb2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100db,Ap=1db。
5.3.2 用Matlab设计数字滤波器
①用双线性变换法设计上面要求的3种滤波器。在Matlab中,可以利用函数butter,cheby1和ellip设计IIR滤波器;利用Matlab中的函数frepz画出各滤波器的频率响应。【2】
②用窗函数法设计上面要求的3种滤波器。在Matlab中,可以利用函数fir1设计FIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。
5.4对语音信号进行滤波处理
用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。并比较滤波前后语音信号的波形及频谱。【4】
IIR低通滤波器程序如下:
fs=22050;
[x2]=wavread('c:\wudan2.wav');
Ts=1/fs;R1=10;
wp=2*pi*1000/fs;
ws=2*pi*1200/fs;
Rp=1;
Rl=100;
wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标
ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,R1,'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); %绘制频率响应曲线
figure(16)
plot(W*fs/(2*pi),abs(H))
grid
xlabel('频率/Hz')
ylabel('频率响应幅度')
title('IIR低通滤波器')
f1=filter(bz,az,x2);
figure(17)
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(18)
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('幅值');【5】
运行结果:
图4
图5
图6
IIR高通滤波器程序如下:
fs=22050;
x1=wavread('c:\wudan2.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(13)
plot(W*fs/(2*pi),abs(H))
grid
xlabel('频率/Hz')
ylabel('频率响应幅度')
title('IIR高通滤波器')
f1=filter(bz,az,x1);
figure(14)
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(15)
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('幅值');
运行结果:
图7
图8
图9
IIR带通滤波器程序如下:
fs=22050;
x1=wavread('c:\wudan2.wav');
Fs=22050;
Ts=1/Fs;R1=30;
fb1=1200;fb2=3000;fc1=1000;fc2=3200;fs=22050;
W1=2*fb1*pi/fs;W2=2*fc1*pi/fs;
W3=2*fb2*pi/fs;W4=2*fc2*pi/fs;
Wp=[W1,W3];
Ws=[W2,W4];
Rp=1;
Rl=100;
Wp1=2/Ts*tan(Wp/2); %将模拟指标转换成数字指标
Ws1=2/Ts*tan(Ws/2);
[N,Wn]=cheb2ord(Wp1,Ws1,Rp,R1,'s'); %选择滤波器的最小阶数
[Z,P,K]=cheb2ap(N,Rl); %创建切比雪夫模拟滤波器
[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(10)
plot(W*fs/(2*pi),abs(H))
grid
xlabel('频率/Hz')
ylabel('频率响应幅度')
title('IIR带通滤波器')
f1=filter(bz,az,x1);
figure(11)
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(12)
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('幅值'); 【6】
运行结果:
图10
图11
图12
FIR低通滤波器程序如下:
fs=10000;
x1=wavread('c:\wudan2.wav');
wp=2*pi*1000/fs;
ws=2*pi*1200/fs;
Rp=1;
Rs=100;
wdelta=ws-wp;
N=ceil(8*pi/wdelta); %取整
wn=(wp+ws)/2;
[b,a]=fir1(N,wn/pi,hamming(N+1)); %选择窗函数,并归一化截止频率
figure(7)
freqz(b,a,512);
title('FIR低通滤波器');
f2=filter(b,a,x1);
figure(8)
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(9)
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('幅值'); 【7】
运行结果:
图13
图14
图15
FIR高通滤波器程序如下:
fs=22050;
x1=wavread('c:\wudan2.wav');
wp=2*pi*5000/fs;
ws=2*pi*4800/fs;
Rp=1;
Rs=100;
wdelta=wp-ws;
N=ceil(8*pi/wdelta); %取整
wn=(wp+ws)/2;
[b,a]=fir1(N,wn/pi,'high');
figure(4)
freqz(b,a,512);
title('FIR高通滤波器');
f2=filter(b,a,x1);
figure(5)
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(6)
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('幅值'); 【9】
运行结果:
图16
图17
图18
FIR带通滤波器程序如下:
fs=22050;
x1=wavread('c:\wudan2.wav');
wp1=2*pi*1200/fs;wp2=2*pi*3000/fs;
ws1=2*pi*1000/fs;ws2=2*pi*3200/fs;
Rp=1;
Rs=100;
wp=(wp1+ws1)/2;ws=(wp2+ws2)/2;
wdelta=wp1-ws1;
N=ceil(8*pi/wdelta); %取整
wn=[wp ws];
[b,a]=fir1(N,wn/pi,'bandpass');
figure(1)
freqz(b,a,512);
title('FIR带通滤波器');
f2=filter(b,a,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)
plot(f,abs(F0(1:512)));
title('FIR带通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
运行结果:
图19
图20
图21
5.5 回放语音信号
在Matlab中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。
回放语音程序:
[x1,fs,bits]=wavread('c:\wudan2.wav'); %读取语音信号的数据,赋给变量x1
sound(x1,fs); %播放语音信号 【8】
5.6 设计系统界面
本系统界面主要采用if…else语句和menu菜单函数进行设计。
程序如下:
b=menu('请选择选项','原始信号采样后时域图和频谱图','FIR滤波器','IIR滤波器','退出');
if b==4
b==0;
end
if b==1
temp=menu('请选择选项','播放原始语音','原始语音时域图和频率响应图','原始语音频谱图及做FFT变换后频谱图','返回');
if temp==1
voice;
main;
elseif temp==2
time;
main;
elseif temp==3
pingpu;
main;
else
main;
end
elseif b==2
temp=menu('请选择选项','FIR低通滤波器','FIR高通滤波器','FIR带通滤波器','返回');
if temp==1
FIR_LP;
main;
elseif temp==2
FIR_HP;
main;
elseif temp==3
FIR_BP;
main;
else
main;
end
elseif b==3
temp=menu('请选择选项','IIR低通滤波器','IIR高通滤波器','IIR带通滤波器','返回');
if temp==1
IIR_LP;
main;
elseif temp==2
IIR_HP;
main;
elseif temp==3
IIR_BP;
main;
else
main
end
End 【10】
运行结果:
图22 图23
图24 图25
六、心得体会
通过做应用Matlab对语音信号进行谱分析及滤波这个课程设计,加深了我对数字信号处理理论知识,尤其是采样频率,频谱特性和数字滤波器的设计;另一方面,使我在原来熟悉控制系统在Matlab运用的基础上进一步学习Matlab软件在信号分析和处理的运用。在整个课程设计过程中,从分析设计题目到设计程序框图再到具体的程序代码编写,是我对课程设计有了更深刻的理解。
分析课题题目:应用Matlab对语音信号进行谱分析及滤波,考虑到几个方面的内容:(1)加强对Matlab基础知识的学习,尤其是Matlab在信号处理方面的学习,这就需要多方面查找资料,如上互联网,图书馆等;(2)加强学习信号处理知识理论,尤其是FFT频谱变换理论和各种数字滤波器设计理论;(3)要突出重点,其重点是谱分析和数字滤波器的设计和分析结果。
明确设计步骤,设计程序框图,按照框图编写程序代码,调试修改及完善。在具体编写代码的过程中,遇到了不少问题,比如设计数字滤波器所需函数的使用,归一化与非归一化的问题,各种参数的确定等等,但是通过对资料仔细的通阅和不断的调试修改,终于将课程设计完成,自己个人觉得质量还算优秀。
参考文献:
[1]徐欢,胡津津,袁媛.基于MATLAB的FIR数字滤波器的窗函数法设计与仿真[J].通化师范学院学报,2013,(4)
[2](美) 维纳?K?恩格尔, (美) 约翰?G?普罗克斯.数字信号处理[M].西安:西安交通大学出版社,2002.
[3] 韩泽欣,杨雪松.基于Matlab的数字滤波器设计[J].甘肃科技,2013,(5)
[4] 李兰英,王志超,王峰,高明,侣铁强.FIR数字滤波器设计仿真[J].哈尔滨理工大学学报,2013,(3)
[5] 韩纪庆,张磊,郑铁然.语音信号处理[M].北京:清华大学出版社,2004.
[6] 易克初,田斌,付强.语音信号处理[M].北京:国防工业出版社,2000.
[7] 周辉,董正宏.数字信号处理基础及MATLAB实现[M].北京:北京希望电子 出版社,2006.
[8] 严慧,于继明.基于Matlab的IIR数字滤波器设计[J].软件导刊,2013,(1)
[9]程佩青.数字信号处理教程(第二版)[M].北京:清华大学出版社,2001.
[10]万永革.数字信号处理的MATLAB实现(第二版)[M].北京:科学出版社,2012.