信噪比与错误指数matlab,关于信噪比不符合理论值的问题

该博客探讨了在8000Hz采样率下对单声道语音信号添加30dB高斯白噪声后信噪比的变化,并通过多尺度小波去噪(包括软阈值和硬阈值方法)进行信号恢复。实验结果显示,尽管理论上软阈值去噪效果最优,但在实际应用中,软阈值去噪后的信噪比低于其他方法。作者展示了不同去噪方法对语音信号时域和频域的影响,并分享了计算信噪比的函数代码。
摘要由CSDN通过智能技术生成

在求解信噪比时,加30db的高斯白噪声后所求得的信噪比不是30。而且理论上软阈值去噪效果应该是最好的,但是软阈值去噪后得到的信噪比却比其他方法要小,而且所有求得的信噪比数值都很小。我也在论坛里看到过类似的情况,但是自己还是没能解决,希望得到给位的指点教导,非常感谢!

clear all; clc; close all;

fs=8000;                  %语音信号采样频率为8000

xx=wavread('lw.wav');

x1=xx(:,1);%取单声道

t=(0:length(x1)-1)/8000;

y1=fft(x1,2048);

f=fs*(0:1023)/2048;

figure(1)

plot(t,x1)                   %做原始语音信号的时域图形

figure(2)

plot(f,abs(y1(1:1024)))       %做原始语音信号的FFT频谱图

y=awgn(x1',30);   %加30db的高斯白噪声

snr=SNR_singlech(x1,y')%求得信噪比

figure(3)

plot(t,y)                   %做加噪语音信号的时域图形

[c,l]=wavedec(y,3,'db1');%多尺度一维分解

%用db1小波对信号进行3层分解并提取系数

a3=appcoef(c,l,'db1',3);

%a2=appcoef(c,l,'db1',2);

%a1=appcoef(c,l,'db1',1);

d3=detcoef(c,l,3);

d2=detcoef(c,l,2);

d1=detcoef(c,l,1);

%对信号进行强制去噪

dd3=zeros(1,length(d3));

dd2=zeros(1,length(d2));

dd1=zeros(1,length(d1));

c1=[a3 dd3 dd2 dd1];

y3=waverec(c1,l,'db1');%多尺度小波变换重构

snr=SNR_singlech(x1,y3')%求得信噪比 均方误差

figure(4);

plot(t,y3);

title('强制消噪后语音信号');

%默认阀值去噪

[thr,sorh,keepapp]=ddencmp('cmp','wp',y);

y4=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);

snr=SNR_singlech(x1,y4')%求得信噪比

figure(5);

plot(t,y4);

title('默认阈值消噪后信号');

%软阀值去噪

thr1=thselect(d1,'rigrsure');%阈值获取,使用Stein的无偏风险估计原理

thr2=thselect(d2,'rigrsure');

thr3=thselect(d3,'rigrsure');

sd1=wthresh(d1,'s',thr1);

sd2=wthresh(d1,'s',thr2);

sd3=wthresh(d1,'s',thr3);

c2=[a3 sd3 sd2 sd1];

y5=waverec(c2,l,'db1');%多尺度重构

snr=SNR_singlech(x1,y5')%求得信噪比

figure(6);

plot(t,y5);

title('给定阈值(软)消噪后语音信号');

%进行硬阈值处理

hd1=wthresh(d1,'h',thr1);

hd2=wthresh(d2,'h',thr2);

hd3=wthresh(d3,'h',thr3);

c3=[a3 hd3 hd2 hd1];

y6=waverec(c3,l,'db1');

snr=SNR_singlech(x1,y6')%求得信噪比

figure(7);

plot(t,y6);

title('给定阈值(硬)消噪后语音信号');

另:

function snr=SNR_singlech(I,In)

% 计算信噪比函数

% I :原始信号

% In:染噪信号

snr=0;

Ps=sum(sum((I-mean(mean(I))).^2));%signal power

Pn=sum(sum((I-In).^2));           %noise power

snr=10*log10(Ps/Pn);

f8c6e8cfa5d3d3b7f8a336baacf73d31.gif

2013-5-14 17:12 上传

点击文件名下载附件

391.91 KB, 下载次数: 3649

lw.wav

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值