matlab函数噪声模拟,关于LMS去噪声的仿真

使用书上的例子效果很好,但是将白噪声更换为自己录制的声音,其他处理不变的情况下去噪效果很差。原理是自己录制的噪声也是和加噪语音信号完全相关的,效果为什么这么差呢?

%

% pr7_1_1

close all;clear all; clc;

filedir=[];                             % 设置路径

filename='bluesky1.wav';                % 设置文件名

fle=[filedir filename];                 % 构成完整的路径和文件名

[s, fs, bits] = wavread(fle);           % 读入数据文件

s=s-mean(s);                            % 消除直流分量

s=s/max(abs(s));                        % 幅值归一

N=length(s);                            % 语音长度

time=(0:N-1)/fs;                        % 设置时间刻度

SNR=5;                                  % 设置信噪比

%r2=randn(size(s));                     % 产生随机噪声

r2=load('in1.dat');                     % 自己录制的噪声

r2=r2-mean(r2);                         % 消除直流分量

r2=r2/max(abs(r2));

%r2=r2/3;

r2=r2(1:32000);

a=r2(1:8000);

r2(8001:16000)=a;                       %去掉噪声中的突发噪声

b=fir1(31,0.5);                         % 设计FIR滤波器,代替H

r21=filter(b,1,r2);                     % FIR滤波

%[r1,r22]=add_noisedata(s,r21,fs,fs,SNR);% 产生带噪语音,信噪比为SNR

r1 = s+r2;

M=100;                                   % 设置M和mu

mu=0.1;

snr1=SNR_singlech(s,r1);                % 计算初始信噪比

h = adaptfilt.lms(M,mu);                % LMS滤波

[y,e] = filter(h,r2,r1);

output=e;                               % LMS滤波输出

snr2=SNR_singlech(s,output);            % 计算滤波后的信噪比

snr=snr2-snr1;

SN1=snr1; SN2=snr2; SN3=snr;

fprintf('snr1=%5.4f   snr2=%5.4f    snr=%5.4f\n',snr1,snr2,snr);

wavplay(r1,fs);                         % 从声卡发声比较

pause(1)

wavplay(output,fs);

% 作图

% subplot 311; plot(time,s,'k'); ylabel('幅值'); ylim([-1 1 ]); title('原始语音信号');

% subplot 312; plot(time,r1,'k'); ylabel('幅值') ;ylim([-1 1 ]); title('带噪语音信号');

% subplot 313; plot(time,output,'k'); ylabel('幅值');ylim([-1 1 ]); title('LMS滤波输出语音信号');

subplot 411; plot(time,r1,'k'); ylabel('d r1幅值'); ylim([-1 1 ]); title('原始语音信号');

subplot 412; plot(time,r2,'k'); ylabel('x r2幅值') ;ylim([-1 1 ]); title('带噪语音信号');

subplot 413; plot(time,y,'k'); ylabel('y幅值');ylim([-1 1 ]); title('输出y');

subplot 414; plot(time,e,'k'); ylabel('e幅值') ;ylim([-1 1 ]); title('输出e');

xlabel('时间/s');

f0d8cdfa0376d5d3bff874ac3ad923b7.gif

2016-8-22 11:13 上传

点击文件名下载附件

339 KB, 下载次数: 198

噪声文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值