【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)-程序员宅基地

技术标签: matlab  课程设计  数字信号处理  

目录

一、目标与任务

二、原理介绍

2.1 录音原理

2.2 滤波器的设计原理及设计方法

2.3 IIR 数字滤波器设计原理

2.4 双线性变换法

三、GUI界面设计与实现

四、基于MATLAB仿真

4.1实验过程

4.2 结果分析

五、总结

5.1 函数用法总结

5.2 心得体会

六、参考文献


这个项目在我的B站上有专门的视频演示:

【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(侧重滤波)+【通信原理课程设计】基于MATLAB实现的信源编码系统仿真 +【GUI设计】_哔哩哔哩_bilibili

一、目标与任务

1、 语音信号的采集。利用 Windows 下的录音机,录制一段自己的话音,时间在 1s 内,然后在 Matlab 软件平台下,利用函数 wavread 对语音信号进行采样,记住采样频率和采样点数。

2、语音信号的频谱分析。在 Matlab 中,可以利用函数 fft 对信号进行快速傅立叶变换,得到信号的 频谱特性,要求学生首先画出语音信号的时域波形,然后对语音信号进行频谱分析。

3、设计数字滤波器和画出其频率响应给出各滤波器的性能指标; 给定滤波器的性能指标如下:

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

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

(3)带通滤波器的性能指标: fb1=1200Hz, fb2=3000Hz,fc1=1000Hz, fc2=3200Hz,As=100dB,Ap=1dB. 采用窗函数法和双线性变换法设计上面要求的 3 种滤波器,并画出滤波 器的频率响应;

4、用滤波器对信号进行滤波 ,然后用自己设计的滤波器对采集到的信号进行滤波,画出滤波后信号的 时域波形及频谱,并对滤波前后的信号进行对比,分析信号的变化;

5、回放语音信号,分析滤波前后的语音变化;设计系统界面 为了使编制的程序操作方便,设计处理系统的用户界面,在所设计的系统界面上可以实现上述要求中的包括采集、分析、滤波等全部内容,并能够选 择滤波器的类型,输入滤波器的参数、显示滤波器的频率响应等。

二、原理介绍

2.1 录音原理

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

2.2 滤波器的设计原理及设计方法

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

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

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

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

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

2、典型的窗函数

(1)矩形窗(Rectangle Window)

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

(2)三角形窗(Bartlett Window)

其频率响应为:

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

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

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

其幅度响应为:

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

其幅度响应为:

(6)凯泽(Kaiser)窗

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

若阻带最小衰减表示为As=-20log10⁡δβ 的确定可采用下述经验公式:

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

下式确定:

式中:

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

(1)按允许的过渡带宽度△ω 及阻带衰减 AS 选择合适的窗函数,并估计节数N:其中A 由窗函数的类型决定。

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

(3)确定延时值。

(4)计算滤波器的单位取样响应h(n)

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

2.3 IIR 数字滤波器设计原理

IIR 数字滤波器是一种离散时间系统,其系统函数为

​​​​​​假设 M≤ N, 当M> N时, 系统函数可以看作一个 IIR 的子系统和一个 (M-N)的FIR子系统的级联。 IIR 数字滤波器的设计实际上是求解滤波器的系数 ak  和 bk ,它是数学上的一种逼近问题, 即在规定意义上 (通常采用最小均方误差准则) 去逼近系统的特性。 如果在 S平面上去逼近, 就得到模拟滤波器; 如果在 z平面上去逼近,就得到数字滤波器。

设计通数字滤波器通常可以归纳为如图所示的两种常用方法。

 图 2-1 数字带通滤波器设计的两种方法

方法 1: 首先设计一个模拟原型低通滤波器,然后通过频率变换成所需要的模拟高通滤波器,最后再使用冲激不变法或双线性变换成相应的数字高通滤波器。

方法 2: 先设计一个模拟原型低通滤波器,然后采用冲激响应不变法或双线性变换法将它转换成数字原型低通滤波器, 最后通过频率变换把数字原型低通滤波器变换成所需要的数字高通滤波器。

本课程设计采用第一种设计方法, 先构造一个巴特沃斯模拟低通滤波器, 然后将模拟低通滤波器转换成模拟高通滤波器, 最后利用双线性变换将模拟高通滤波器转换成数字高通滤波器。

2.4 双线性变换法

为了克服冲激响应法可能产生的频率响应的混叠失真, 这是因为从 S 平面到Z平面是多值的映射关系所造成的。 为了克服这一缺点, 可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到 - π / T~π / T 之间,再用 z=esT 转换到 Z 平面上。也就是说,第一步先将整个 S平面压缩映射到 S1 平面的 - π / T~π/ T 一条横带里;第二步再通过标准变换关系 z=esT 将此横带变换到整个 Z 平面上去。 这样就使 S平面与 Z 平面建立了一一对应的单值关系, 消除了多值变换性,

也就消除了频谱混叠现象,映射关系如图 2-2

