用Matlab语言编写一个语音信号或图象信号去噪的程序请高手帮忙

用Matlab语言编写一个语音信号或图象信号去噪的程序请高手帮忙,第1张

不好意思,没看到维纳滤波,程序就不删了

%谱减法语音增强

%输入参数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 (004): high=reverberant, low=musical

% 2: ta = smoothing time constant for signal power estimate

% used in noise estimation (01)

% 3: tw = fft window length (will be rounded up to 2^nw samples)

% 4: tm = length of minimum filter (15): high=slow response to noise increase, low=distortion

% 5: to = time constant for oversubtraction factor (008)

% 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 (15)

% 10:kf = subtraction floor (002): high=noisy, low=musical

% 11:ko = oversubtraction scale factor (4): high=distortion, low=musical

%检查函数的输入参数,如果输入少于三个,po为默认值,po的参数上面有说明

if nargin<3 po=[004 01 0032 15 008 400 4 4 15 002 4]'; else po=p; end

ns=length(s);

ts=1/fs;

ss=zeros(ns,1);

ni=pow2(nextpow2(fspo(3)/po(8)));

ti=ni/fs;

nw=nipo(8);

nf=1+floor((ns-nw)/ni);

nm=ceil(fspo(4)/(nipo(7)));

win=05hamming(nw+1)/108;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/(nwpo(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=xconj(x);

pxn=zapxn+(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=zoos+(1-zo)(1+osfpn/(pn+pxn));

px=zgpx+(1-zg)x2;

q=max(po(10)sqrt(pn/x2),1-sqrt(ospn/px));

ss(idx)=ss(idx)+irfft(xq);

end

if nargout==0

soundsc([s; ss],fs);

end

void a(int aa)

{for(int i=0;i<aa;i++)printf(" ");}

void b()

{printf ("");}

char c(int cc)

{printf("%c",cc);return 0;}

int main()

{a(6);b();a(3);b();a(5);b();a(3);b();

printf ("\n");

a(4);b();a(8);b();a(8);b();

printf ("\n");

a(3);b();a(19);b();

printf ("\n");

a(3);b();a(4);c(73);a(1);c(76);c(111);c(118);

c(101);a(1);c(89);c(111);c(117);a(5);b();

printf ("\n");

a(4);b();a(17);b();

printf ("\n");

a(6);b();a(13);b();

printf ("\n");

a(8);b();a(9);b();

printf ("\n");

a(10);b();a(5);b();

printf ("\n");

a(13);b();

printf ("\n");return 0;

}

效果如下:

延展阅读:

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。[1]  目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

运行程序步骤: 1编辑:输入源程序并存盘(C) 2编译:将源程序翻译为目标文件(OBJ) 3链接:将目标文件生成可执行文件( EXE) 4运行:执行EXE文件,得到运行结果。

char[12]

name=['猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊'];

int

x=年份%12;

输出

name[x];

net也已经集成了Speech类库了 Microsoft NET Speech,这个你上网搜资料吧,有很多。之前做过一次,把文本内容播报成语音文件。记得是WIN7带的speech组件播放效果要好点,你可以下载安装不同的语音包实现声音不同效果。

以上就是关于用Matlab语言编写一个语音信号或图象信号去噪的程序请高手帮忙全部的内容,包括:用Matlab语言编写一个语音信号或图象信号去噪的程序请高手帮忙、求一个表白的小程序能够用C语音编写、利用VB程序设计语音进行信息的编程加工的四个步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10634897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存