【语音增强】基于matlab iir带阻滤波器语音增强【含Matlab源码 613期】

举报
海神之光 发表于 2022/05/29 04:06:39 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【语音增强】基于matlab iir带阻滤波器语音增强【含Matlab源码 613期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【语音增强】基于matlab iir带阻滤波器语音增强【含Matlab源码 613期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、语音增强简介

语音增强是指当语音信号被各种各样的噪声干扰、甚至淹没后,从噪声背景中提取有用的语音信号,抑制、降低噪声干扰的技术。一句话,从含噪语音中提取尽可能纯净的原始语音。
实际语音遇到的干扰可以分以下几类:①周期性噪声,例如电气干扰,发动机旋转部分引起的干扰等,这类干扰表现为一些离散的窄频峰;②冲激噪声,例如-些电火花、放电产生的噪声干扰;③宽带噪声,这是指高斯噪声或白噪声一类的噪声,它们的特点是频带宽,几乎覆盖整个语音频带;④语音干扰,例如话筒中拾入其它人的说话,或者传输时遇到串音引起的语音。对付上述各种不同类型的噪声,增强技术亦是不一样的。
语音增强的一个主要目标是从带噪语音信号中提取尽可能纯净的原始语音。然而,由于干扰通常都是随机的,从带噪语音中提取完全纯净的语音几乎不可能。在这种情况下,语音增强的目的主要有两个:一是改进语音质量,消除背景噪音,使听者乐于接受,不感觉疲劳,这是一种主观度量;二是,这是一种客观度量。这两个目的往往不能兼得。目前有一些对低信噪比带噪语音进行语音增强的方法,可以显著地降低背景噪声,改进语音质量,但并不能提高语音的可懂度,甚至略有下降。
语音增强不但与语音信号数字处理理论有关,而且涉及到人的听觉感知和语音学范畴。再者,噪声的来源众多,因应用场合而异,它们的特性也各不相同。所以必须针对不同噪声,采用不同的语音增强对策。某些语音增强算法在实际应用中己经证明是有效的,它们大体上可分为四类:噪声对消法、谐波增强法、基于参数估计的语音再合成法和基于语音短时谱估计的增强算法。

三、部分源代码

%% P2_2_1 语音信号采样,画出时域和频域的图

[y,fs] = audioread('myname.wav');% y为采样数据;fs为采样频率
sound(y,fs);          % 播放语言信号myname
N = length(y);        % 信号的长度
t = (0:N-1)/fs;       % 时域范围
figure(1);subplot(211);plot(t,y); title('音频时域图');%音频信号时域图
xlabel('Time');ylabel('Amplitude');
Y = fft(y,N);           % FFT分析频谱
df = fs/length(Y);      % 计算谱线间隔
f = 0:df:(fs/2-df);     % 频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Yf = abs(Y);            % 幅度响应
Yf = Yf(1:length(Yf)/2);% 由于幅度响应是偶函数,所以截取一半

% 画图
figure(1);
subplot(212);axis([0,fs/5,0,5000]);plot(f,Yf);title('音频频谱图');

%% P2_2_2 加入噪声之后的时域和频域图

y = y(:,1); y = y';
nt = randn(1,length(y));            % 生成高斯噪声
%设计BPF得到4KHZ到5KHZ的噪音
fp1 = 4000;fp2 = 5000;              % BPF指标
WP1 = 2*pi*fp1/fs;WP2 = 2*pi*fp2/fs;% 将模拟指标转换为数字指标
wn1 = [WP1 WP2];
b = fir1(34,wn1,'bandpass');
yn = filter(b,1,nt);   % 噪声的信号 
s = y+yn;              % 将带限噪音和原来的音频混合
%sound(s,fs);
S = fft(s,N);
Sf = abs(S);                % 幅度
DF = fs/length(S);          % 计算谱线间隔
f = 0:DF:(fs/2-DF);         % 频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Sf = Sf(1:length(Sf)/2);    % 由于幅度响应是偶函数,所以截取一半

% 画图
figure(2);
subplot(211);plot(t,s); title('加入噪声的音频时域图');
xlabel('Time');ylabel('Amplitude');grid on;
subplot(212);axis([0,fs/5,0,10000]);plot(f,Sf);title('加入噪声的音频频谱图');
xlabel('Frequency');ylabel('Amplitude');grid on;


%% P2_2_3 设计滤波器,并滤波

%设计带阻滤波器滤除噪声
FP1 = 3500;FS1 = 3600;FP2 = 5600;FS2 = 5500;
rp2 = 1;rs2 = 40;
FP = [FP1 FP2];FS = [FS1 FS2];
wp = 2*pi*FP/fs;                    % 将模拟指标转换为数字指标
ws = 2*pi*FS/fs;                    % 用切比雪夫IIR滤波器
[n,wn] = cheb1ord(wp,ws,rp2,rs2);   % 滤波器的最小阶数为n,wn为系统频带
[bz,az] = cheby1(n,rp2,wp,'stop');
 
sound(yfilt,fs);                    % 播放滤波后的语音信号
Yfil = abs(fft(yfilt,N));
Yf = Yfil(1:length(Yfil)/2);

四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/115139736

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。