• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: Matlab
  • 标签: Matlab  谱减法  

资源简介

谱减法语音增强 用Matlab是实现谱减法语音增强达到消噪

资源截图

代码片段和文件信息

%基本谱减法
clear;
%[xxfs]=wavread(‘E:\mywhisper\shu.wav‘);
%[xxfs]=wavread(‘E:\speech\x\w1xun_01.wav‘);
%[xxfs]=wavread(‘E:\speech\耳语音切割\b\w1ba_5‘);
[xxfs]=wavread(‘MIC0.wav‘);% 读取音频文件yuan.wav,并返回采样数据给变量xx及采样率Fs
[teamrow]=size(xx);%将数组xx的行数赋给team列数赋给row
if row==2
    x=(xx(:1)+xx(:2))/2;
    yy=x;
%如果语音信号xx为2列,即信号为双声道,则将其转换成单声道信号,即取两列的平均值赋给x,并将x的值赋给yy 
else
    x=xx;
    yy=x;
%若语音信号xx为单声道,则将xx的值赋给x,并将x的值赋给yy
end
x=x-mean(x)+0.1*rand(length(x)1);
N=length(x);%将语音信号长度赋给变量N
n=220;%对语音信号进行分帧,帧长为220
n1=160;%帧移为160
frame=floor((N-n)/(n-n1));%将分帧数赋给变量frame
%frame=floor(N/n);
for i=1:frame
    y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n);
%对每段分帧进行加窗处理
    fy=fft(y1n);
    nen(i:)=abs(fy).^2;% 将频域信号功率赋给矩阵变量nen
    ang(i:)=angle(fy);%将频域信号的相位角赋给矩阵变量ang
end

yuzhi=sum(sum(nen(2:5:)))/(4*n);
for i=1:frame
    nen(i:)=nen(i:)-yuzhi;
    nen(ifind(nen(i:)<0))=0;
    %chuli=nen(i1:n/2);
    %chuli=chuli-yuzhi;
    %chuli(find(chuli<0))=0;
    %nen(i:)=[chulifliplr(chuli)];    
    % nen(i:)=filter(1[0.5 0.5]nen(i:));
   % nen(ifind(nen(i:)<0))=0;
end
for i=1:frame
    nen(i:)=sqr

评论

共有 条评论