Continue to Site

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.

Basic Matching Pursuit Channel Estimation

Status
Not open for further replies.

David83

Advanced Member level 1
Joined
Jan 21, 2011
Messages
410
Helped
45
Reputation
92
Reaction score
45
Trophy points
1,308
Activity points
3,639
Hi,

I am using the algorithm presented in " Sparse channel estimation via matching pursuit with application to equalization", for channel estimation as following:

Code:
Np=24;
Nd=128;
L=19;
TapsL=[1 10 12 19 20];
S=length(TapsL);

Index=zeros(S,1);%Tap Locations   
    c=zeros(L+1,1);
    cHatMP=zeros(L+1,1);
    hHatMP=zeros(S,1);%Taps CS Estimates
    
    h=(1/sqrt(2.*(S))).*(randn(S,1)+1i.*randn(S,1));
    c(TapsL)=h;
   
   
    
    %Channel Estimation
    np=(1/sqrt(2*SNR(ii))).*(randn(Np+L,1)+1i.*randn(Np+L,1));
    n=(1/sqrt(2*SNR(ii))).*(randn(Nd+L,1)+1i.*randn(Nd+L,1));
    
    xpCP=[xp(end-L+1:end);xp];
    
    yp=filter(c,1,xpCP)+np;
    
    yp(1:L)=[];
    
    cHatLS=inv(transpose(conj(A))*A)*transpose(conj(A))*yp;
    CHatLS=fft(cHatLS,Nd);
    WZFLS=1./CHatLS;
    WMMSELS=conj(CHatLS)./(abs(CHatLS).^2+1/SNR(ii));
    
    for ss=1:S
        max=0;
        for pp=1:L+1
            if ss>1
                set=0;
                for mm=1:ss-1
                    if Index(mm)==pp
                        set=1;
                    end
                end
                if set==0
                    Proj=(abs(transpose(conj(A(:,pp)))*yp)^2)/norm(A(:,pp))^2;
                    if Proj>max
                       max=Proj;
                       maxIndex=pp;
                    end 
                end
            else
                Proj=(abs(transpose(conj(A(:,pp)))*yp)^2)/norm(A(:,pp))^2;
                if Proj>max
                   max=Proj;
                   maxIndex=pp;
                end
            end                   
        end
        hHatMP(ss)=transpose(conj(A(:,maxIndex)))*yp/norm(A(:,maxIndex))^2;
        Index(ss)=maxIndex;
        yp=yp-((transpose(conj(A(:,maxIndex)))*yp*A(:,maxIndex))/norm(A(:,maxIndex))^2);
    end 
    
     
    cHatMP(Index)=hHatMP;

However, when I use this channel estimate to find the BER, I get an error floor, whereas there is no error floor in perfect CSI curve. WHY?

Thanks in advance
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top