Code

TMX Transmultiplexer (MATLAB Version)

David Valencia February 2, 20116 comments Coded in Matlab

This program executes a FDM (Frequency Division Multiplexion) via a Discrete Wavelet Transformation. It uses Daubechies filters.

It has a step-by-step execution, in order to see the regeneration of the signal by each output branch. If you need any explanation please ask in the comment section.

 

A REFERENCE REPORT CAN BE FOUND AT:

http://www.box.net/shared/hca98fycuq

 

Please get the needed functions in the other code snippets below:

getsinc.m -> http://www.dsprelated.com/showcode/72.php

double2cfloat.m -> http://www.dsprelated.com/showcode/71.php

formafiltrosdwpt.m (TMX Integrated version) -> http://www.dsprelated.com/showcode/74.php

recorreder.m -> http://www.dsprelated.com/showcode/43.php

upsample2.m -> http://www.dsprelated.com/showcode/10.php

 

% UPIITA IPN 2010
% Procesamiento Digital de Señales
% Grupo 6TM1  Equipo #8
% Team members
%   Rogelio Baeza Nieves
%   Ponce Mosso Catarina
%   Valencia Pesqueira José David

% TMX Transmultiplexer -> Chain processing

close all;clear all;clc;

n_stages = 2;
n_branches = 2^n_stages;
dec_factor = 2^n_stages;
niter = 500;

N = 16;
input = zeros(2^n_stages,N);
for(k = 0:2^n_stages-1)
    input(k+1,:) = (1 + k * N ):((k+1)*N);
end
input;
in_cnt = 1;

typeofbasis = 'o';
typbior = 'bior2.2';
typor = 'db2';

if(typeofbasis == 'b')
    [Rf,Df] = biorwavf(typbior);
    [h0,h1,g0,g1] = biorfilt(Df,Rf);
elseif (typeofbasis == 'o')
    [h0,h1,g0,g1] = wfilters(typor);
end;

L = length(h0);

try
    sinc_factor = getsinc(n_stages,L) - 1;
catch
    disp('Error');
    return
end

for i = 1:1
hx = fliplr(formafiltrosdwpt(n_stages,2^n_stages,h0,h1));
Lhx = length(hx);
H = zeros(2^n_stages, Lhx);
for i=0:(2^n_stages)-1
    H(i+1,:)=fliplr(formafiltrosdwpt(n_stages,2^n_stages-i,h0,h1));
end
La = length(H(1,:));

G = zeros(2^n_stages, Lhx);
for i=0:(2^n_stages)-1
    G(i+1,:)=fliplr(formafiltrosdwpt(n_stages,2^n_stages-i,g0,g1));
end
Ls = length(G(1,:));

double2cfloat(H,'h', G,'g',sinc_factor);

analysisbuffer = zeros(1,La);

y = zeros(2^n_stages,1);

sbuffer = zeros(2^n_stages, Ls);
xnbuff = zeros(2^n_stages,1);
chanbuffer = [0];
outputbuffer = zeros(2^n_stages,1);
end

for i=1:niter %General iteration counter
    
    %% Synthesis stage
    i
    % Vector shifting (CLK/1)
    for j = 1:(2^n_stages)
        sbuffer(j,:) = recorreder(sbuffer(j,:),1);
    end
    
% Input interpolation
    if (mod(i,2^n_stages) == 1)&&(in_cnt<N-1)
        sbuffer(:,1) = input(:,in_cnt);
        in_cnt = in_cnt + 1;
    else
        sbuffer(:,1) = zeros(2^n_stages,1);
    end
    
    disp('inputs: ');
    disp(sbuffer)
    
    xnbuff = zeros(2^n_stages,1);
    for j=0:(2^n_stages)-1
        for k = 1 : Ls %convolution
            xnbuff(j+1,1) = xnbuff(j+1,1) + sbuffer(j+1,k)*G(j+1,k);
        end
    end
    
    chanbuffer = sum(xnbuff)   
    
    %% Analysis stage
    analysisbuffer = recorreder(analysisbuffer,1);    
    analysisbuffer(1)=chanbuffer;
    analysisbuffer;
   
    if (i>sinc_factor && mod(i-sinc_factor,2^n_stages) == 1)
    % If the counter is a multiply of the decimating factor, then compute
        y = zeros(2^n_stages,1);
        for j = 0:(2^n_stages)-1
            for k=1:La %convolución
                y(j+1,1) = y(j+1,1) + analysisbuffer(k)*H(j+1,k);
            end;
        end
        outputbuffer = y;
    end
    input;
    i
    outputbuffer
    pause;
end
  	return;

Comments:

David VP
Said:
UPDATE: More information about this program can be found at: http://www.box.net/shared/hca98fycuq
9 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
rainits4
Said:
may u help me with the step-by-step execution, in order to see the regeneration of the signal by each output branch.
8 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
rainits4
Said:
and do we any equation give a relation ship between oder of filter ,samples and interpolation factor
8 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
David VP
Said:
rainits4 wrote: "may u help me with the step-by-step execution, in order to see the regeneration of the signal by each output branch" Well, for debugging or seeing the step by step execution you could write the following inside the loop blocks of your interest: pause;
8 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
David VP
Said:
rainits4 wrote: "And do we any equation give a relationship between order of filter, samples and interpolation factor?" Yes, within the first lines of code one has: dec_factor = 2^n_stages; So, the interpolation (or decimate factor, depends on how you see it) is a function of the number of filtering stages (filter order)
8 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
vinod021
Said:
hi i am able to understand the output in matrix form . kindly give the result in graph or gui format or elaborate each stage .
7 years ago
0
Reply
Sorry, you need javascript enabled to post any comments.
Sorry, you need javascript enabled to post any comments.