【Matlab】语音信号分析与处理实验报告

一、目的

使用Matlab分析与设计实验,理解与掌握以下知识点:
1、信号的采样、频谱混叠
2、信号的频谱分析
3、信号的幅度调制与解调方法
4、理想滤波器的时域和频域特性
5、数字滤波器的设计与实现

二、内容

1、录制一段个人的语音信号
2、采用合适的频率,对录制的信号进行采样,画出采样前后语音信号的时域波形和频谱图
3、给原始语音信号加噪声,画出加噪声后的语音信号的时域波形和频谱图
4、在频域内进行分析和设计一个理想带通传输信道
5、对3所述的语音信号进行幅度调制,画出调制后的语音信号的时域波形和频谱图
6、利用4给出的理想带通信道对信号进行传输
7、在接收端对接收到的信号进行解调,画出解调后的语音信号的时域波形和频谱图
8、设计性能良好的滤波器对7得到的信号进行滤波,画出滤波后的语音信号的时域波形和频谱图
9、对原始(加噪声前)语音信号进行回放,并与8所得到滤波后的语音信号进行对比(时域波形、频谱图、听觉等)

三、系统架构设计

图1:系统架构设计

四、设计原理及步骤

1. 降采样

语音信号是一种模拟信号,但它在存储到计算机中时会被转化为数字信号,此时的采样频率比较高。在实际使用时,我们并不需要这么高的采样频率。因此,需要对语音信号进行降采样。
在确定降采样频率时,必须要考虑到两点。其一,根据奈奎斯特理论,采样频率必须高于声音信号最高频率的两倍,这样才能把数字信号表示的声音还原成为原来的声音。在实际应用中,一般取信号频率上限的35倍作为采样频率。在正常情况下,人声带发出的声音在3003400 Hz[1],因此对于单纯的语音信号来说,采样频率大于10.2kHz即可。其二,考虑到后面有调制与解调的过程,且载波频率必须小于采样频率的一半,因此适当将采样频率提高为21kHz。
降采样前后的语音信号的时域波形和频谱图如下:
图2:原始语音信号的时域波形和频谱图
图3:降采样后的语音信号的时域波形和频谱图

2. 高斯白噪声

高斯白噪声是分析信道加性噪声的理想模型,它的瞬时值服从高斯分布,而它的功率谱密度服从均匀分布。在Matlab中,wgn函数可以用于产生高斯白噪声,而awgn函数可以用于在某一信号中加入指定信噪比的高斯白噪声。信噪比是指一个电子设备或者电子系统中信号与噪声的比例。一般来说,信噪比越大,混在信号里的噪声越小,声音回放的音质越高,否则相反。
此外,在Matlab中也可以使用randn函数来产生高斯白噪声。这种方法利用了高斯白噪声的幅度分布服从高斯分布的特点,可以方便地指定它的均值和方差。
加入高斯白噪声后的语音信号的时域波形和频谱图如下:
图4:加噪声后的语音信号的时域波形和频谱图

3. 调制

使用振幅调制(AM)的方法对加噪声后的语音信号进行调制:将语音信号与一直流信号相加,再与载波信号相乘。与双边带调制(DSB)相比,振幅调制可在接收端省去本地载波,降低接收机的成本。
振幅调制后的语音信号的时域波形和频谱图如下:
图5:振幅调制后的语音信号的时域波形和频谱图
图5中的两个频谱图在本质上是一样的。其中,频谱图2是对频谱图1的纵坐标范围加以限制得到的。从图中我们可以发现,由于载波信号是一个cos函数,它的傅里叶变换是冲激函数的形式,有非常大的能量,在频谱图中的幅度远远大于其他频率的信号。因此,振幅调制虽然可以降低接收机的成本,但付出的代价是要使用价格昂贵的发射机,提供足够强的信号Acos(w0t)的附加功率。但这也是合算的,因为往往对于大批的接收机来说,只有一个发射机。

4、理想带通传输信道的设计

