📄 cxaoriginal.m
字号:
clc;
clear all;
close all;
%本程序为T/2分数间隔均衡器用来产生符号间隔输出信号
K=31; %均衡器抽头个数
Mu=0.0000004;
Num_of_realizations=1; %学习次数
SNR=30; %输入信噪比
sgma=1; %输入信号功率
N=10000; %均衡器输入数据长度
d=1; %最小欧式距离
Fd=1000; %波特率
Fs=1000; %采样速率
channel_selector=16; %信道频率抽取间隔
ISI_av=zeros(1,N-K+1); %平均码间干扰初始值
MD_av=zeros(1,N-K+1);
M=32; %进制数调制
k1=0.8152;
%k1=0.8944;
%k1=0.8056;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%%%%%%%%%%设定信道%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load chan5 C
chan=C;
% % load chan1 C
% if channel_selector==0
% chan=C;
% clear C rt
% else
% freq_full=fft(C,256);
% freq_dec=freq_full(1:channel_selector:256);%信道频率抽取
% chan=(ifft(freq_dec)).';
% clear C rt freq_full freq_dec
% end
for jt=1:Num_of_realizations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%产生均衡器输入信号%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a=qam_gen(M,N,d,Fd,Fs); %产生符号间隔调制信号
R=3.7714 %计算常模数R
% R=4.2073;
%R=7.6405;
a1=real(a);
a2=imag(a);
figure(1)
plot(a1,a2,'*k');
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);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%CXA算法%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=0;
for k=K+1:2:2*N
xk=x(k:-1:k-K+1);
zk=xk*(W.');
z(k-K+1)=zk;
zkr=real(zk);
zki=imag(zk);
zy=abs(k1*zkr+zki)+abs(k1*zkr-zki)+abs(zkr-k1*zki)+abs(zkr+k1*zki)-abs(zkr+zki)-abs(zkr-zki);
X=k1*sign(k1*zkr+zki)+k1*sign(k1*zkr-zki)+sign(zkr+k1*zki)+sign(zkr-k1*zki)-sign(zkr+zki)-sign(zkr-zki);
Y=k1*sign(zkr+k1*zki)-k1*sign(zkr-k1*zki)+sign(k1*zkr+zki)-sign(k1*zkr-zki)-sign(zkr+zki)+sign(zkr-zki);
s(k)=((zy)^2-4*R^2)*zy*(X+j*Y);
W=W-Mu*s(k)*conj(xk);
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
for kkk=1:N-K+1
hhh=conv(chan,Wkeep(:,kkk));
hhhe=hhh(1:2:end); %%降采样(奇数)
hhho=hhh(2:2:end); %%%%降采样(偶数)
mde(kkk)=MDDSE(hhhe);
mdo(kkk)=MDDSE(hhho);
end
ISI_av=ISI_av+isio;
MD_av=MD_av+mdo;
end
ISI_av=ISI_av/Num_of_realizations;
MD_av=MD_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),'*k');
xlabel('CXA');
figure(4)
plot(10*log10(ISI_av),'k');
% hold on;
% load mcxaisi5;
% plot(10*log10(isi5mcxa),'k');
% hold on;
% load ddmcxaisi5;
% plot(10*log10(isi5ddmcxa),'k');
% figure(5)
% plot(MD_av,'k');
% hold on;
% load mcxamd5;
% plot(md5mcxa,'k');
% hold on;
% load ddmcxamd5;
% plot(md5ddmcxa,'k');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -