%信号解调程序
clear all;
close all;
format long e;
%初始化
NIFFT=256; %子载波数
Fs=128; %有效子载波数
CP=32; %循环前缀载波个数
Ns=3; %每偏振态训练符号数
Rate=10e9; %发送符号速率
frame=200; %OFDM符号数
Num=65536; %Optisystem中传输信号的大小
M=10;
OSNR=22;
%%%%接收到的数据
[r_t r_1_X ]=textread('E:\testopti\s_out_I_X.txt','%f %f','headerlines',1);
[r_t r_2_X ]=textread('E:\testopti\s_out_Q_X.txt','%f %f','headerlines',1);
[r_t r_1_Y ]=textread('E:\testopti\s_out_I_Y.txt','%f %f','headerlines',1);
[r_t r_2_Y ]=textread('E:\testopti\s_out_Q_Y.txt','%f %f','headerlines',1);
Recv_X=r_1_X+j*r_2_X;
Recv_Y=r_1_Y+j*r_2_Y;
%%%取出有效的信号
Recv_X_use=Recv_X(1:(CP+NIFFT)*(frame+Ns));
Recv_Y_use=Recv_Y(1:(CP+NIFFT)*(frame+Ns));
%%%串并转换
Recv_X_change=reshape(Recv_X_use,CP+NIFFT,frame+Ns);
Recv_Y_change=reshape(Recv_Y_use,CP+NIFFT,frame+Ns);
%%去除循环前缀
Recv_X_cp_move=Recv_X_change(CP+1:CP+NIFFT,:);
Recv_Y_cp_move=Recv_Y_change(CP+1:CP+NIFFT,:);
%%进行FFT变换
Recv_X_FFT=fft(Recv_X_cp_move,NIFFT)*sqrt(NIFFT);
Recv_Y_FFT=fft(Recv_Y_cp_move,NIFFT)*sqrt(NIFFT);
%%均衡前星座图
% Recv_X_fft(1:64,:)=Recv_X_FFT(17:80,:);
% Recv_X_fft(65:128,:)=Recv_X_FFT(177:240,:);
% scatterplot(Recv_X_fft(:));
% title('均衡前X偏振态星座图');
% Recv_Y_fft(1:64,:)=Recv_Y_FFT(17:80,:);
% Recv_Y_fft(65:128,:)=Recv_Y_FFT(177:240,:);
% scatterplot(Recv_Y_fft(:));
% title('均衡前Y偏振态星座图');
%%训练序列
%%加载发送训练序列
load Train1;
load Train2;
%接收训练序列
Train_Recev_X=Recv_X_FFT(:,1:Ns);
Train_Recev_Y=Recv_Y_FFT(:,1:Ns);
% %%信道估计
for k=1:NIFFT
Hxx(k,1)=(Train_Recev_X(k,1)+Train_Recev_X(k,2))/(2*Train1(k));
Hyx(k,1)=(Train_Recev_X(k,1)-Train_Recev_X(k,2))/(2*Train1(k));
Hxy(k,1)=(Train_Recev_Y(k,1)+Train_Recev_Y(k,2))/(2*Train1(k));
Hyy(k,1)=(Train_Recev_Y(k,1)-Train_Recev_Y(k,2))/(2*Train1(k));
end
% %%信道已知
% load Hxx;
% load Hyx;
% load Hxy;
% load Hyy;
%
%%不平衡因子估计
ux=zeros(NIFFT,1);
uy=zeros(NIFFT,1);
for k=1:NIFFT
u=inv([Hxx(k) Hyx(k);Hxy(k) Hyy(k)])*[Train_Recev_X(k,3);Train_Recev_Y(k,3)]/Train2(k);
ux(k,1)=u(1);
uy(k,1)=u(2);
end
u_X=sum(ux)/NIFFT;
u_Y=sum(uy)/NIFFT;
Gx1=(1+u_X)/2;
Gx2=(1-u_X)/2;
Gy1=(1+u_Y)/2;
Gy2=(1-u_Y)/2;
%%%%%均衡
jun_signal_X=Recv_X_FFT(:,Ns:end);
jun_signal_Y=Recv_Y_FFT(:,Ns:end);
for k=1:NIFFT
H=[Hxx(k) Hyx(k);
Hxy(k) Hyy(k)];
Bit_Recv=[jun_signal_X(k,:);jun_signal_Y(k,:)];
W=inv(H*H'+OSNR^2*eye(2));
d=H'*W*Bit_Recv;
dx(k,:)=d(1,:);
dy(k,:)=d(2,:);
end
%%构造信道均衡后的信号数据的镜像共轭
for i=1:NIFFT
if i==1
dx_Mirroring(i,:)=conj(dx(i,:));
dy_Mirroring(i,:)=conj(dy(i,:));
elseif i==NIFFT/2+1
dx_Mirroring(i,:)=conj(dx(i,:));
dy_Mirroring(i,:)=conj(dy(i,:));
else
dx_Mirroring(i,:)=conj(dx(NIFFT-i+2,:));
dy_Mirroring(i,:)=conj(dy(NIFFT-i+2,:));
end
end
dx_M=reshape(dx_Mirroring,NIFFT,frame+1);
dy_M=reshape(dy_Mirroring,NIFFT,frame+1);
%%不平衡因补偿
G_X=abs(Gx1)^2-abs(Gx2)^2;
G_Y=abs(Gy1)^2-abs(Gy2)^2;
jun_X=conj(Gx1)/G_X*dx-Gx2/G_X*dx_M;
jun_Y=conj(Gy1)/G_Y*dy-Gy2/G_Y*dy_M;
%%%%相位噪声补偿
thtax(:,1)=jun_X(:,1)./Train2;
thtay(:,1)=jun_Y(:,1)./Train2;
for i=2:frame+1
Signal_junp_X(:,i-1)=jun_X(:,i)./thtax(:,i-1);
Signal_junp_Y(:,i-1)=jun_Y(:,i)./thtay(:,i-1);
%%%对迫零后的信号进行解调判决
%%QPSK解调
%%X偏振态
p_temp1_x(:,i-1)=real(Signal_junp_X(:,i-1));
for m=1:NIFFT
if p_temp1_x(m,i-1)>=0
p_temp1_x(m,i-1)=1;
else
p_temp1_x(m,i-1)=-1;
end
end
p_temp2_x(:,i-1)=imag(Signal_junp_X(:,i-1));
for m=1:NIFFT
if p_temp2_x(m,i-1)>=0
p_temp2_x(m,i-1)=1;
else
p_temp2_x(m,i-1)=-1;
end
end
%判决后的信号
p_temp_x(:,i-1)=p_temp1_x(:,i-1)+j*p_temp2_x(:,i-1);
%%Y偏振态
p_temp1_y(:,i-1)=real(Signal_junp_Y(:,i-1));
for m=1:NIFFT
if p_temp1_y(m,i-1)>=0
p_temp1_y(m,i-1)=1;
else
p_temp1_y(m,i-1)=-1;
end
end
p_temp2_y(:,i-1)=imag(Signal_junp_Y(:,i-1));
for m=1:NIFFT
if p_temp2_y(m,i-1)>=0
p_temp2_y(m,i-1)=1;
else
p_temp2_y(m,i-1)=-1;
end
end
%判决后的信号
p_temp_y(:,i-1)=p_temp1_y(:,i-1)+j*p_temp2_y(:,i-1);
thtax_res(:,i-1)=Signal_junp_X(:,i-1).*conj(p_temp_x(:,i-1));
thtay_res(:,i-1)=Signal_junp_Y(:,i-1).*conj(p_temp_y(:,i-1));
Signal_jun_X(:,i-1)=Signal_junp_X(:,i-1)./thtax_res(:,i-1);
Signal_jun_Y(:,i-1)=Signal_junp_Y(:,i-1)./thtay_res(:,i-1);
%%第二次判决
%%QPSK解调
%%X偏振态
p1_temp1_x(:,i-1)=real(Signal_jun_X(:,i-1));
for m=1:NIFFT
if p1_temp1_x(m,i-1)>=0
p1_temp1_x(m,i-1)=1;
else
p1_temp1_x(m,i-1)=-1;
end
end
p1_temp2_x(:,i-1)=imag(Signal_jun_X(:,i-1));
for m=1:NIFFT
if p1_temp2_x(m,i-1)>=0
p1_temp2_x(m,i-1)=1;
else
p1_temp2_x(m,i-1)=-1;
end
end
%判决后的信号
p1_temp_x(:,i-1)=p1_temp1_x(:,i-1)+j*p1_temp2_x(:,i-1);
%%Y偏振态
p1_temp1_y(:,i-1)=real(Signal_jun_Y(:,i-1));
for m=1:NIFFT
if p1_temp1_y(m,i-1)>=0
p1_temp1_y(m,i-1)=1;
else
p1_temp1_y(m,i-1)=-1;
end
end
p1_temp2_y(:,i-1)=imag(Signal_jun_Y(:,i-1));
for m=1:NIFFT
if p1_temp2_y(m,i-1)>=0
p1_temp2_y(m,i-1)=1;
else
p1_temp2_y(m,i-1)=-1;
end
end
%判决后的信号
p1_temp_y(:,i-1)=p1_temp1_y(:,i-1)+j*p1_temp2_y(:,i-1);
thtax(:,i)=jun_X(:,i).*conj(p1_temp_x(:,i-1));
thtay(:,i)=jun_Y(:,i).*conj(p1_temp_y(:,i-1));
end
%%%%均衡后的星座图
Signal_X(1:64,:)=Signal_jun_X(17:80,:);
Signal_X(65:128,:)=Signal_jun_X(177:240,:);
% scatterplot(Signal_X(:));
% title('均衡后X偏振星座图');
Signal_Y(1:64,:)=Signal_jun_Y(17:80,:);
Signal_Y(65:128,:)=Signal_jun_Y(177:240,:);
% scatterplot(Signal_Y(:));
% title('均衡后Y偏振星座图');
Bit_Recev_X=Signal_X;
Bit_Recev_Y=Signal_Y;
%%QPSK解调
%%X偏振态
D_QPSK_X=Bit_Recev_X(:);
dout_tempx(:,1)=real(D_QPSK_X);
dout_tempx(:,2)=imag(D_QPSK_X);
data_X=reshape(dout_tempx,1,length(D_QPSK_X)*2);
%%Y偏振态
D_QPSK_Y=Bit_Recev_Y(:);
dout_tempy(:,1)=real(D_QPSK_Y);
dout_tempy(:,2)=imag(D_QPSK_Y);
data_Y=reshape(dout_tempy,1,length(D_QPSK_Y)*2);
%%判决
for i=1:length(data_X)
if data_X(i)>=0
data_X(i)=1;
elseif data_X(i)<0
data_X(i)=0;
end
end
%%判决
for i=1:length(data_Y)
if data_Y(i)>=0
data_Y(i)=1;
elseif data_Y(i)<0
data_Y(i)=0;
end
end
%%误码率计算
[tr_X]=textread('E:\testopti\Bit_tr_data_X.txt','%d');
[erro_num_X,BER_X]=symerr(data_X,tr_X.');
fprintf('The error number is %d\n',erro_num_X);
fprintf('The Ber is %d\n',BER_X);
% [tr_Y]=textread('E:\testopti\Bit_tr_data_Y.txt','%d');
% [erro_num_Y,BER_Y]=symerr(data_Y,tr_Y.');
% fprintf('The error number is %d\n',erro_num_Y);
% fprintf('The Ber is %d\n',BER_Y);
%
DA_phase_noise_estimation.rar_OFDM/optisystem_optical_基于数据反馈(DA)
版权申诉
5星 · 超过95%的资源 191 浏览量
2022-07-14
18:05:34
上传
评论 1
收藏 3KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+