Tuner Upper Removal Demonstration: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Brian.Clark (talk | contribs) No edit summary |
||
| Line 5: | Line 5: | ||
clear all | clear all | ||
Totaltime=1; | Totaltime=1; | ||
speak('Hit a key and speak the signal.'); | speak('Hit a key and speak the signal.'); | ||
pause; | pause; | ||
[st, Fs] = recordsound(Totaltime, 22050, 1); | [st, Fs] = recordsound(Totaltime, 22050, 1); | ||
s = st'; | s = st'; | ||
Ls = length(s); | Ls = length(s); | ||
% Interference + random noise | % Interference + random noise | ||
speak('Hit a key and make the noise!'); | speak('Hit a key and make the noise!'); | ||
pause; | pause; | ||
[nt,Fs] = recordsound(Totaltime, 22050, 1); | [nt,Fs] = recordsound(Totaltime, 22050, 1); | ||
n = nt'; | n = nt'; | ||
%Sign = 0.01; | %Sign = 0.01; | ||
%Dn=20; % Delay of the noise that appears in y. | %Dn=20; % Delay of the noise that appears in y. | ||
%n = n(1:Ls) + Sign*randn(Ls,1); | %n = n(1:Ls) + Sign*randn(Ls,1); | ||
%an = [0 .01 -.5 1 -.5 .1 .01 0]; | %an = [0 .01 -.5 1 -.5 .1 .01 0]; | ||
an = 4*[0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5 1 .5]; | an = 4*[0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5 1 .5]; | ||
bn = [1]; | bn = [1]; | ||
%sys = tf(an,bn,1/Fs); | %sys = tf(an,bn,1/Fs); | ||
%bode(sys); | %bode(sys); | ||
%figure(1); | %figure(1); | ||
nf = filter(an,bn,n); | nf = filter(an,bn,n); | ||
%nf = [nf(Dn:(Ls)); zeros(Dn-1,1)] + Sign*randn(Ls,1); | %nf = [nf(Dn:(Ls)); zeros(Dn-1,1)] + Sign*randn(Ls,1); | ||
y = s + nf; | y = s + nf; | ||
Sigx = 0.01; | Sigx = 0.01; | ||
bx = [1]; % bx and ax are filtering on n to produce x | bx = [1]; % bx and ax are filtering on n to produce x | ||
ax = [1]; | ax = [1]; | ||
Dx = 1; % Delay of n that appears in x | Dx = 1; % Delay of n that appears in x | ||
x = filter(bx, ax, n);%x = [x(Dx:(Ls)); zeros(Dx-1,1)] + Sigx*randn(Ls,1); | x = filter(bx, ax, n);%x = [x(Dx:(Ls)); zeros(Dx-1,1)] + Sigx*randn(Ls,1); | ||
%x = n + Sigx*randn(Ls,1); | %x = n + Sigx*randn(Ls,1); | ||
speak('Here is the noisy signal.') | speak('Here is the noisy signal.') | ||
soundsc(y,Fs); | soundsc(y,Fs); | ||
N = 20; % Length of adaptive filter | N = 20; % Length of adaptive filter | ||
% LMS algorithm for adaptive noise cancellation | % LMS algorithm for adaptive noise cancellation | ||
h = zeros(N,1); | h = zeros(N,1); | ||
mu = 1/(10*N*var(x)); | mu = 1/(10*N*var(x)); | ||
%mu = 1.0; | %mu = 1.0; | ||
for k=N:Ls xk = x(k:-1:(k-N+1)); nhat(k) = h'*xk; e(k) = - y(k) + nhat(k); h = h - mu*e(k)*xk;%/(xk'*xk); | for k=N:Ls xk = x(k:-1:(k-N+1)); nhat(k) = h'*xk; e(k) = - y(k) + nhat(k); h = h - mu*e(k)*xk;%/(xk'*xk); | ||
end | end | ||
% The signal estimate is in the vector e | % The signal estimate is in the vector e | ||
speak('Here is the cleaned signal.'); | speak('Here is the cleaned signal.'); | ||
soundsc(e,Fs); | soundsc(e,Fs); | ||
Revision as of 12:10, 15 December 2013
% Demonstration of LMS algorithm for noise cancellation.
% Rich Kozick, Spring 1997
% Rob Frohne's modifications for Macintosh 2000.
% Desired signal
clear all
Totaltime=1;
speak('Hit a key and speak the signal.');
pause;
[st, Fs] = recordsound(Totaltime, 22050, 1);
s = st';
Ls = length(s);
% Interference + random noise
speak('Hit a key and make the noise!');
pause;
[nt,Fs] = recordsound(Totaltime, 22050, 1);
n = nt';
%Sign = 0.01;
%Dn=20; % Delay of the noise that appears in y.
%n = n(1:Ls) + Sign*randn(Ls,1);
%an = [0 .01 -.5 1 -.5 .1 .01 0];
an = 4*[0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5 1 .5];
bn = [1];
%sys = tf(an,bn,1/Fs);
%bode(sys);
%figure(1);
nf = filter(an,bn,n);
%nf = [nf(Dn:(Ls)); zeros(Dn-1,1)] + Sign*randn(Ls,1);
y = s + nf;
Sigx = 0.01;
bx = [1]; % bx and ax are filtering on n to produce x
ax = [1];
Dx = 1; % Delay of n that appears in x
x = filter(bx, ax, n);%x = [x(Dx:(Ls)); zeros(Dx-1,1)] + Sigx*randn(Ls,1);
%x = n + Sigx*randn(Ls,1);
speak('Here is the noisy signal.')
soundsc(y,Fs);
N = 20; % Length of adaptive filter
% LMS algorithm for adaptive noise cancellation
h = zeros(N,1);
mu = 1/(10*N*var(x));
%mu = 1.0;
for k=N:Ls xk = x(k:-1:(k-N+1)); nhat(k) = h'*xk; e(k) = - y(k) + nhat(k); h = h - mu*e(k)*xk;%/(xk'*xk);
end
% The signal estimate is in the vector e
speak('Here is the cleaned signal.');
soundsc(e,Fs);