图 2-2 双线性变换的映射关系

为了将 S平面的整个虚轴 j Ω 压缩到 S1平面 j Ω 1 轴上的 - π / T 到π / T段上,可以通过以下的正切变换实现

式中 , T 仍是采样间隔。

当Ω 1 由- π / T 经过 0 变化到 π / T 时, Ω 由- ∞经过 0 变化到 +∞,也即映射了整个 j Ω 轴。将上式写成

将此关系解析延拓到整个 S 平面和 S1平面,令 j Ω =s, j Ω 1=s1,则得

再将 S1平面通过以下标准变换关系映射到 Z 平面z=esT 从而得到 S 平面和 Z 平面的单值映射关系为:

这两个关系式是 S 平面与 Z 平面之间的单值映射关系, 这种变换都是两个线性函数之比,因此称为双线性变换

首先 , 把z=eiw 可得

即 S 平面的虚轴映射到 Z 平面的单位圆。

其次,将 s=σ+jw  代入,得

因此

由此看出,当 <0 时, | z|<1 ;当 >0 时, | z|>1 。也就是说, S 平面的左半平面映射到 Z 平面的单位圆内, S平面的右半平面映射到 Z 平面的单位圆外,S平面的虚轴映射到 Z 平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。

双线性变换法优缺点: 双线性变换法与脉冲响应不变法相比, 其主要的优点是避免了频率响应的混叠现象。 这是因为 S平面与 Z平面是单值的一一对应关系。S 平面整个 j Ω 轴单值地对应于 Z 平面单位圆一周,即频率轴是单值变换关系。

这个关系重写如下:

上式表明, S平面上 Ω 与 Z 平面的 ω 成非线性的正切关系,如图 2-3 所示。

由图 2-3 看出, 在零频率附近, 模拟角频率 Ω 与数字频率 ω 之间的变换关系接近于线性关系;但当 Ω 进一步增加时, ω 增长得越来越慢,最后当 Ω →∞时,ω 终止在折叠频率 ω =π 处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。

图 2-3 双线性变换法的频率变换关系

三、GUI界面设计与实现

页面设计如图3-1所示:

图 3-1 GUI界面

四、基于MATLAB仿真

4.1实验过程

(1)加入噪声。

        向原始信号中加入正弦干扰噪声或高斯噪声,加入正弦干扰噪声后,如图4-1所示。

图 4-1 加入正弦干扰噪声前后

        加入高斯干扰噪声后,如图4-2所示。

图 4-2 加入高斯噪声前后

(2)滤波器的频谱特性

  • IIR线性滤波器

        巴特沃斯滤波器低通幅频相频特性如图4-3所示

图 4-3 巴特沃斯低通滤波器幅频相频特性

        车比雪夫滤波器高通幅频相频特性如图4-4所示

图 4-4 车比雪夫高通滤波器幅频相频特性

        椭圆滤波器带通幅频相频特性如图4-5所示

图 4-5 椭圆型带通滤波器幅频相频特性

  •  FIR窗函数滤波器

         Blackman窗低通抽样响应和频谱特性如图4-6所示

图 4-6 Blackman窗低通抽样响应和频谱

         Kaiser窗高通抽样响应和频谱特性如图4-7所示

图 4-7 kaiser窗低通抽样响应和频谱

(3)滤波前后波形

        低通滤波后,如图4-8所示。

图 4-8 低通滤波

        高通滤波后,如图4-9所示。

图 4-9 高通滤波

        带通滤波后,如图4-10所示。

图 4-10 带通滤波

4.2 结果分析

1.通过本次设计发现,当抽样率Fs大于15000Hz时,滤波器的设计除低通外,高通和带通都会出现异常,主要异常为矩阵奇异值,或者NAN、INF;而Fs小于10000Hz时,低通和带通设计正常,但高通设计会报错异常,而Fs取11025Hz时,可以实现设计需求。

2.使用巴特沃斯滤波器,低通、高通、带通滤波效果都不能实现,而切比雪夫1型滤波器和椭圆滤波器除高通外,低通和带通效果都很明显。

3.布莱克曼窗和凯塞窗在阻带衰落为100dB时设计出的滤波器性能几乎一致,且除了高通外,低通和带通对加噪后的音频滤波效果都很明显。

4.加正弦噪声时,由于本设计所加单频主要位于100Hz处,所以通过修改适当的滤波器参数指标,信噪比较大或较小时,高通和带通都能很好的滤除噪声。

5.加高斯噪声时,无论采用哪种滤波器都不能完美的滤除噪声,但由于高斯噪声的随机特性,会发现加高斯噪声后频谱会出现很多尖峰,所以采用低通滤波器,在信噪比较小,即噪声干扰很大的时候,滤波效果会很明显。

五、总结

5.1 函数用法总结

