声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7048|回复: 12

[小波] [转帖]小波去噪matlab程序

[复制链接]
发表于 2005-12-6 09:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 wdhd 于 2016-3-17 14:26 编辑

  ******************************************

  clear

  clc

  %在噪声环境下语音信号的增强

  %语音信号为读入的声音文件

  %噪声为正态随机噪声

  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);

  end

  %在小波基'db3'下进行一维离散小波变换

  [coefs1,coefs2]=dwt(y,'db3'); %[低频 高频]

  count2=length(coefs1);

  count3=length(coefs2);

  energy1=sum((abs(coefs1)).^2);

  energy2=sum((abs(coefs2)).^2);

  energy3=energy1+energy2;

  for i=1:count2

  recoefs1(i)=coefs1(i)/energy3;

  end

  for i=1:count3

  recoefs2(i)=coefs2(i)/energy3;

  end

  %低频系数进行语音信号清浊音的判别

  zhen=160;

  count4=fix(count2/zhen);

  for i=1:count4

  n=160*(i-1)+1:160+160*(i-1);

  s=sound(n);

  w=hamming(160);

  sw=s.*w;

  a=aryule(sw,10);

  sw=filter(a,1,sw);

  sw=sw/sum(sw);

  r=xcorr(sw,'biased');

  corr=max(r);

  %为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0

  if corr>=0.8

  output1(i)=0;

  elseif corr<=0.1

  output1(i)=1;

  end

  end

  for i=1:count4

  n=160*(i-1)+1:160+160*(i-1);

  if output1(i)==1

  switch abs(recoefs1(i))

  case abs(recoefs1(i))<=0.002

  recoefs1(i)=0;

  case abs(recoefs1(i))>0.002 & abs(recoefs1(i))<=0.003

  recoefs1(i)=sgn(recoefs1(i))*(0.003*abs(recoefs1(i))-0.000003)/0.002;

  otherwise recoefs1(i)=recoefs1(i);

  end

  elseif output1(i)==0

  recoefs1(i)=recoefs1(i);

  end

  end

  %对高频系数进行语音信号清浊音的判别

  count5=fix(count3/zhen);

  for i=1:count5

  n=160*(i-1)+1:160+160*(i-1);

  s=sound(n);

  w=hamming(160);

  sw=s.*w;

  a=aryule(sw,10);

  sw=filter(a,1,sw);

  sw=sw/sum(sw);

  r=xcorr(sw,'biased');

  corr=max(r);

  %为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0

  if corr>=0.8

  output2(i)=0;

  elseif corr<=0.1

  output2(i)=1;

  end

  end

  for i=1:count5

  n=160*(i-1)+1:160+160*(i-1);

  if output2(i)==1

  switch abs(recoefs2(i))

  case abs(recoefs2(i))<=0.002

  recoefs2(i)=0;

  case abs(recoefs2(i))>0.002 & abs(recoefs2(i))<=0.003

  recoefs2(i)=sgn(recoefs2(i))*(0.003*abs(recoefs2(i))-0.000003)/0.002;

  otherwise recoefs2(i)=recoefs2(i);

  end

  elseif output2(i)==0

  recoefs2(i)=recoefs2(i);

  end

  end

  %在小波基'db3'下进行一维离散小波反变换

  output3=idwt(recoefs1, recoefs2,'db3');

  %对输出信号抽样点值进行归一化处理

  maxdata=max(output3);

  output4=output3/maxdata;

  %读出带噪语音信号,存为'101.wav'

  wavwrite(y,5500,16,'c101');

  %读出处理后语音信号,存为'102.wav'

  wavwrite(output4,5500,16,'c102');

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2006-4-11 10:58 | 显示全部楼层
能不能把信号给传一下,谢谢!
发表于 2006-5-27 19:57 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-17 14:26 编辑

  好贴顶起来,感谢楼主分享!!
发表于 2006-6-10 18:01 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-17 14:27 编辑

  楼主,语音信号用wavwrite函数写文件,听不到声音呀。求助
发表于 2007-3-8 20:59 | 显示全部楼层

回复 #12 zhao197642 的帖子

可以听到声音啊,估计是你的音量开得不够大~:@)
发表于 2008-4-7 16:51 | 显示全部楼层
如果是图像,二维的呢?
发表于 2008-4-14 10:55 | 显示全部楼层
好东西当然要支持一下
发表于 2008-4-14 17:33 | 显示全部楼层
hao dong xi
zhi chi yi xia
发表于 2008-4-18 16:17 | 显示全部楼层
谢谢楼主,可以参考下:@) :@)
发表于 2010-9-1 16:12 | 显示全部楼层
这个对我横有帮助  谢谢!
发表于 2010-9-2 15:11 | 显示全部楼层
小波去噪是不是也得分几种方法。
头像被屏蔽
发表于 2014-7-28 17:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-12 04:01 , Processed in 0.114731 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表