matlab程序求注释,语音增强的,减谱法.....

作者&投稿:山言 (若有异议请与网页底部的电邮联系)
用MATLAB编程实现谱减法,维纳滤波法的语音增强~

用MATLAB编程实现谱减法,维纳滤波法的语音增强
如果你找到另一种的,可不可以也发给我一份,若是有维纳滤波,卡尔曼滤波,自适应滤波,最小均方误差估计法,听觉掩蔽法其中任一种也行

winsize=256;%窗长
n=0.1;%噪声水平
a=2;
b=6;
[speech,fs,nbits]=wavread('E:\matlab\louyin.wav');%读入wav文件
size=length(speech);%语音长度
numofwin=floor(size/winsize);%窗数
%定义汉明窗
ham=hamming(winsize)';
hamwin=zeros(1,size);
enhanced=zeros(1,size);
improved=zeros(1,size);
%生成噪声信号
noise=n*randn(1,size);
y=speech'+noise;
%噪声处理
noisy=n*randn(1,winsize);
N=fft(noisy);
npow=abs(N);
for q=1:2*numofwin-1
yframe=y(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);%分帧
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham;%
%加噪信号FFT
y1=fft(yframe.*ham);
ypow=abs(y1);%加噪信号幅度
yangle=angle(y1);%相位
%计算功率谱密度
Py=ypow.^2;
Pn=npow.^2;

Pyy=ypow.^a;
Pnn=npow.^a;
%基本谱减
for i=1:winsize
if Py(i)-Pn(i)>0
Ps(i)=Py(i)-Pn(i);
else
Ps(i)=0;
end
end
s=sqrt(Ps).*exp(j*yangle);
for i=1:winsize
if Pyy(i)-b*Pnn(i)>0
Pss(i)=Pyy(i)-b*Pnn(i);
else
Pss(i)=0;
end
end
ss=Pss.^(1/a).*exp(j*yangle);


%去噪语音IFFT
enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(s));
improved(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=improved(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(ss));
end
%去除汉明窗引起的增益
for i=1:size
if hamwin(i)==0
enhanced(i)=0;
improved(i)=0;
else
enhanced(i)=enhanced(i)/hamwin(i);
improved(i)=improved(i)/hamwin(i);
end
end
SNR1=10*log10(var(speech')/var(noisy));%加噪语音信噪比
SNR2=10*log10(var(speech')/var(enhanced-speech'));%增强语音信噪比
SNR3=10*log10(var(speech')/var(improved-speech'));
figure(1);plot(speech');%原始语音波形
title(['Original Voice(n=',num2str(n),')']);
figure(2);plot(y);
title(['Noise Added(SNR=',num2str(SNR1),'dB)']);
figure(3);plot(enhanced);
title(['Enhanced Voice(SNR=',num2str(SNR2),'dB)']);
figure(4);plot(improved);
title(['Improved Voice(SNR=',num2str(SNR3),'dB)']);

原来想注释完,有事要出去,基本的思想已写完,后面的看程序吧。
不外乎是,分帧,加窗,估计噪音,傅里叶变换,反傅里叶变换等。

%输入参数s 语音数据,fs 采样频率,p 下面有说明,共11个,可不输入,有默认值
%“过度减法(oversubtraction)”作减法的时候,保留一小部分原来的背景噪音,用这部分背景噪音来掩盖住音乐噪音的谱峰,从而消除了令人不悦的音乐噪音。

%通过给的参数p,估计噪音,做谱减法。从而消除噪音。
function [ss,po]=specsubm(s,fs,p)
%利用频谱相减(spectral subtraction)增强 [SS,PO]=(S,FS,P)
%
% implementation of spectral subtraction algorithm by R Martin (rather slow)
% algorithm parameters: t* in seconds, f* in Hz, k* dimensionless
% 1: tg = smoothing time constant for signal power estimate (0.04): high=reverberant, low=musical
% 2: ta = smoothing time constant for signal power estimate
% used in noise estimation (0.1)
% 3: tw = fft window length (will be rounded up to 2^nw samples)
% 4: tm = length of minimum filter (1.5): high=slow response to noise increase, low=distortion
% 5: to = time constant for oversubtraction factor (0.08)
% 6: fo = oversubtraction corner frequency (800): high=distortion, low=musical
% 7: km = number of minimisation buffers to use (4): high=waste memory, low=noise modulation
% 8: ks = oversampling constant (4)
% 9: kn = noise estimate compensation (1.5)
% 10:kf = subtraction floor (0.02): high=noisy, low=musical
% 11:ko = oversubtraction scale factor (4): high=distortion, low=musical

%检查函数的输入参数,如果输入少于三个,po为默认值,po的参数上面有说明
if nargin<3 po=[0.04 0.1 0.032 1.5 0.08 400 4 4 1.5 0.02 4].'; else po=p; end

ns=length(s);
ts=1/fs;
ss=zeros(ns,1);

ni=pow2(nextpow2(fs*po(3)/po(8)));
ti=ni/fs;
nw=ni*po(8);
nf=1+floor((ns-nw)/ni);
nm=ceil(fs*po(4)/(ni*po(7)));

win=0.5*hamming(nw+1)/1.08;win(end)=[];
zg=exp(-ti/po(1));
za=exp(-ti/po(2));
zo=exp(-ti/po(5));

px=zeros(1+nw/2,1);
pxn=px;
os=px;
mb=ones(1+nw/2,po(7))*nw/2;
im=0;
osf=po(11)*(1+(0:nw/2).'*fs/(nw*po(6))).^(-1);

imidx=[13 21]';
x2im=zeros(length(imidx),nf);
osim=x2im;
pnim=x2im;
pxnim=x2im;
qim=x2im;

for is=1:nf
idx=(1:nw)+(is-1)*ni;
x=rfft(s(idx).*win);
x2=x.*conj(x);

pxn=za*pxn+(1-za)*x2;
im=rem(im+1,nm);
if im
mb(:,1)=min(mb(:,1),pxn);
else
mb=[pxn,mb(:,1:po(7)-1)];
end
pn=po(9)*min(mb,[],2);
%os= oversubtraction factor
os=zo*os+(1-zo)*(1+osf.*pn./(pn+pxn));

px=zg*px+(1-zg)*x2;
q=max(po(10)*sqrt(pn./x2),1-sqrt(os.*pn./px));
ss(idx)=ss(idx)+irfft(x.*q);

end
if nargout==0
soundsc([s; ss],fs);
end


MATLAB 7x 程序设计语言第二版:第一章介绍哪些MATLAB系统组成部分?_百度...
ATLAB 7x程序设计语言第二版图书目录概览:第1章深入理解MATLAB系统 1.1 MATLAB的核心特性 MATLAB以其直观易用、强大的数值计算和图形绘制能力闻名,作为一款功能强大的科学计算工具,它为工程师和科学家提供了高效的解决方案。1.2 MATLAB系统构成详解 MATLAB的架构由核心组件构成,主要包括MATLAB核心、工具...

MATLAB 7x 程序设计语言第二版涵盖哪些具体主题?
总的来说,ATLAB 7x 程序设计语言第二版是一本全面且实用的教材,无论你是初学者还是进阶者,都能在其中找到所需的知识和技能,提升MATLAB编程能力。

地层厚度校正
其中,Zi,Z…分别为层序i的顶、底界埋深(单位:m),未脱压实校正厚度hi=(Zi+1-Zi)(单位:m)。下面是求取原始厚度的M atlab程序:程序1:求取地层骨架厚度 function y=ficfun(b,h1,h2)%输入的砂岩比和小层序的顶底深 用样条微积分法计算小层序的骨架厚度,其值小于地层现有厚度,反映...

怎样顺利安装数学mathlab软件?
解决方案 从开始菜单里点击“运行”,输入“msconfig”,这样打开系统配置实用程序。在“服务”选项里把matlab.exe和matlabserver.exe两个程序前的“√”取消掉,之后点击“应用”,再点击“确定”,计算机重新启动后就生效啦。顺便说一句,若想关闭其它应用程序,这样办法也是可以的。如果计算机启动比较慢,也可以在“系统配置...

如何用modelsim编译systemC的设计
举一个例子,我们假如想做DVB-S2的LDPC,我们一定会先用C++(M atlab也可以)写仿真程序,验证算法的正确性。然后假设我们已经确定了目标ASIC的架构,打算用Verilog做RTL设计。现在既然C++代码的验证部分可以几乎不加改变的用于基于SystemC的验证模块的设计,我们为什么还要费力的用SystemVerilog重新写一遍验证...

图木自治县市19149221659: 谁有关于语音增强的MATLAB的程序? -
叶狗金盟: %在噪声环境下语音信号的增强%语音信号为读入的声音文件%噪声为正态随机噪声 sound=wavread('c12345.wav'); count1=length(sound); noise=0.05*randn(1,count1); for i=1:count1 signal(i)=sound(i); end for i=1:count1 y(i)=signal(i)+noise(i); ...

图木自治县市19149221659: 用MATLAB编程实现谱减法,维纳滤波法的语音增强 -
叶狗金盟: 用MATLAB编程实现谱减法,维纳滤波法的语音增强 如果你找到另一种的,可不可以也发给我一份,若是有维纳滤波,卡尔曼滤波,自适应滤波,最小均方误差估计法,听觉掩蔽法其中任一种也行

图木自治县市19149221659: 本人做毕设,对matlab一窍不通,求一个语音信号清浊音分类的matlab程序,要有注释,要是基于多参数的 多谢 -
叶狗金盟: 系式用代码表达出来,貌似加个gridview,赋给它值就可以显示了.GUI还是很好做的,加油!

图木自治县市19149221659: 数字信号处理 第三版 MATLAB程序源代码 -
叶狗金盟: [designoffirfilter.rar] - 用matlab做仿真,设计了一个FIR滤波器,详细见说明文档和程序的详细注释[self_adaptivefilter.rar] - 基于自适应滤波的语音增强和噪声消除. 此方法简单易行.是DSP算法入门的良好材料[voiceandmatlab.rar] - 对语音进行...

图木自治县市19149221659: matlab 一段程序 求注释 -
叶狗金盟: 你所说的锐化和去噪程序,其实在MATLAB的帮助里就有很好的示例,点击MATLAB里的start->toolboxes->Image p 在MATLAB的帮助里的搜索框中输入medfilt8g

图木自治县市19149221659: 能给我一个谱减法matlab去噪的程序吗?有已录的纯净语音 要简单的有注释就更好了 , 万分感谢 -
叶狗金盟: winsize=256;%窗长 n=0.1;%噪声水平 a=2; b=6; [speech,fs,nbits]=wavread('E:\matlab\louyin.wav');%读入wav文件 size=length(speech);%语音长度 numofwin=floor(size/winsize);%窗数%定义汉明窗 ham=hamming(winsize)'; hamwin=zeros(...

图木自治县市19149221659: matlab程序求注释 -
叶狗金盟: function [ITSE] = SS(B)%定义函数名称,输入的是矩阵,在本方程代号是B,输出 [ITSE] [H,L]=size(B);%读取矩阵的行列数 for i=1:H %逐行操作 for j=1:L%行内逐个操作 a(j)=B(i,j); end %%%上面小循环的意思是将第i行写入向量a for k=1:(L+2) ...

图木自治县市19149221659: matlab的部分程序求注释 -
叶狗金盟: function itl = loaditl(fileName)%定义函数名和参数类型 fid = fopen(fileName,'r');%打开fileName文件 N = fscanf(fid,'%d',1);%读取fileName中的第一个整数并赋值给N for n=1:N%for循环 %以下将数据赋值给结构体数组itl itl(n).id = fscanf(fid,'%d',1)...

图木自治县市19149221659: 哈夫曼编码的matlab程序,求注释!!谢谢了 -
叶狗金盟: 里面有一段看了几个小时都看不懂%哈夫曼编码的MATLAB实现(基于0、1编码):clc; clear; A=[0.4,0.2,0.15,0.1,0.1,0.05];%原概率序列%A=A/sum(A);%A=fliplr(sort(A));%按降序排列 T=A; [m,n]=size(A); B=zeros(n,n-1);%空的编码表(矩阵...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网