视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
语音信号的处理与滤波
2025-10-06 14:45:45 责编:小OO
文档
广西科技大学

数字信号处理  课程设计

题目:语音信号的处理与滤波(难度系数:0.8)

系    别: 计算机工程学院          

专   业 :  通 信 工 程      

班    级:                     

学   号 :                     

姓   名 :                    

指导教师:                   

日      期:                

目 录

摘要:    3

一.设计内容    3

二.设计目的    4

三.基本步骤    4

四、相关原理知识    5

五、实现过程    9

1.录制声音    9

2.分别取8000个和16000个数据进行频谱分析,得到幅度和相位谱,比较二者异同并分析原因    11

3.滤波器的设计    13

4.对声音进行滤波    14

5.把处理后的所有数据存储为声音文件,与原始声音进行比较    15

六、心得体会    16

七、参考文献    17

 

摘要:

 本次设计主要是利用MATLAB工具对自己的语音进行录制,然后设计IIR滤波器,并通过所设计的滤波器进行语音信号滤波以及分析等,对以前所学的知识进行一个系统的归纳和进一步理解,并且在实际应用操作当中体会我们《数字信号处理》这门课程的相关知识点。

一、设计内容

1. 设计题目一: 语音信号的处理与滤波(难度系数:0.8)

1.熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数。

2.在MATLAB环境中,使用声音相关函数录制2秒左右自己的声音,抽样率是8000Hz/s。(考虑如何解决一个实际问题:录制刚开始时,常会出现实际发出声音落后录制动作半拍的现象,如何排除对这些无效点的采样?)

3.画出语音信号的时域波形;然后对语音信号进行FFT, 得到信号的频谱特性,然后分别取8000个和16000个数据进行频谱分析,得到幅度和相位谱,比较二者异同并分析原因。

4.针对电话信道(最高3500Hz),设计一个FIR或IIR滤波器进行滤波,把抽样率转变为7000Hz/s,并进行频谱分析,得到幅度和相位谱。

5. 用自己设计的IIR滤波器分别对采集的信号进行滤波比较滤波前后语音信号的波形及频谱.. 画出滤波前后的波形和频谱.加深对滤波器的了解.

6.把处理后的所有数据储存为声音文件,与原始声音进行比较。

7. 保存滤波后的语音    

二、设计目的

综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。

三、基本步骤

1.语音信号的采集

熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数,在MATLAB环境中,使用声音相关函数录制3秒左右自己的声音。(考虑如何解决一个实际问题:录制刚开始时,常会出现实际发出声音落后录制动作半拍的现象,如何排除对这些无效点的采样?)

2.语音信号的频谱分析

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

3.设计数字滤波器并画出其频率响应

给出各滤波器的性能指标:

(1)低通滤波器性能指标:fb=1000 Hz,fc=1200 Hz,As=100dB,Ap=1dB。

(2)高通滤波器性能指标:fc=4800 Hz,fb=5000 Hz As=100dB,Ap=1dB。

(3)带通滤波器性能指标:fp1=1200 Hz,fp2=3000 Hz,fsc1=1000 Hz,fsc2=3200Hz,As=100dB,Ap=1dB。

要求用窗函数法和双线性变换法设计上面要求的3种滤波器。在Matlab中,使用函数butter,cheby1等函数设计IIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。

4.用滤波器对信号进行滤波

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

5.比较滤波前后语音信号的波形及频谱

要求在一个窗口同时画出滤波前后的波形及频谱。

6.回放语音信号

在Matlab中,使用相关声音函数对声音进行回放。辨别滤波前后的声音有何变化。

四、相关原理知识

1.录音原理

