Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

discussion lms algorithm echo cancellation

Status
Not open for further replies.

dervisakyuz

Junior Member level 2
Joined
Sep 21, 2005
Messages
23
Helped
1
Reputation
2
Reaction score
0
Trophy points
1,281
Activity points
1,490
pls dont recommend me "adaptive filter theory simon haykin" i have book but i cant do anything on matlab. i need helppppp

i add a lms for echo cancellation but how can enter the inputs(for example number of iterations,filter_size..) in order to find the outputs of function.Let us discuss and learn something on this algorithm.We can plot the output signals to see more effectively.

function [input_signal, error_signal, desired_signal, filter_output, impulse, filter_current, mse, db,db_avg]=LMS(filter_size, step_size, input_file, iterations)
% Function to perform the LMS algorithm on an input file.
% Inputs: Filter order, step size, input wav file, number of iterations.
% Outputs: Input signal, error estimation signal (echo cancelled), desired signal (echoed signal), adaptive filter output, real impulse response
% Estimation of impulse response, mean sqaure error, attenuation (dB), average attenuation.

%Read in the input file
input_signal =wavread(input_file);
% Create the impulse response for the desired signal
impulse=zeros(filter_size,1);
for (i=1:5)
impulse(((i-1)*filter_size/5)+1)=1/i;
end

% Convolve the impulse with the input signal to generate the desired signal
desired_signal = conv(input_signal, impulse);

% initialise adaptive filter impulse and input vector to zero vector of length specified at command line
filter_current = zeros(filter_size,1);
input_vector = zeros(filter_size, 1);

% Loop for number of iterations specified in command line.
for i=1:iterations
i
input_vector(1)=input_signal(i); % insert new sample at beginning of input vector.
filter_output(i)=dot(filter_current, input_vector); %Caluclate adaptive filter output
error= desired_signal(i)-filter_output(i) % Calculate estimation error
filter_current = filter_current + 2*step_size*error*input_vector; % Update filter taps by LMS recursion

% Shfit values ion vector along.
for j=filter_size:-1:2
input_vector(j)=input_vector(j-1);
end

error_signal(i)=error; % store estimation error
cost(i)=error*error; % calculate instantaneous cost sqaure error

if (i==1)
fc0=filter_current;
end
if (i==7500)
fc1=filter_current;
end
if (i==15000)
fc2=filter_current;
end
if (i==22500)
fc3=filter_current;
end
if (i==30000)
fc4=filter_current;
end
end

% Find moving average of error squared.
for i=1:iterations-100
mse(i)=mean(cost(i:i+100));

end

%find moving avarage of db attenuation (averaged to smooth output).
for i=1:iterations-2500
db(i)=-20*log10(mean(abs(desired_signal(i:i+2500)))'./mean(abs(error_signal(i:i+2500))));

end

%find total avarage db attenuation
db_avg=mean(db);
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top