Tuner Upper Removal Demonstration

From Class Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
% Demonstration of LMS algorithm for noise cancellation.  Tuner upper problem.
% Rich Kozick, Spring 1997
% Rob Frohne's  modifications for Macintosh 2000
% and Linux 2006 or so.


clear all
Fs=8000; % 8 Khz sampling for Linux.
T0 = 2;  % 2 seconds

system("espeak 'After hitting enter in the command window, speak the signal.'");
st = record(T0,Fs);
%st=wavread('Hello.wav');
st=st(:,1);

system("espeak 'Here is the signal.'")
soundsc(st);

Ls = length(st);
T0=length(st)/Fs;
%  Make the tuner upper noise or even several at the same time.
t=0:1/Fs:T0-1/Fs;
n =  10*(sin(2*pi*100*pi*t) + cos(2*pi*600*t) + 1.5*sin(2*pi*850*t));

% Add him or them to the desired signal.
x = st' + n;

system("espeak 'Here is the noisy signal.'")
soundsc(x,Fs);

N = 64;         % Length of adaptive filter

% LMS algorithm for adaptive noise cancellation

h = ones(N,1);
mu = 0.1;
for k=N:Ls
  xk = x(k:-1:(k-N+1));
  y(k) = h'*xk';
  e(k) = y(k);
  h = h - 2*mu*e(k)*xk'/(xk*xk');
end

% The signal estimate is in the vector e
system("espeak 'Here is a scaled version of the tail of the cleaned signal.'");
skip =1000;
soundsc(e(skip:length(e)),Fs);