Airplane Noise Removal Demonstration: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
|  Created page with ' % Demonstration of LMS algorithm for noise cancellation.  % Rich Kozick, Spring 1997  % Rob Frohne's modifications for Aircraft Noise Cancellation.  % modifications for Macintos…' | No edit summary | ||
| Line 4: | Line 4: | ||
|   % modifications for Macintosh 2000. (commented out here) |   % modifications for Macintosh 2000. (commented out here) | ||
|   % Rob Frohne's modifications for Linux.   |   % Rob Frohne's modifications for Linux.   | ||
|   % Aircraft noise cancellation simulation. |   % Aircraft noise cancellation simulation. | ||
|   % Desired signal |   % Desired signal | ||
|   clear all |   clear all | ||
|   Totaltime=3; |   Totaltime=3; | ||
|   system("aoss espeak 'Hit a key and speak the signal.'"); |   system("aoss espeak 'Hit a key and speak the signal.'"); | ||
|   Fs=8000; %sample rate. |   Fs=8000; %sample rate. | ||
|   st=record(Totaltime,Fs); |   st=record(Totaltime,Fs); | ||
|   s = st'; |   s = st'; | ||
|   Ls = length(s); |   Ls = length(s); | ||
|   % Interference + random noise |   % Interference + random noise | ||
|   system("aoss espeak 'Hit a key and make the noise!'"); |   system("aoss espeak 'Hit a key and make the noise!'"); | ||
| Line 35: | Line 30: | ||
|   nf = filter(bn,an,n); |   nf = filter(bn,an,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;    | ||
|   %ax = [1];       % bx and ax are filtering on n to produce x |   %ax = [1];       % bx and ax are filtering on n to produce x | ||
| Line 45: | Line 37: | ||
|   %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 = x + Sigx*randn(1,Ls); |   %x = x + Sigx*randn(1,Ls); | ||
|   system("aoss espeak 'Here is the noisy signal.'"); |   system("aoss espeak '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(n)); |   %mu = 1/(10*N*var(n)); | ||
| Line 62: | Line 54: | ||
|      h = h - mu*e(k)*xk'/(xk*xk'); % For the previous line. |      h = h - mu*e(k)*xk'/(xk*xk'); % For the previous line. | ||
|   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.'); | ||
Revision as of 11:39, 30 November 2010
% Demonstration of LMS algorithm for noise cancellation.
% Rich Kozick, Spring 1997
% Rob Frohne's modifications for Aircraft Noise Cancellation.
% modifications for Macintosh 2000. (commented out here)
% Rob Frohne's modifications for Linux. 
% Aircraft noise cancellation simulation.
% Desired signal
clear all
Totaltime=3;
system("aoss espeak 'Hit a key and speak the signal.'");
Fs=8000; %sample rate.
st=record(Totaltime,Fs);
s = st';
Ls = length(s);
% Interference + random noise
system("aoss espeak 'Hit a key and make the noise!'");
%pause();
nt = record(Totaltime, Fs);
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];
%bn = 4*[0 0 0 0 0 0 0 0 0 0 0 0 0 0 .5 1 .5];
bn=rand(1,20);
an = [1];
%sys = tf(an,bn,1/Fs);
%bode(sys);
%figure(1);
nf = filter(bn,an,n);
%nf = [nf(Dn:(Ls)); zeros(Dn-1,1)] + Sign*randn(Ls,1);
y = s + nf;
%Sigx = 0.01;  
%ax = [1];       % bx and ax are filtering on n to produce x
%bx = [0 0 0 .1 1 .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 = x + Sigx*randn(1,Ls);
system("aoss espeak '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(n));
mu = .05;
for k=N:Ls
   xk = n(k:-1:(k-N+1));
   nhat(k) = h'*xk';
   e(k) = - y(k) + nhat(k);
   h = h - mu*e(k)*xk'/(xk*xk'); % For the previous line.
end
% The signal estimate is in the vector e
%speak('Here is the cleaned signal.');
system("aoss espeak 'Here is the cleaned signal.'");
soundsc(e(1,6000:end),Fs);
%playaudio(e);  (For Linux without octave-forge.)