% QAM调制通信系统CMA均衡
clear all;
clc;
%% ******************* 初始化 ****************************
N_sc=256; %数据长度
nn=200; %信号循环次数
Eb_n1=1;
Eb_n2=30; %EbNo的长度
EbN0=Eb_n1:1:Eb_n2; % 信噪比%%
M=32; %QAM调制阶数
BitperSymbol=log2(M); %每符号的比特数
W_q=20;%功率归一化
X_BitSource=round(rand(1,N_sc*BitperSymbol)); %产生N_sc_e*BitperSymbol个数据
X_input=reshape(X_BitSource,[],BitperSymbol);
X_input1=bi2de(X_input,'left-msb') ;
%************************* MQMAM调制 ****************************
X_Data =qammod(X_input1,M); %MQAM调制(手动修改)
scatterplot(X_Data);%绘制散点图
title('发射端信道星座图');
EEE=mean(abs(X_Data).^2); %求电功率
X_Data=X_Data/(sqrt(W_q)); %功率归一化
% ************************** 经过高斯信道 *****************************
for ii=1:length(EbN0)
ii
X_BitSource2=[];
DX1_Bit_chuan2=[];
for q=2:1:nn %信号循环
RX1=X_Data .';
RX1_cutCP=awgn( RX1,EbN0(ii),'measured');%添加高斯白噪声
RX1_para1=reshape(RX1_cutCP,[],1); % 串并变换
%************************* 解调 ******************************
RX1_para1=RX1_para1*sqrt(W_q);
if ii==20 && q==10
scatterplot(RX1_para1);%绘制散点图
title('经过高斯信道');
end
DX1_Bit =qamdemod(RX1_para1.',M);
DX1_Bit1=de2bi(DX1_Bit,'left-msb' );
DX1_Bit_chuan=reshape(DX1_Bit1,1,[]); % 并串转换
X_BitSource2=[X_BitSource X_BitSource2];
DX1_Bit_chuan2=[DX1_Bit_chuan DX1_Bit_chuan2];
end
[nerr,berr4(ii)]=biterr(X_BitSource2,DX1_Bit_chuan2);
end
% figure
% semilogy(EbN0,berr_g,'r-o','LineWidth',2);hold on;
h=[0.8 0.1 0.07 0.03]; % 信道
Rx_signal1=conv(X_Data, h);
Rx_signal=Rx_signal1(1:length(X_Data));
% ************************** 经过多径时延信道 *****************************
for ii=1:length(EbN0)
ii
X_BitSource2=[];
DX1_Bit_chuan2=[];
for q=2:1:nn %信号循环
RX1=Rx_signal .';
RX1_cutCP=awgn( RX1,EbN0(ii),'measured');%添加高斯白噪声
RX1_para1=reshape(RX1_cutCP,[],1); % 串并变换
%************************* 解调 ******************************
RX1_para1=RX1_para1*sqrt(W_q);
if ii==20 && q==10
scatterplot(RX1_para1);%绘制散点图
title('经过多径信道');
end
DX1_Bit =qamdemod(RX1_para1.',M);
DX1_Bit1=de2bi(DX1_Bit,'left-msb' );
DX1_Bit_chuan=reshape(DX1_Bit1,1,[]); % 并串转换
X_BitSource2=[X_BitSource X_BitSource2];
DX1_Bit_chuan2=[DX1_Bit_chuan DX1_Bit_chuan2];
end
[nerr,berr5(ii)]=biterr(X_BitSource2,DX1_Bit_chuan2);
end
% ************************** 经过多径时延均衡 *****************************
for ii=1:length(EbN0)
ii
X_BitSource2=[];
DX1_Bit_chuan2=[];
for q=2:1:nn %信号循环
RX1=Rx_signal .';
RX1_cutCP=awgn( RX1,EbN0(ii),'measured');%添加高斯白噪声
%% CMA
d31=RX1_cutCP;
x=X_Data.' ;
epoch =10;
N=length(x);
order=5;
etac =0.001;
Wc = zeros(1,order);
Wc = [1 0 0 0 0];
V = zeros(1,order);
a1=abs(d31).^0.1;
a2=abs(d31).^0.05;
R=mean(a1./a2);
for k = 1 : 20
for n = 1:N
V(1,2:end) = V(1,1:end-1);
V(1,1) = conj(d31(n));
yc = (Wc)*V';
yy31(n)=yc;
ec = abs(yc)^2-R;
Wc = Wc-etac*ec*yc*V;
end
end
RX1_para1=reshape(yy31,[],1); % 串并变换
RX1_para1=RX1_para1*sqrt(W_q);
%************************* 解调 ******************************
if ii==20 && q==10
scatterplot(RX1_para1);%绘制散点图
title('多径信道经过CMA均衡');
end
DX1_Bit =qamdemod(RX1_para1.',M);
DX1_Bit1=de2bi(DX1_Bit,'left-msb' );
DX1_Bit_chuan=reshape(DX1_Bit1,1,[]); % 并串转换
X_BitSource2=[X_BitSource X_BitSource2];
DX1_Bit_chuan2=[DX1_Bit_chuan DX1_Bit_chuan2];
end
[nerr,berr6(ii)]=biterr(X_BitSource2,DX1_Bit_chuan2);
end
%% ******************* 绘制仿真图***************************
h = figure;
set(h,'position',[100 100 800 600]);
semilogy(EbN0,berr4,'r-o','LineWidth',2);hold on;
semilogy(EbN0,berr5,'b-s','LineWidth',2);hold on;
semilogy(EbN0,berr6,'g-.','LineWidth',2);hold on;
xlabel('Eb/N0(dB)');ylabel('Bit Error Rate');hold on;
grid on;
set(gcf,'Color',[1,1,1]);
legend('高斯','多径时延','盲均衡CMA ','Fontsize', 10);
axis([Eb_n1 Eb_n2 10^-5 10^0]);
title('32QAM调制');
- 1
- 2
前往页