> 文章列表 > 基于MATLAB语音信号的数字滤波

基于MATLAB语音信号的数字滤波

基于MATLAB语音信号的数字滤波

MATLAB语音信号的数字滤波

一、实验目的

  1. 掌握使用 FFT 进行信号谱分析的方法
  2. 设计数字滤波器对指定的语音信号进行滤波处理

二、实验内容

  1. 导入音频信号,并绘制出时域波形和频域波形:
    基于MATLAB语音信号的数字滤波
    基于MATLAB语音信号的数字滤波
    可以看到,频谱上有很多额外的噪音频率,在时域上从第7秒末开始存在大量噪音。
    2. 根据上图中的噪声频谱信息,确定了噪声的频率为1575Hz、3150Hz和4725Hz,设计相应的滤波器,滤除这些频率分量
    其中,滤除1575Hz的滤波器频率响应曲线如下图所示。
    基于MATLAB语音信号的数字滤波

基于MATLAB语音信号的数字滤波
可以看到,除了有一部分直流分类没有滤除外,其他的噪声分量被滤波器过滤,时域上的噪音得到明显遏制。

三、额外处理

值得注意的是,在完成以上处理之后,声音在7秒末和9秒末会出现明显跳变,十分刺耳。很明显这是由第8-10秒存在一定的直流分量造成的,同时在7秒末和9秒末存在冲击。通过滤波器,可以滤除低频分量,通过以下代码实现了直流分量的滤除:

freqmax = 1/fs
B = -2*cos(freqmax*2*pi)
hh = [1, B, 1];
yy = filter(hh, 1, yy);

因为时域上音频信号幅值明显小于0.5,冲击却明显远大于0.5,因此可通过以下代码实现消除冲击:

for k = 1:Nif yy(k)>=0.5 || yy(k)<=-0.5yy(k) = 0;end
end

在我滤除直流分量以及冲击量后,波形进一步规则,得到的时域赫尔频域波形
基于MATLAB语音信号的数字滤波
基于MATLAB语音信号的数字滤波此时音频的跳变消失,变得十分自然。

四、实验结果分析

在通过滤波器后,噪声频率分量得到有效的滤除,但由于存在直流分量,8-10秒声音的幅度不在0附近波动。频域上由于直流分类幅度过大,导致正常的频率分量几乎看不见。经过上述额外处理后,消除直流分类,可以看到音频主要集中在0-4kHz。

五、源代码

所使用的音频文件、MATLAB代码:
源代码