Matlab中有两个函数可以用于实现录音功能 ,一个是waverecord函数调用windows音频设备进行录音,主要用于实时语音采集。第二个是使用Matlab 中的wavread函数也可以进行语音采集。不过wavread函数只能读取计算机中已经有的“.wav” 文件,也就是说必须事先使用windows的录音机等设备把有关的语音资料录制并存储为“.wav” 文件。显然wavread函数不能用于实时语音信号采集。另外语音采集的频率和精度不能改变。 回放时也有两个函数可以选用。Sound函数和wavplay,只不过后者的功能没有前者强大。不过在本设计中主要是对已有的信号进行处理,所以选用wavread录放。同时,由于信号的时域描述只能反映信号的幅值随时间的变化情况,除只有一个频率分量的简谐波外一般很难明确揭示信号的频率组成和各频率分量的大小,因此,我们要把它转换成频域来分析,它能够提供比时域信号波形更直观,丰富的信息。

2、滤波器的设计原理及设计方法

FIR滤波器的设计问题在于寻求一系统函数,使其频率响应逼近滤波器要求的理想频率响应,其对应的单位脉冲响应。

1、用窗函数设计FIR滤波器的基本方法

设计思想:从时域从发,设计逼近理想。设理想滤波器的单位脉冲响应为。以低通线性相位FIR数字滤波器为例。

                                       

一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。按照线性相位滤波器的要求,h(n)必须是偶对称的。对称中心必须等于滤波器的延时常数,即

                                                  

用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。为了消除吉布斯效应,一般采用其他类型的窗函数。

2、典型的窗函数

(1)矩形窗(Rectangle Window)

                                                     

其频率响应和幅度响应分别为:

,                  

(2)三角形窗(Bartlett Window)

                            

其频率响应为:                           

(3)汉宁(Hanning)窗,又称升余弦窗

                                  

其频率响应和幅度响应分别为:

(4)汉明(Hamming)窗,又称改进的升余弦窗

                              

其幅度响应为:      

(5)布莱克曼(Blankman)窗,又称二阶升余弦窗

               

其幅度响应为:     

(6)凯泽(Kaiser)窗

                    

其中:β是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,β越大,过渡带越宽,阻带越小衰减也越大。I0(·)是第一类修正零阶贝塞尔函数。

    若阻带最小衰减表示为,β的确定可采用下述经验公式:

                

若滤波器通带和阻带波纹相等即δp=δs时,滤波器节数可通过下式确定:

                                           

式中: 

3.利用窗函数设计FIR滤波器的具体步骤如下:

(1)按允许的过渡带宽度△ω及阻带衰减AS,选择合适的窗函数,并估计节数N:

其中A由窗函数的类型决定。

(2)由给定的滤波器的幅频响应参数求出理想的单位脉冲响应。

(3)确定延时值 

(4)计算滤波器的单位取样响应,。

(5)验算技术指标是否满足要求。

3.IIR数字滤波器

IIR数字滤波器的系统是Z的有理数,可表示为系统的设计就是要确定系数,以使滤波器达到要求.设计方法为,用模拟滤波器理论来设计数字滤波器.在IIR数字滤波器的设计中较多的采用这种方法.用计算机助设计,优化技术设计.针对电话信道我们可以设计一个IIR低通滤波器来滤我们录制的语音,用fftfilt函数可以把我们录制的语音放到设计好的滤波器进行滤波.然后angle函数求出滤波后语音的相位谱,用abs求出幅度谱. 然后再用wavwrite对滤波后的语音保存为声音文件.

五、实现过程

1.录制自己的声音文件(wav格式),内容为“数字信号课程设计,黄朝跃”

程序如下:

fs=8000;   %抽样频率

channel=1;  %1信道

t=3;         %设定录音时间为3秒钟

fprintf('按任意键后开始 %d 秒录音:',t); pause;%文字提示  %暂停命令

fprintf('录音中...');     %提示当前正在录音当中

x=wavrecord(t*fs, fs,channel,'double');      %录制自己的声音信号

fprintf('录音结束\\n');      %提示录音已经结束

wavwrite(x,fs,'F:\学习\数据信号处理\课程设计\\hcy.wav');%存储录音信号

fprintf('按任意键后回放:');pause;

