qinle 发表于 2007-1-28 16:42

有关自适应噪声抵消问题,请高手指教

最近看自适应噪声抵消,参考别人的例子,写了个基于基本LMS算法的程序,如下:
% LMS method for noise cancellation
%----------------use audio signal "good morning"--------------------------------------
clear;
clc;
disp(' =========================');
disp(' LMS ');
disp(' =========================');
% --------- Initialization ----------
hord=20;
% ---------- signal and noise generation -----------
s=wavread('sound');
len=length(s);
s=2*len;
s=s';                %这两句先不加,可看后面的文字
n=1:len;
v=(sin(0.6*n))';         %噪声
x=(sin(0.6*n-0.8*pi))';%参考输入
d=s+10*v;
wavwrite(x,15000,16,'daizao');
ws=zeros(hord+1,len-hord);
errs=zeros(len,1);
mus=0.008;
% --------- LMS noise cancellation ---------
for i=hord+1:len-hord
j=i-hord:1:i;
x1=x(j);
ys(i)=ws(:,i)'*x1;
errs(i)=d(i)-ys(i);
q(i)=errs(i)-s(i);
n1=hord+1;n2=len-hord;
Eq(i)=sum(abs(q(i)).^2);
Pq(i)=Eq(i)/(n2-n1);
ws(:,i+1)=ws(:,i)+mus*x1*errs(i);
end
% WAVWRITE(Y,FS,WAVEFILE)
wavwrite(errs,15000,'shuchu');
figure(1)
plot(s),title('original');
figure(2)
plot(d),title('noisy signal');
figure(3)
plot(errs),title('output');
% ERROR EFFICIENCY
figure(4)
plot(Pq),title('error efficency');
figure(5)
plot(ws(10,:)),title('converge line')

上面的程序采用的是在一个wav音频+上了噪声,然后去噪.可是如果我把原始信号改成一个线性函数,还用这个方法(加上斜线部分),得到的结果怎么不对呀,请明白的同学指教.
还有一问:如果噪声是 sin(2*n)+sin(0.5*pi*n),那么参考信号是不是要是频率为2和0.5*pi的两个正弦相加才可以.因为我做了个试验sin(2*n)+sin(0.5*pi*n)+sin(3*pi*t), 参考信号为为sin(2*n+23)+sin(0.5*pi*n+2)+0.6*sin(3*pi*t), 可以去噪,而参考为sin(2*n+23)+sin(0.5*pi*n+2)就去不了,是不是自适应噪声抵消只有在参考信号覆盖噪声的所有频率才可以去噪呢?请指教

[ 本帖最后由 zhlong 于 2007-6-4 17:48 编辑 ]

qinle 发表于 2007-1-30 15:40

问题解决了!:)

smallkevin 发表于 2007-3-8 21:18

你好 !
首先感谢你提供了一份语音去噪的matlab参考程序。
其次,我是准备应用SOPC来实现语音去噪的,能不能和你交流一下?感谢。
页: [1]
查看完整版本: 有关自适应噪声抵消问题,请高手指教