(基于matlab自写代码)语音信号增强

利用双线性变换法,小波法,简谱法。
双线性变换法是使数字信号滤波器的频率响应与模拟滤波器的频率响应相似的一种变换方法。
小波指的是一种能量在时域非常集中的波,小波直接把傅里叶变换的基给换了,将无限长的三角函数基换为有限长的会衰减的小波基。不仅能够获取频率,还可以定位时间。
谱相减方法是基于人的感觉特性,即语音信号的短时幅度比短时相位更容易对人的听觉系统产生影响,从而对语音短时幅度谱进行估计,适用于受加性噪声污染的语音。
对语音,人为加入加性高斯白噪声,分别采用双线性变换法、小波变换法、简谱法对其进行增强
matlab程序代码


y=audioread(’ E:\matlab\yuyin1.m4a ‘);
n = length (y) ; %求出信号的长度
t=[0:1/8000:0.25]’;
noise=awgn(t,5); %产生高斯白噪声
m = length (noise) ;
y = resample(y,m,n);
s=y+noise; %语音信号加入高斯白噪声
subplot(2,1,1);plot(s);
title (‘给yuyin1加噪后的时域波形’);
S=fft(s); %进行傅里叶变换
subplot(2,1,2);plot(abs(S));
title(‘给yuyin1加噪后的频域波形’)

在这里插入图片描述


Ft=8000;
Fp=1000;
Fs=1200;
wp=2piFp/Ft;
ws=2piFs/Ft;
fp=2Fttan(wp/2);
fs=2Fstan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,‘s’); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,‘s’); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
y=audioread(’ E:\matlab\yuyin1.m4a ‘);
n = length (y) ; %求信号的长度
t=[0:1/8000:0.25]’;
noise=awgn(t,5); %产生高斯白噪声
m = length (noise) ;
y = resample(y,m,n);
s=y+noise; %信号加入高斯白噪声
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
subplot(2,1,1);plot(z11);title(‘滤波后yuyin1的信号波形’);
subplot(2,1,2);plot(abs(m11),‘r’);title(‘滤波后yuyin1的信号的频谱’);

在这里插入图片描述


小波法
[y,fs]=audioread(’ E:\matlab\yuyin1.m4a ‘);
[y,bits]=audioread(’ E:\matlab\yuyin1.m4a ‘);
count=length(y);
noise=0.1*randn(1,count);
signal=y’;
for i=1:count
X(i)=signal(i)+noise(i);
end
wname=‘sym6’;
lev=7;
[c,l]=wavedec(X,lev,wname);
sigma=wnoisest(c,l,1);
alpha=3;
thr=wbmpen(c,l,sigma,alpha)
keepapp=1
xd=wdencmp(‘gbl’,c,l,wname,lev,thr,‘s’,keepapp);
max_v=max(X); %对带噪信号抽样值点进行归一化处理
revoice=X/max_v;
%对输出信号抽样点值进行归一化处理
max_s=max(xd);
resound=xd/max_s;

Fs=fft(xd);
n=1:count;
figure %对比纯净信号带噪信号和输出信号
subplot(3,1,1);
plot(n,signal);
title(‘纯净信号’)
subplot(3,1,2);
plot(n,X);
title(‘带噪信号’)
subplot(3,1,3)
plot(n,xd);
title(‘输出信号’)

figure %对比纯净信号频谱带噪信号频谱和输出信号频谱
Fss=fft(signal);
Fv=fft(X);
subplot(3,1,1);
plot(n,abs(Fss));
title(‘纯净信号频谱’)
subplot(3,1,2)
plot(n,abs(Fv));
title(‘带噪信号的频谱’)
subplot(3,1,3)
plot(n,abs(Fs));
title(‘输出信号频谱’)

在这里插入图片描述


[y,fs]=audioread(‘E:\matlab\yuyin1.m4a ');
[y,bits]=audioread(‘E:\matlab\yuyin1.m4a ‘);
count=length(y);
noise=0.04*randn(1,count);
signal=y’;
for i=1:count
voice(i)=signal(i)+noise(i);
end

Fv=fft(voice);
anglev=angle(Fv);
Fn=fft(noise);
power1=(abs(Fv)).^2;
power2=(abs(Fn)).^2;
power3=power1-power2;
power4=sqrt(power3);
Fs=power4.exp(janglev);
u=ifft(Fs);
max_v=max(voice); %对带噪信号抽样值点进行归一化处理
re_voice=voice/max_v;
%对输出信号抽样点值进行归一化处理
max_s=max(u);
re_sound=u/max_s;

n=1:count;
figure %对比纯净信号带噪信号和输出信号
subplot(3,1,1);
plot(n,signal);
title(‘纯净信号’)
subplot(3,1,2);
plot(n,voice);
title(‘带噪信号’)
subplot(3,1,3)
plot(n,u);
title(‘输出信号’)
figure %对比纯净信号频谱带噪信号频谱和输出信号频谱
Fss=fft(signal);
subplot(3,1,1);
plot(n,abs(Fss));
title(‘纯净信号频谱’)
subplot(3,1,2)
plot(n,abs(Fv));
title(‘带噪信号的频谱’)
subplot(3,1,3)
plot(n,abs(Fs));
title(‘输出信号频谱’)

在这里插入图片描述

  • 13
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值