wavplay(x,fs);      %播放录制的声音

下面读取原始声音,并且画出它的时域图形,程序如下:

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav',[1 20000]);        %读取声音

plot(y);                          %画出声音时域图形

title('原始声音信号时域图形');    %标题

xlabel('时间');                   %x轴坐标

ylabel('幅值');                   %y轴坐标

grid;                             %添加网格线

通过观察图形,发现在录音过程中出现了这样一个现象:录制刚开始时,出现一些无效的点,后面也出现一些无效的点。出现这种现象的原因主要是录音开始时,人的反应慢了半拍,导致出现了一些无效点,而后面出现的无效的点,主要是已经没有声音的动作。我们首先要想办法要去掉这些无效点,可以这样操作:

截取有效点程序如下:

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav',[3000 18000]);         %从3000点开始截取到18000点结束

plot(y);          %重新画出截取后的图形

title('截取后的声音时域图形');       %标题

xlabel('时间');   %x轴坐标

ylabel('幅值');    %y轴坐标

grid;              %添加网格线

2.分别取8000个和16000个数据进行频谱分析,得到幅度和相位谱,比较二者异同并分析原因。

取8000点频谱分析

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav'); %读取原始语音信号

d=fft(y,8000);                %对语音信号做8000点的FFT变换

subplot(2,2,1);                      %分割窗口

plot(abs(d));                        %绘出语音信号的幅度谱           

xlabel('频率');                       %加X轴说明

ylabel('幅值');                      %加Y轴说明

 title('8000点幅度谱');                %加图形说明

 grid;                             %添加网格

 subplot(2,2,2);                      %分割窗口

plot(angle(d));                       %绘出语音信号的相位谱           

xlabel('频率');                       %加X轴说明

ylabel('angle(d)');                    %加Y轴说明

 title('8000点相位谱');                %加图形说明

 grid;                             %添加网格

%取16000点进行频谱分析

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav ');%读取原始语音信号

d=fft(y,16000);                       %对语音信号做16000点的FFT变换

subplot(2,2,3);                      %分割窗口

plot(abs(d));                         %绘出语音信号的幅度谱           

xlabel('频率');                       %加X轴说明

ylabel('幅值');                      %加Y轴说明

 title('16000点幅度谱');               %加图形说明

 grid;                             %添加网格

 subplot(2,2,4);                     %分割窗口

plot(angle(d));                      %绘出语音信号的相位谱           

xlabel('频率');                      %加X轴说明

ylabel('angle(d)');                   %加Y轴说明

 title('16000点相位谱');              %加图形说明

 grid    

观察两图可以看出,取8000点进行频谱分析和取16000点进行频谱分析所得的幅度谱和相位谱的图形基本上是相同的;不同之处是8000点图形线比16000点的图形线梳,原因是在同样的抽样频率下,对不同点数进行频谱分析得出的幅度谱和相位谱线疏密不同,点数越多,线越密。

3.滤波器的设计:

针对电话信道我们设计一个IIR低通滤波器对我们录制的语音进行滤波,具体程序如下:

%低通滤波器设计

wp=2*1200/7000;                      %归一化通带数字频率wp

ws=2*2000/7000;                   %归一化阻带数字截止频率ws

Rp=0.5;                                 %通带波纹系数Rp

Rs=60;                                  %最小阻带衰减Rs

[N,Wn]=buttord(wp,ws,Rp,Rs);    %求阶数N和滤波器截止频率Wn

[num,den]=butter(N,Rp);               %传输分子和分母的系数

[h,w]=freqz(num,den);                   %求频率响应

subplot(2,1,1); %窗口分成2行1列绘图区,第1个区为当前活动区

plot(w/pi,abs(h));                       %二维连续图形

grid;                                 %添加网格

title('巴特沃思型低通滤波器的幅频响应');  %加图形说明

xlabel('\omega/\\pi');                    %加X轴说明(/后表示转义字符)

