Code covered by the BSD License  

Highlights from
Vectorized Adaptive noise canceler using LMS filter

image thumbnail

Vectorized Adaptive noise canceler using LMS filter

by

 

07 Sep 2007 (Updated )

This demo shows to call external functions in an Embedded MATLAB block

treesum_fcn(u)
function y = treesum_fcn(u)
%Implement the 'sum' function without a for-loop
%  y = sum(u);

%  The loop based implemntation of 'sum' function is not ideal for 
%  HDL generation and results in a longer critical path. 
%  A tree is more efficient as it results in
%  delay of log2(N) instead of a delay of N delay

%  This implementation shows how to explicitly implement the vector sum in 
%  a tree shape to enable hardware optimizations.

%  The ideal way to code this generically for any length of 'u' is to use 
%  recursion but it is not currently supported by Embedded MATLAB


% NOTE: To instruct Embedded MATLAB to compile an external function, 
% add the following compilation directive or pragma to the function code
%#eml


% Please note that this implementation is hardwired for a 40tap filter.

%20
level1 = vsum(u);

%10
level2 = vsum(level1);

%5
level3 = vsum(level2);

%3
level4 = vsum(level3);

%2
level5 = vsum(level4);

%1
level6 = vsum(level5);


y = level6;



function output = vsum(input)

nt = numerictype(input);
fm = fimath(input);

nd = numel(input)/2;
vt = input(1:2:end);
    
for i = int32(1:nd)
    k = int32(i*2);
    vt(i) = fi(vt(i) + input(k), nt, fm);
end

output = vt;

Contact us