MATLAB语音信号处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MATLAB的语音信号采集与处理
一、实验的目的和要求
1. MATLAB软件功能简介
MATLAB的名称源自Matrix Laboratory,1984年由美国Mathworks公司推向市场。它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。
MATLAB软件包括五大通用功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。该软件有三大特点,一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks公司已推出30多个应用工具箱。MATLAB在线性代数、矩阵分析、数值及优化、数值统计和随机信号分析、电路与系统、系统动力学、次那好和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。2. 本题目的意义
本次课程设计的课题为《基于MATLAB的语音信号采集与处理》,学会运用MATLAB 的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处理,观察其时域和频域特性,加深对信号处理理论的理解,并为今后熟练使用MATLAB进行系统的分析仿真和设计奠定基础。
二、实验原理:
1.理论原理
利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
2. 具体流程
(1) 语音信号的采集及分析
基于声卡进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话,说完后停止录音。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。在 Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量。下面介绍Wavread 函数几种调用格式。
(1)y=wavread(file)
功能说明:读取file所规定的wav文件,返回采样值放在向量y中。
(2)[y,fs,nbits]=wavread(file)
功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
(3)y=wavread(file,N)
功能说明:读取钱N点的采样值放在向量y中。
(4)y=wavread(file,[N1,N2])
功能说明:读取从N1到N2点的采样值放在向量y中。
错误说明:如果自己录制的wav文件不能读取,可以自己找一段wav声音文件。(2)给原始信号加上一个高频噪声
在Matlab中人为设计一个高频f噪声干扰信号。噪声信号通常为随机序列,在本设计中可用正弦序列代替,干扰信号构建命令函数为nosie=[Au*sin(2*pi*f*t)]',给出的干扰信号为一个正弦信号,针对上面的语音信号 ,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图。
在MATLAB中把语音信号与噪声信号进行叠加,并对其进行播放,然后对加入噪声后的语音信号进行频谱分析,在MATLAB中可以利用函数FFT对信号进行快速傅里叶变换。
将原语音信号与noise叠加,调用的形式为:
s=y+noise;
其中,y为原语音信号,noise为所构造的随机高斯噪声,s即为两者的叠加后的语音信号。
(3) 设计一个滤波器,滤除高频噪声
在 MATLAB 中 ,可以利用函数 butterworth,设计FIR 滤波器,利用 MATLAB 中的函数freqz 画出各滤波器的频率响应。用设计好的滤波器对含噪语音信号进行滤波,在Matlab 中 ,FIR 滤波器利用函数filter 对信号进行滤波。
3.实验记录:
(1)通过计算机录音文件采集的一段声音文件,然后使用wav=wavread(file)函数读取该文件。使用wavfft=fft(wav)获得原始信号的傅里叶变换,使用wavfftsh=fftshift(wavfft)来得到信号的频谱图。使用执行结果如下:分别为声音文件的时域图形,傅里叶变换和频谱图。
(2)创建一个噪声信号,该噪声信号为noise=800000000*sin(2*pi*fs*t)。其中噪声信号
x 10
5
原始语音信号时域波形
原始语音傅里叶变换
x 10
5
原始信号的频谱图像
Au=800000000;pi 为圆周率π≈3.14;fs 为提取的原始声音信号的频率值,时间t 为从0到(n-1)/fs 的每隔1/fs 取一个值的一个函数,即t=0:1/fs:(n-1)/fs (其中n=length(wav),为原始信号波的长度),时间长度和原始信号的长度一样。获得的噪声不是一个标准的正弦波,而是一个幅值随时间非线性增大的波,这样的波比较符合现实中嘈杂的环境。采用步骤1中同样的方法获得噪声信号的傅里叶变换和频谱图形。具体波形如下图所示:
(3)将噪声信号和原始信号进行叠加。因为原始声音信号wav 为[n,2]n 行2列的矩阵,而噪声信号为[1,n]1行n 列的矩阵,所以要想这两个矩阵相加,必须做一些基本变换。首先对噪声信号进行转置:noiseT=noise ’,然后在对新的信号加上一列空值,即wavch=[noise',zeros(n,1)]其中n 为声音信号的长度。之后将声音信号和噪声信号叠加,即将两个矩阵相加wavbo=wavch+wav 。重复采用步骤1中同样的方法获得噪声信号的傅里叶
x 10
5
噪声信号
噪声信号傅里叶变换
x 10
5
噪声信号频域分析