⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 all_detector.m

📁 cdma detectors like decoorelator mmse mf and others
💻 M
字号:
close all
clear all;
clc;

K = 20;                 %No. of users
A = eye(K);
snr = -20:2:20;
N = 200;                %No. of bits
Navg = 10;              %No. of repititions
SPIC = 10;               %No. PIC stages
SSIC = 10;               %No. SIC stages

%Noise variance in different SNR
Sv = (10.^(-snr/10));

%Get signature sequences
load GS31;
S = GS31(1:K,:);
S = S';
Lc = length(S(:,1));


%Normalize energy of signature waveforms
a = S./sqrt(Lc);

% Calculate correlation matrix
for i=1:K
    for j=1:K
        R(i,j)=sum(a(:,i).*a(:,j));
    end
end


for t = 1:Navg
    for j = 1:length(snr)
        b=2*(randint(K,N)-0.5);
        novector(1:K)=Sv(j);
        sigma2Aminus2=diag(novector);
        noise =(Sv(j))^.5*randn(K,N);
        noiseSIC =(Sv(j))^.5*randn(Lc,N);


        ys =(R*(A*b + noise));
        ysdec = (inv(R)*(R*(A*b + noise)));
        ysMMSE =(inv(R+sigma2Aminus2)*(R*(A*b + noise)));
        ysPIC = ys;
        ysSIC =(a*A*b + noiseSIC);

        yMF = sign(ys);
        ydec = sign(ysdec);
        yMMSE = sign(ysMMSE);

        %-------------------PIC--------------------------------------
        for pic = 1:SPIC
            for n = 1:N
                for k = 1:K
                    YY(:,k) = ysPIC(:,n).*R(:,k);
                end
                I(:,n) = sum(YY,1)'-diag(YY);
                yPIC(:,n) = sign(ysPIC(:,n) - I(:,n));
            end

        end
        %--------------------end PIC-----------------------------------



        %---------------------SIC-------------------------------------
        for n = 1:N
            yinit = zeros(K,1);
            e = ysSIC(:,n);
            for sic = 1:SSIC
                for k = 1:K
                    y = a(:,k)'*e + yinit(k);
                    e = (e - a(:,k)*a(:,k)'*e);
                    ynext(k) = y;
                end
                yinit = ynext';
            end
            ySIC(:,n) = yinit;
        end
        ySIC = sign(ySIC);
        %-------------------end SIC-----------------------------------

        for k = 1:K
            er{k}(j)=(length(find(yMF(k,:)~=b(k,:))))/N;
            erdec{k}(j)=(length(find(ydec(k,:)~=b(k,:))))/N;
            erMMSE{k}(j)=(length(find(yMMSE(k,:)~=b(k,:))))/N;
            erPIC{k}(j)=(length(find(yPIC(k,:)~=b(k,:))))/N;
            erSIC{k}(j)=(length(find(ySIC(k,:)~=b(k,:))))/N;
        end
    end

    for k = 1:K
        eer{t}(k,:) = (er{k});
        eerdec{t}(k,:) = (erdec{k});
        eerMMSE{t}(k,:) = (erMMSE{k});
        eerPIC{t}(k,:) = (erPIC{k});
        eerSIC{t}(k,:) = (erSIC{k});
    end
    BER(t,:) = mean(eer{t});
    BERdec(t,:) = mean(eerdec{t});
    BERMMSE(t,:) = mean(eerMMSE{t});
    BERPIC(t,:) = mean(eerPIC{t});
    BERSIC(t,:) = mean(eerSIC{t});
end

mer = mean(BER);
merdec = mean(BERdec);
merMMSE = mean(BERMMSE);
merPIC = mean(BERPIC);
merSIC = mean(BERSIC);

semilogy(snr,mer,'rs-',snr,merdec,'bo-',snr,merMMSE,'gv-',snr,merPIC,'m<-',snr,merSIC,'md-')
grid on
xlabel('SNR')
ylabel('Average BER')
legend('MF','Decorr','MMSE','PIC','SIC')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -