用Matlab语言编写一个语音信号或图象信号去噪的程序?请高手帮忙 找Matlab高手帮忙看程序(语音信号处理)

作者&投稿:貂响 (若有异议请与网页底部的电邮联系)
不好意思,没看到维纳滤波,程序就不删了

%谱减法语音增强
%输入参数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编写程序来求整数规划的题目~

1、求解整数规划问题并不是MATLAB的强项,如果不是有要求必需要用MATLAB,可以考虑使用Lingo求解,求解速度快,程序也很简单:
max=120*x1+560*x2;0.6*x1+(1+0.5*x2)*x2=300;x1>=0;x2>=0;@GIN(x1);@GIN(x2);end得到的结果是x1=500,x2=0。

2、用MATLAB求解整数规划,官方好像并没有提供有效的手段(仅有一个用于求解0-1规划问题的bintprog函数)。我知道的有两个第三方函数:

一个是bnb20,是十几年前编写的,现在用的话需要做一些改动。而且对非线性约束的处理似乎有问题,我使用它求解并未得到正确答案。

另一个是lpsolve,其实是用C语言编的,提供了MATLAB的调用接口而已。由于调用动态链接库涉及到32位/64位的问题,配置起来比较麻烦,似乎没必要用它而不是Lingo。

3、就本题而言,由于变量少,问题规模不大,可以采用穷举法。听起来穷举法似乎是一种比较笨的方法,但其实对于一些简单问题来说却最为直接有效。

由于x1, x2>=0,又存在一个等式约束,不难得到,满足约束的x2最大值为23.5153,考虑到整数约束,x2的取值其实只有一共24种可能(0-23);再考虑到等式约束,计算出的x2满足整数要求的仅有8个数而已。在8个数里面选一个最大的,应该不是难事吧?

参考代码:
ezplot('0.6*x1+(1+0.5*x2)*x2-300',[0 500 0 24])hold onx2 = 0:23;x1 = ( 300 - (1+0.5*x2).*x2) / 0.6;valid = abs(x1-fix(x1)) <= eps;x1 = x1(valid);x2 = x2(valid);z = 120*x1+560*x2;[inx,inx] = max(z);[x1(inx) x2(inx)]scatter(x1,x2,40,z,'filled')colorbar得到结果与用Lingo求解一致。

先说第一段

k 是从WAV文件读取出来的一段语音信号,其实就是一个h点的行向量,h是k的长度。

设置了一个门限值th=0.035。对向量k,从头开始每个点依次与门限值比较,第一个幅度大于0.035的点记为语音起点i,从尾开始每个点依次与门限值比较,第一个幅度大于0.035的点记为语音终点j。

将k的语音部分新命名为new,把原始语音和找到的纯语音分别在两个坐标中画出。

总的来说,这段程序用很简便的方法将一段包含静音的语音信号中的纯语音提取出来,但这种方法有很大的局限性,只能作为理论学习,基本上没有实际应用价值

语音信号PCM编译码 MATLAB程序
答:subplot(2,1,1);plot(x);title('原始语音信号');subplot(2,1,2);plot(zz);title('译码后的语音信号');sound(zz,Fs);figure;plot(x,'b');hold on plot(zz,'r');legend('编译码前的语音信号','编译码后的语音信号');title('编,译码前后的语音信号');function y = pcm_encode( x...

用Matlab语言编写一个语音信号或图象信号去噪的程序?请高手帮忙_百度知 ...
答:输入参数s 语音数据,fs 采样频率,p 下面有说明,共11个,可不输入,有默认值 “过度减法(oversubtraction)”作减法的时候,保留一小部分原来的背景噪音,用这部分背景噪音来掩盖住音乐噪音的谱峰,从而消除了令人不悦的音乐噪音。通过给的参数p,估计噪音,做谱减法。从而消除噪音。function [ss,po]=s...

用MATLAB对语音信号做时域和频谱分析。要求有详细的程序,谢谢了。_百 ...
答:plot(y);title('声音信号的波形');subplot(2,1,2)plot(abs(Y));title('声音信号的频谱');

怎样用matlab画出语音信号的时域波形和频谱图和画出加噪声-3db的白噪 ...
答:wavread();读入wav格式的语音信号 fft()快速傅里叶变换 plot()绘制二维图形 randn() 高斯白噪声 示例:x=wavread('file.wav');%读取波形文件获得数据 x=x(1:1024);%取前1024点作为处理使用数据 fx=fft(x);figure(1);subplot(211);plot(x);subplot(212)plot(abs(fx));snr=.3;x1=x+snr...

如何用matlab实现语音信号处理与分析?程序不要太繁
答:k 是从WAV文件读取出来的一段语音信号,其实就是一个h点的行向量,h是k的长度。设置了一个门限值th=0.035。对向量k,从头开始每个点依次与门限值比较,第一个幅度大于0.035的点记为语音起点i,从尾开始每个点依次与门限值比较,第一个幅度大于0.035的点记为语音终点j。将k的语音部分新命名为...

语音信号处理预加重、加窗分帧matlab程序?
答:个人毕业设计的一些相关代码(供参考)获取语音信号 [filename,pathname]=uigetfile('*.wav','choose a audio file:');[wavin,fs,nbits]=wavread([pathname filename]);wav_l=length(wavin); %采样点数,length()返回值是标量 frame_l=0.04*fs; %根据fs选择帧长,step_l=floor(0.5*fr...

用matlab实现语音通信仿真的问题!
答:本程序对语言信号进行采样、量化、二进制编码后,使用2ASK调制。传输通道为高斯白噪声通道。最后解调、解码,并还原信号、进行播放。说明:1)把本程序粘贴到matlab中便可运行。2)使用声音文件用window录音机录音,命名为war.wav。建议声音在1秒左右,并且最开始不用留空,直接录音。3)设定仿真值可以调整...

课程设计的题目:基于MATLAB的语音信号分析及滤波
答:n = length (y) ; %求出语音信号的长度 Y=fft(y,n); %傅里叶变换 subplot(2,1,1);plot(y);title('原始信号波形');subplot(2,1,2);plot(abs(Y));title('原始信号频谱')加噪语音信号程序 figure(2);[y,fs,nbits]=wavread ('ly');n = length (y) ; %求出语音信号...

用Matlab实现语音信号的快放,慢放功能的函数怎么写,求大神帮忙?_百度...
答:设y表示音频数据,采样率为fs sound(y,A*fs); A>1时为快放,反之为慢放

MATLAB语音信号加噪去噪
答:= 44100; %采样率f0 = 5000; %信号频率N = 1024;%巴特沃斯低通滤波器Wp = 10000/fs; Ws = 15000/fs;Rp = 3;Rs = 60;[n,Wn] = buttord(Wp,Ws,Rp,Rs);[b,a] = butter(n,Wn);figure;freqz(b,a,N); title('巴特沃斯低通滤波器特性');tp = N/fs; %采样时长t = 0:1/...