也即设计一个理想带通滤波器。带通滤波器是指能通过某一频率范围内的频率分量,但将其他的频率分量衰减到极低水平的滤波器。一个理想的带通滤波器应该有一个完全平坦的通带,在通带内没有放大或者衰减,并且在通带之外所有频率都被完全衰减掉。因此,理想的带通滤波器不能使用Matlab中的Filter Designer工具箱直接进行设计。可以使用窗函数(矩形窗boxcar)法设计FIR滤波器,也可以在频域中直接对语音信号的频谱进行操作。
语音信号通过理想带通传输信道进行传输后,其时域波形和频谱图如下:
图6:经理想带通信道传输后的语音信号的时域波形和频谱图

5. 解调

对振幅调制(AM)的信号进行解调有很多种方法。如果载波信号是确定的,则通常可以采用同步检波的方式。这种方式的信噪比最好,对信号中混入的噪声的抑制能力也最强[3]。上文中提到的双边带调制(DSB)的信号也可以使用这种方法进行解调。但是,当载波信号未知时,同步检波的方法就不再适用了。此时,利用调幅信号的包络反映调制信号波形变化的这一特点,可以使用包络检波的方法进行解调。在本次作业中,为更加贴近实际情况,选择使用包络检波的方法。
包络检波是基于滤波检波的振动信号处理方法,尤其对初期故障和信噪比较低的故障信号识别能力强[2]。将一段时间长度的高频信号的峰值点连线,就可以得到分别位于上方和下方的两条线,这两条线就叫做包络线。而上方的包络线减去调制时加入的直流分量,就可以方便地得到原始信号。
此外,必须注意到的是,由于包络检波器的非线性解调作用,导致包络检波存在着门限效应。在信噪比较小的情况下,调制信号无法与噪声分开,有用信号被淹没在噪声之中,检波器的输出信噪比急剧下降,解调效果很差。由于2中在加入高斯白噪声时选择的信噪比较大,因此可以使用包络检波的方法来进行解调。
图7:解调后的语音信号的时域波形和频谱图
图7中的两个频谱图在本质上是一样的。其中,频谱图2是对频谱图1的纵坐标范围加以限制得到的。观察结果可以发现,解调后的频谱图中出现了一些原本并不存在的高频分量(还有少部分意外的频率分量是低频的)。这可能是由包络检波中的“插值”步骤引起的,因为插值过程存在着一定的随机性,插值结果可能不够“光滑”。上图在计算时使用的是三次样条插值方法(spline),这是Matlab支持的所有插值方法中最光滑的插值方法。下面对不同插值方法得到的频谱图进行简单对比。
图8:临近插值(nearest)
图9:分段线性插值(linear)
图10:三次多项式插值(cubic)
显然,在Matlab的这四种插值方法中,对于本课题来讲,三次样条插值方法(spline)的效果最好。

6. 滤波去噪

根据5中的分析可知,解调过程导致频谱图中产生了一些原本并不存在的高频信号,因此首先应该设计低通滤波器来滤除这些高频信号。对于低通滤波器来说,低频信号能够正常通过,而超过截止频率的高频信号则被阻隔、减弱。观察原始语音信号的频谱图可以发现,该语音信号的能量大多集中在2kHz以内,因此低通滤波器的截止频率可以设置为2kHz。该低通滤波器可以使用Matlab中的Filter Designer工具箱直接进行设计。设计时,Filter Order可选择Minimum Order(最小阶数)。
此外,要滤除高斯白噪声则比较困难。因为高斯白噪声的频谱是遍布在整个语音信号的频谱中的,通常的低通、高通、带通或者带阻滤波器都无法很好地将它滤除。通过搜集资料得知,高斯白噪声可以通过均值滤波、自适应滤波、卡尔曼滤波和维纳滤波等方式滤除。在本课题中选择维纳滤波器来滤除高斯白噪声。
维纳滤波器是一种以最小平方为最优准则的线性滤波器。在一定的约束条件下,其输出可以与一给定函数的差的平方达到最小,通过数学运算最终变为一个托布利兹方程的求解问题[4]。维纳滤波器与神经网络有一定的相似性,它们在使用时都分为两个阶段,一个是训练阶段,另一个是工作阶段。训练阶段的目的是求出维纳滤波器在特定环境下的系数。当得到满意的系数后,即可进入工作阶段,且在工作阶段该系数不会再改变。在工作阶段,则可以对真正待处理的信号进行去噪处理。
经过实验发现,仅使用维纳滤波器对语音信号滤波一次的效果并不令人满意,仍有较多的噪声残留。因此,为保证有效地滤除噪声,对语音信号进行两次维纳滤波。
经过低通滤波和两次维纳滤波后的语音信号的时域波形和频谱图如下:
图11:滤波去噪的语音信号的时域波形和频谱图

