📄 mcxa_32.m
字号:
%说明:MCXA(constant cross algorithm)算法,性能由ISI表示,适用于十字星座图,本文仿真信号为32QAM。
%参考文献 Shafayat Abrar.Blind Equalization of Cross-QAM Signals. IEEE signal
%processing letters. 13(12)2006
%在原文的基础上加CME
clc;
clear all;
close all;
%本程序为T/2分数间隔均衡器用来产生符号间隔输出信号
%%%%%%%%%%%%%%%%%%
%%%输入参数%%%%%%
%%%%%%%%%%%%%%%%
K=31; %均衡器抽头个数
delta=0.000005; %均衡器迭代步长因子
Num_of_realizations=1; %学习次数
SNR=30; %输入信噪比
sgma=1; %输入信号功率
N=15000; %均衡器输入数据长度
d=1; %最小欧式距离
Fd=1000; %波特率
Fs=1000; %采样速率
channel_selector=16; %信道频率抽取间隔
ISI_av=zeros(1,N-K+1); %平均码间干扰初始值
M=32; %进制数调制
k1=0.8152;
%k1=0.8056;
n=1;
b=100;
lamta=100;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%%%%%%%%%%设定信道%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
chan=[0.0410+0.0109j 0.0495+0.0123j 0.0672+0.0170j 0.0919+0.0235j 0.7920+0.1281j 0.3960+0.0871j 0.2715+0.0498j 0.2291+0.0414j 0.1287+0.0154j 0.1032+0.0119j];
for jt=1:Num_of_realizations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%产生均衡器输入信号%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a=qam_gen(M,N,d,Fd,Fs); %产生符号间隔调制信号
R=3.7714 %计算常模数R
%R=7.6405;
a1=real(a);
a2=imag(a);
figure(1)
plot(a1,a2,'*r');
hold on
title('(1)原始的星座图') %画原始的信号星座图
if(jt==1)
end;
a3=zeros(2*N,1)';
a3(1:2:2*N)=a; %调制信号的升采样
x1=filter(chan,1,a3); %产生均衡器的输入
x=awgn(x1,SNR,sgma); %加噪声
x1=real(x(1:2:end));
x2=imag(x(1:2:end));
figure(2)
plot(x1,x2,'*r');
grid on;
title('(2)均衡器输入信号的星座图'); %画均衡前的信号星座图
W(1:K)=0;
W((K+1)/2)=1; %均衡器抽头系数的初始值
Wkeep=W.'*ones(1,2*N);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%CMA算法%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=0;
for k=K+1:2:2*N-K+1
x_k=x(k:-1:k-K+1);
z_k=x_k*(W.');
z(k-K+1)=z_k;
z_y=abs(k1*real(z_k)+imag(z_k))+abs(k1*real(z_k)-imag(z_k))+abs(real(z_k)-k1*imag(z_k))+abs(real(z_k)+k1*imag(z_k))-abs(real(z_k)+imag(z_k))-abs(real(z_k)-imag(z_k));
X=k1*sign(k1*real(z_k)+imag(z_k))+k1*sign(k1*real(z_k)-imag(z_k))+sign(real(z_k)+k1*imag(z_k))+sign(real(z_k)-k1*imag(z_k))-sign(real(z_k)+imag(z_k))-sign(real(z_k)-imag(z_k));
Y=k1*sign(real(z_k)+k1*imag(z_k))-k1*sign(real(z_k)-k1*imag(z_k))+sign(k1*real(z_k)+imag(z_k))-sign(k1*real(z_k)-imag(z_k))-sign(real(z_k)+imag(z_k))+sign(real(z_k)-imag(z_k));
c=-n*pi/d*((sin(real(z_k)*pi/(2*d)))^(2*n-1)*cos(real(z_k)*pi/(2*d))+j*((sin(imag(z_k)*pi/(2*d)))^(2*n-1)*cos(imag(z_k)*pi/(2*d))));
z_d=decide_32QAM(z_k,1);
% s1=abs((z_k-z_d)/(sqrt(2)*d));
s(k)=((z_y)^2-4*R^2)*z_y*(X+j*Y)+lamta*c;
W=W-delta*s(k)*conj(x_k);
count=count+1;
Wkeep(:,count)=W.';
end
if(jt==1)
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%均衡器性能%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
for lll=1:N-K+1
jjj=conv(chan,Wkeep(:,lll));
jjje=jjj(1:2:end); %%降采样(奇数)
jjjo=jjj(2:2:end); %%%%降采样(偶数)
isie(lll)=ISIDSE(jjje);
isio(lll)=ISIDSE(jjjo);
end
ISI_av=ISI_av+isio;
end
ISI_av=ISI_av/Num_of_realizations;
z2=imag(z(2:2:end)).';
z1=real(z(2:2:end)).';
figure(3)
plot(z1(N-2000:N-K+1),z2(N-2000:N-K+1),'*');
grid on;
title('(3)均衡后的星座图');
figure(5)
plot(10*log10(ISI_av)) %画剩余ISI曲线,单位dB
xlabel('迭代次数');
ylabel('ISI(dB)');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -