基本信息
源码名称:通信信号盲均衡算法(CMA算法、RLS-CMA算法、MRLS-CMA算法)
源码大小:0.02M
文件格式:.rar
开发语言:C/C++
更新时间:2019-04-13
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
使用常模算法实现通信信号的盲均衡,具体算法有CMA算法、RLS-CMA算法,以及改进软法MRLS-CMA算法

clc
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 实现了信号的盲均衡算法
% CMA、RLS-CMA和MRLS-CMA算法
%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%% 仿真条件 %%%%%%%%
i = sqrt(-1);
L = 2000;
SNR = 20;

h = [0.26, 0.93, 0.26];
h = h/norm(h);
Nh = length(h);

ISI_cma = 0;
ISI_rlscma = 0;
ISI_mrlscma = 0;

Nf = 17;
times = 20;

for loop = 1:times
    M = 8;
    iniphase = 0;
    sa = randint(L,1,M);
    sn = (pskmod(sa,M,iniphase))';
    rn = filter(h,1,sn);
    xn = awgn(rn,SNR,'measured');
    
    %%%%%% CMA 算法 %%%%%%
    W_cma = zeros(Nf,1);
    W_cma((Nf 1)/2) = 1;
    muCMA = 0.01;
    
    for k = 1:L-Nf
        X_cma(:,k) = fliplr(xn(k:k Nf-1));
        Y_cma(k) = W_cma'*X_cma(:,k);
        E_cma(k) = Y_cma(k)*(abs(Y_cma(k))^2-1);
        W_cma = W_cma - muCMA*conj(E_cma(k))*X_cma(:,k);
        
        tmpx = conv(W_cma',h);
        ISIx(k) = sum(abs(tmpx).^2)/max(abs(tmpx))^2-1;
        ISIlgx(k) = 10*log10(ISIx(k));
    end
    ISI_cma = ISI_cma   ISIlgx;
    
    %%%%%% RLS-CMA算法 %%%%%%%%%%
    W_rlscma = zeros(1,Nf).';
    W_rlscma((Nf 1)/2) = 1;
    lmda = 0.99;
    delta = 0.1;
    Cn = delta*eye(Nf);
    
    for k = 1:(L-Nf)
        X_rlscma(:,k) = fliplr(xn(k:k Nf-1));
        Y_rlscma(k) = W_rlscma'*X_rlscma(:,k);
        Zn = X_rlscma(:,k)*X_rlscma(:,k)'*W_rlscma*(abs(X_rlscma(:,k)'*W_rlscma)^(2-2));
        Hn = Zn'*Cn;
        Gn = Cn*Zn/(lmda Hn*Zn);
        Cn = (Cn-Gn*Hn)/lmda;
        E_rlscma(k) = W_rlscma'*Zn -1;
        W_rlscma = W_rlscma-Gn*conj(E_rlscma(k));
        
        tmpy = conv(W_rlscma',h);
        ISIy(k) = sum(abs(tmpy).^2)/max(abs(tmpy))^2-1;
        ISIlgy(k) = 10*log10(ISIy(k));
    end
    ISI_rlscma = ISI_rlscma   ISIlgy;
    
    %%%%%% MRLS-CMA算法 %%%%%%%
    lmda = 0.99;
    delta = 0.1;
    Cm = delta*eye(Nf);
    W_mrlscma = zeros(1,Nf).';
    W_mrlscma((Nf 1)/2)=1;
    
    for k = 1:L-Nf
        X_mrlscma(:,k) = fliplr(xn(k:k Nf-1));
        Y_mrlscma(k) = W_mrlscma'*X_mrlscma(:,k);
        Zm = X_mrlscma(:,k)*X_mrlscma(:,k)'*W_mrlscma*abs(X_mrlscma(:,k)'*W_mrlscma)^(2-2);
        Hm = Zm'*Cm;
        Gm = (Cm*Zm)/(lmda Hm*Zm);
        Cm = (Cm-Gm*Hm)/lmda;
        E_mrlscma(k) = W_mrlscma'*Zm-1;
        W_mrlscma = W_mrlscma-Gm*conj(E_mrlscma(k));
        
        tmpz = conv(W_mrlscma',h);
        ISIz(k) = sum(abs(tmpz).^2)/max(abs(tmpz))^2-1;
        ISIlgz(k) = 10*log10(ISIz(k));
    end
    ISI_mrlscma = ISI_mrlscma  ISIlgz; 
end

ISI_cma = ISI_cma/times;
ISI_rlscma = ISI_rlscma/times;
ISI_mrlscma = ISI_mrlscma/times;

figure
k = 1:length(ISI_cma)
plot(k,ISI_cma,k,ISI_rlscma,'r',k,ISI_mrlscma,'g');
xlabel('迭代次数');ylabel('码间干扰ISI(dB)');
figure
subplot(2,2,1)
plot(xn,'.');title('均衡前');
subplot(2,2,2)
plot(Y_cma(500:end),'.');title('CMA算法');
subplot(2,2,3)
plot(Y_rlscma(500:end),'.');title('RLS-CMA算法');
subplot(2,2,4)
plot(Y_mrlscma(500:end),'.');title('MRLS-CMA算法')