7. 语音信号回放

对原始的语音信号和滤波后的语音信号分别进行回放。从听觉的角度来说,滤波后的语音信号中仍然混有部分噪声,且语音信号本身也被削弱了。这可能是因为在使用维纳滤波去除高斯白噪声时,由于它遍布整个频域,导致语音信号也受到了一定的影响。从时域波形来看,可以比较明显地发现噪声并没有被完全地滤除,且原本的语音信号波形也发生了轻微的变化。而从频谱图来看,则可以比较明显地发现6中的低通滤波成功地滤掉了所有高于2kHz的信号,低于2kHz的信号则被比较完整地保留下来了。

总结

从总体上来看,虽然已经较好地完成了作业要求,但仍然有改进的空间。首先,在解调部分使用了包络检波的方法,出现了一些原本并不存在的高频分量。虽然在后期已经使用了低通滤波器进行滤除,但仍然对原始语音信号造成了一定的影响。如果时间允许,应该对其他的解调方式进行探索、尝试和研究,并进一步分析高频分量出现的原因。其次,经过对调制、传输、解调和去噪等过程的模拟后,语音信号本身也被削弱了,可以考虑加入语音信号增强的环节以保证语音信号的质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity光照贴图的切换,实现黑夜和白天效果

有这么一个需求,不能使用实时光来进行动态控制光照开关,但是又要实现白天和黑夜的效果,我的场景中有大概十几个点光源和平行光 实现步骤: 一、模型原模原样复制到另一个场景中(因为贴图只能存在于当前的场景文件夹&am…

支付宝沙箱支付详细教程(IDEA版)—2023最新版

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…

Redis数据库操作

Redis 命令参考 — Redis 命令参考http://doc.redisfans.com/ 1、Redis,远程词典服务器,是一个基于内存的键值型NoSQL数据库 特征: 键值型,支持多种不同数据结构,功能丰富 单线程,每个命令具备原子性 …

Docker的安装部署以及配置的操作流程(图文)

Docker的安装以及配置流程(图文) Docker一、配置域名解析二、CentOS Docker 安装1. 查询已安装的docker2. 安装必要的一些系统工具3. 添加软件源(阿里云)信息4. 更新并安装Docker-CE5. 查看docker 的版本6. 关闭运行的防火墙7. 开…

h5手写签名示例

前言 业务中需要用户进行签字&#xff0c;如何让用户在手机端进行签字&#xff1f; 示例如下 代码已分享至Gitee: https://gitee.com/lengcz/qianming 原示例&#xff1a; https://www.jq22.com/jquery-info13488 H5实现手写签字 创建一个html页面 <!DOCTYPE html> …

Wireshark抓包分析(ARP TCP DNS HTTP)

目录 一、ARP 二、DNS 三、TCP TCP的总过程&#xff1a; ​TCP三次握手&#xff1a; TCP四次挥手&#xff1a; 四、HTTP 一、ARP 1.ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 我们要抓ARP 同网段内…

每日学术速递6.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.The ObjectFolder Benchmark: Multisensory Learning with Neural and Real Objects(CVPR 2023) 标题&#xff1a;ObjectFolder 基准测试&#xff1a;使用神经和真实对象进行多感官…

Windows VMware安装RockyLinux9

前言&#xff0c;今天用虚拟机安装rockyLinux时碰到了一些坑&#xff0c;要么时无法联网&#xff0c;要么是无法使用ssh链 接&#xff0c;在这里记录下 准备工作 1. VMware Workstation 17 Pro 2. RockyLinux9.2阿里镜像站&#xff0c;这里无选择了最小版本Rocky-9-latest-x86…

小程序自动化测试的示例代码

背景 近期团队打算做一个小程序自动化测试的工具&#xff0c;期望能够做的业务人员操作一遍小程序后&#xff0c;自动还原之前的操作路径&#xff0c;并且捕获操作过程中发生的异常&#xff0c;以此来判断这次发布时候会影响小程序的基础功能。 上述描述看似简单&#xff0c;但…

【算法证明 七】深入理解深度优先搜索

深度优先搜索包含一个递归&#xff0c;对其进行分析要复杂一些。与上一篇文章一样&#xff0c;还是给节点定义几个状态&#xff0c;然后详细分析深度优先搜索算法有哪些性质。 算法描述 定义状态 v . c o l o r &#xff1a;初始状态为白色&#xff0c;被发现时改为灰色&…

【cfeng work】什么是云原生 Cloud Native

WorkProj 内容管理 云原生云原生应用十二要素应用cfeng的work理解 本文introduce 云原生 Cloud Native相关内容 随着技术的迭代&#xff0c;从最初的物理机—> 虚拟机&#xff0c;从单机 —> 分布式微服务&#xff0c; 现在的热门概念就是云☁&#xff08;cloud&#xff…

python 使用 openpyxl 处理 Excel 教程

目录 前言一、安装openpyxl库二、新建excel及写入单元格1.创建一个xlsx格式的excel文件并保存2.保存成流(stream)3.写入单元格 三、创建sheet工作表及操作四、读取excel和单元格1.读取 excel 文件2.读取单元格3.获取某一行某一列的数据4.遍历所有单元格5.遍历指定行列范围的单元…

数据结构之堆——算法与数据结构入门笔记(六)

本文是算法与数据结构的学习笔记第六篇&#xff0c;将持续更新&#xff0c;欢迎小伙伴们阅读学习。有不懂的或错误的地方&#xff0c;欢迎交流 引言 当涉及到高效的数据存储和检索时&#xff0c;堆&#xff08;Heap&#xff09;是一种常用的数据结构。上一篇文章中介绍了树和完…

iOS自动化环境搭建(超详细)

1.macOS相关库安装 libimobiledevice > brew install libimobiledevice 使用本机与苹果iOS设备的服务进行通信的库。 ideviceinstaller brew install ideviceinstaller 获取设备udid、安装app、卸载app、获取bundleid carthage > brew install carthage 第三方库…

机器视觉初步5:图像预处理相关技术与原理简介

在机器视觉领域中&#xff0c;图像预处理是一项非常重要的技术。它是指在对图像进行进一步处理之前&#xff0c;对原始图像进行一系列的操作&#xff0c;以提高图像质量、减少噪声、增强图像特征等目的。本文将介绍一些常用的图像预处理技术&#xff0c;并通过配图说明&#xf…

Android CMake

首先了解几个名词 NDK The Android Native Development Kit The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. For certain types of apps, this can help you reuse code libraries written in t…

Centos7安装Python3.10

Centos7用yum安装的Python3版本比较旧&#xff0c;想要安装最新版本的Python3需要自己动手编译安装。下面就来讲讲安装步骤&#xff0c;主要分为这么几个步骤&#xff0c;依赖→下载→编译→配置。另外所有操作都是在root用户下进行。 依赖 编译Python源码需要依赖许多库&…

springboot-内置Tomcat

一、springboot的特性之一 基于springboot的特性 自动装配Configuretion 注解 二、springboot内置Tomcat步骤 直接看SpringApplication方法的代码块 总纲&#xff1a; 1、在SpringApplication.run 初始化了一个上下文ConfigurableApplicationContext configurableApplica…

《C++ Primer》--学习4

函数 函数基础 局部静态对象 局部静态对象 在程序的执行路径第一次经过对象定义语句时初始化&#xff0c;并且直到程序终止才被销毁&#xff0c;在此期间即使对象所在函数结束执行也不会对它有影响 指针或引用形参与 const main&#xff1a; 处理命令行选项 列表初始化返回…

机器人参数化建模与仿真,软体机器人

专题一&#xff1a;机器人参数化建模与仿真分析、优化设计专题课程大纲 机器人建模基础 机器人运动学基础几何运动学闭环解解析法建模运动学MATLAB脚本文件编写&#xff08;封闭解、构型绘制&#xff09;、工具箱机器人工作空间&#xff08;离散法、几何法&#xff09;建模工作…