您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页谱减法的Matlab程序

谱减法的Matlab程序

来源:抵帆知识网


谱减法的Matlab程序:

-----------------------------------------------------------------------------------------------------

clear;

[xx,fs]=wavread('I:\\aa\\0a.wav'); [team,row]=size(xx); if row==2

x=(xx(:,1)+xx(:,2))/2; yy=x;

else

x=xx;

yy=x;

end

x=x-mean(x)+0.1*rand(length(x),1); % 读语音信号

% 将多通道求平均值

% 去直流分量并加噪

N=length(x);

n=220; % 每一帧长

n1=160; %每两帧重合的长度

frame=floor((N-n)/(n-n1)); %帧数

for i=1:frame

y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n); % 每一帧对应的语音信号

fy=fft(y1,n); %求fft

nen(i,:)=abs(fy).^2; %求能量

ang(i,:)=angle(fy); % 求角度

end

yuzhi=sum(sum(nen(2:5,:)))/(4*n); % 求阈值,信号开始阶段的能量平均值

for i=1:frame

nen(i,:)=nen(i,:)-yuzhi; % 减谱

nen(i,find(nen(i,:)<0))=0; % 将小于0的部分赋值为0

end

for i=1:frame

nen(i,:)=sqrt(nen(i,:));

jie=nen(i,:).*exp(j*ang(i,:)); %求频域函数

out(i,:)=real(ifft(jie))./hamming(n)'; %求逆fft

end

zong=out(1,:)'; % 对out求导,以便于原信号比较

jiewei=n;

for i=2:frame %将一系列的帧组合还原

zong(jiewei-n1+1:jiewei)=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;

jiewei=jiewei+n-n1;

zong=[zong;out(i,n1+1:end)'];

end

figure(1);

subplot(211);

plot(x); %画加噪的原始语音信号

axis([1,(n-n1)*frame+n,min(x),max(x)]);

subplot(212);

specgram(x,fs,1024,n,n1); % 对应的鱼谱图

figure(2);

subplot(211);

plot(zong); %画增强的语音信号

axis([1,(n-n1)*frame+n,min(zong),max(zong)]);

subplot(212);

specgram(zong,fs,1024,n,n1);

wavplay(x,fs); % 输出音频

wavplay(zong,fs);

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务