ylabel('振幅(幅值)');                    %加Y轴说明

subplot(2,1,2);          %窗口分成2行1列绘图区,第2个区为当前活动区

plot(w/pi,20*log10(abs(h)));             %二维连续图形

grid;                                %添加网格

title('巴特沃思型低通滤波器的幅频响应'); %加图形说明

xlabel('\\omega/\\pi');                    %加X轴说明(/后表示转义字符)

ylabel('振幅(分贝)');                   %加Y轴说明

4.对声音进行滤波:

把我们上面录制的语音放到滤波器里进行滤波,具体程序如下:

%滤滤后的幅度、相位谱图

fs=8000;

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav'); %读取原始语音信号

f=filter(num,den,y);              %滤波

f1=fft(f,1024);

subplot(2,1,1)

plot(abs(f1));                          %画出滤波后的时域图

title('滤波后的幅度谱');

grid;

subplot(2,1,2)

plot(angle(f1));                         %画出滤波后的时域图

title('滤波后的相位谱');

grid;

wavwrite(f,fs, 'F:\学习\数据信号处理\课程设计\\hcy1.wav');

5.把处理后的所有数据存储为声音文件,与原始声音进行比较

程序如下:

%原始语音与滤波后的信号比较

fs=8000;

y=wavread('F:\学习\数据信号处理\课程设计\\hcy.wav');   %读取原始语音信号

y1=wavread('F:\学习\数据信号处理\课程设计\\hcy1.wav');   %读取滤波后语音信号

yx=fft(y);

yx1=fft(y1);

subplot(2,1,1)

plot(20*log10(abs(yx)));                        

title('滤波前的相对幅度谱');

subplot(2,1,2);

plot(20*log10(abs(yx1)));                        

title('滤波后的相对幅度谱');

结论:通过滤波前后两种信号的比较, 它们的幅度谱基本上是一样的,只是有些地方不同。还有原始声音信号比滤波后的信号清晰,滤波后的声音显得比较低沉,因为原始信号经过低通滤波器后,低通滤波器已经把信号高频部分滤掉了,只剩下低频部分

六、心得体会

  《数字信号处理教程》这门课是我们通信专业的专业课,是一门以数学为基础,推理性很强的学科。因此我们在学习这门课的时候,学要细心和耐心。这次课程设计是用学过的数字信号理论为依据,用MATLAB代码实现,通过这次课程设计,感触特别多,也学到了很多东西。首先,为了完成这次的课程设计,从图书馆借了很多有关这次设计的参考书,对这些参考书的有关内容都做了认真的分析,了解了一些函数的用法。其次,通过本次课程设计,使我们对信号的采集,处理,传输,显示,存储和分析等有一个系统的掌握和理解。同时可以看到滤波器在语音处理的重要性,学到了很多滤波器的设计方法,对MATLAB这个软件有了进一步的了解,巩固和运用在数字信号处理课程中所学的理论知识和实验技能,掌握最基本的数字信号处理的理论和方法,提高了自己的发现问题,分析问题和解决问题的能力。再次,在做课程设计的过程中会遇到很多的困难,在困难面前不要放弃,只要有细心和耐心,坚持下去会达到想要的设计结果。最后,无论做什么课程设计,都需要要有一定的理论知识作为基础,同时通过这次课程设计,我对于以前所学的数字信号处理知识有了更深的理解。

七、参考文献:

 [1]MATLAB6x.信号处理      清华大学出版社, 2002年5月第一版  

                              邹鲲   袁俊泉  龚享铱    编著

 [2]MATLAB在信号处理中的应用(第二版 )    

清华大学出版社,2008年1月

薛年喜编著

[3]信号分析与处理-MATLAB语言及应用. 

长沙:国防科技大学, 2000

黄文梅,熊桂林,杨勇编著.

[5] MATLAB信号处理详解.

 北京:人民邮电出版社, 2001年9月

                                              陈亚勇等编著.下载本文

显示全文
专题