1.[n, Wnj= buttord(Wp, Ws,Rp,Rs)

其中Wp和ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值为1时代表采样频率的一半。Rp和Rs分别是通带和阻带区的波纹系数。

2.chebyl函数的用法为: [b,a]-chebyl1(n,Rp, Wn,/ftype/)

在使用chebyl函数设计IR滤波器之前,可使用cheblord函数求出滤波器阶数n和截止频率Wn, cheblord函数可在给定滤波器性能的情况下,选择契比雪夫1型滤波器的最小阶和截止频率Wn.

3.cheblord函数的用法为:[n, Wnj-cheblord(Wp, Ws,Rp,Rs)

其中Wp和Ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值为1时代表采样频率的一半。Rp和Rs分别是通带和阻带区的波纹系数。

4.butter函数的用法为:[b,a]=butter(n,Wn,/ftype/)

其中n代表滤波器阶数, Wn代表滤波器的截止频率,这两个参数可使用buttord函数来确定。buttord函数可在给定滤波器性能的情况下,求出巴特沃斯滤波器的最小阶数n,同时给出对应的截止频率Wn.

5,Butterworth模拟低通滤波器函数语句: [z,p.kj—buttap(n)

其中n为滤波器的阶数, z. p、k分别为零点、极点和增益

6. [bz, az]=impinvar (b, atC, FS t, Fp)

式中, b, a为模拟滤波器分子和分母多项式系数向量: Fs为采样频率(所滤波数据),单位Hz,缺省时为1Hz.Fp为预畸变频率(Prewarped frequency) ,是一个“匹配”频率,在该频率上,频率响应在变换前后和模拟频率可精确匹配

在MATLAB中,函数bilinear采用双线性变换法实现模拟s域至数字z域的映射,直接用于模拟滤波器变换为数字滤波器。其调用方式为:

[2zd, pd, kd]-bil inear (a, p, k,Fs)

[numd, dend]-bilinear (num, den, Fs)

式中, z,p分别为模拟滤波器零点、极点列向量: k为模拟滤波器的增益:Fs为采样频率,单位Hz. zd, pd, kd为数字滤波器的零极点和增益.num, den分别为模拟滤波器传递函数分子和分母多项式系数向量,模拟滤波器传递函数具有下面的形式:

H(s)-mum(5) mum(1)s+ +mum (mn)s+ num (nn+1)

den (s) den()s"..+den(nd )s + den (nd +1)

nund和dend分别为数字滤波器传递函数分子和分母多项式系数向量

7,函数trez用于求数字逃波器的频率响应,其调用格式为:on[h, w]-]fregz (b, a, nL,'whole']) ;或[h, f]=freqz (b, a, nt,' whole'],Fs); 式中, b,a为数字滤波器分子和分母多项式的系数, n为复数频率的响应点数,为整数,最好为2的幂,缺省时为512: Fs为采样频率,单位Hz,如果给定该值,则f位置输出为频率Hz,若没有给定,则按角频率(Angular frequency)给定f的频率矢量:, whole'表示返回的频率 或 值包含2平面整个单位圆频率矢量,即0—27:缺省时,频率f或 值包含z平面上半单位圆(0—x)之间等间距n个点频率矢量。h为复频率响应: w为n点频率向量(单位rad); f为n点频率向量(Hz),函数返回值缺省时,绘制幅频响应和相频响应图。

5.2 心得体会

通过这次课设, 对设计数字滤波器的整个设计过程有了很好的掌握, 懂得了设计滤波器的基本方法。 对IIR滤波器和FIR滤波器的应用场景和区别有了一定了解,熟练了对巴特沃斯、车比雪夫、椭圆形滤波器和几种常见窗函数的使用。同时也熟悉了 MATLAB的环境, 巩固了相关知识。 初步掌握了 MATLAB语言在数字信号处理中一些基本库函数的调用和编写基本程序等应用; 熟悉了滤波器设计的一般原理, 对滤波器有了一个感性的认识; 学会了数字高通滤波器设计的一般步骤;加深了对滤波器设计中产生误差的原因以及双线性变换法优缺点的理解和认识。总之, 使理论联系了实际, 巩固并深化了对课本基本知识的认识和理解, 使理论得以升华。

在做本次课程设计的过程中,我和队友曾经遇到过问题,在解决问题的过程中锻炼了自己处理问题的能力,彼此相互沟通,通过查阅书籍、搜索资料等方法使问题得以解决。 培养了我们的耐心,也深深感受到自身知识的有限。 通过使所学应用于实践,提高了动手能力。

六、参考文献

[1]高西全.数字信号处理(第三版).西安电子科技大学出版社,2018

[2] 王一世,数字信号处理,北京理工大学出版社. 

[3] 吴大正. 信号与线性系统分析(第四版). 高等教育出版社,2005.8 

[4] 陈垚光. 精通MATLAB GUI设计(第二版)电子工业出版社, 2011.1 

[5] 陈后金. 信号分析与处理实验. 高等教育出版社,2006.8 

[6] 赵力. 语音信号处理. 机械工业出版社,2009.7

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44450575/article/details/125898559

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法