📄 cma.m
字号:
%说明:CMA算法,性能由ISI表示
clc;
clear all;
close all;
K=11;%抽头个数
delta=0.000015;%迭代步长因子
delta1=0.015;%迭代步长因子
Num_of_realizations=1;%学习次数
SNR=30;%输入信噪比
sgma=1;%输入信号功率
N=15000;%数据长度
d=1;%最小欧式距离
Fd=1000;%波特率
Fs=1000;%采样速率
numoferr=0;
sum=0;
%load chan10 C
%actual_isi=C(1:2:end).';
actual_isi=[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088];%有ISI的信道响应
%actual_isi=[-0.005-0.004j 0.009+0.030j -0.024-0.104j 0.854+0.520j -0.218+0.273j 0.049-0.074j -0.016+0.020j];
%actual_isi=[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];
%actual_isi=[-0.2+0.3j -0.5+0.4j 0.7-0.6j 0.4+0.3j 0.2+0.1j -0.1+0.2j];
%actual_isi=[1 0.1294-0.483*j]
%actual_isi=[0.227 0.460 0.688 0.460 0.227]
%actual_isi=[2-0.4j 1.5+1.8j 1 1.2-1.3j 0.8+1.6j]
ISI_av=zeros(1,N-K+1);
M=16;%进制数调制
for jt=1:Num_of_realizations
%产生信源
a=qam_gen(M,N,d,Fd,Fs);
R=mean(abs(a).^4)/mean(abs(a).^2);%计算常模数R
a1=real(a);
a2=imag(a);
figure(1)
plot(a1,a2,'*r');
title('(1)原始的星座图')
if(jt==1)
end;
x1=conv(actual_isi,a); %序列通过有ISI的信道滤波器
x=awgn(x1,SNR,sgma);%加噪声
x1=real(x);
x2=imag(x);
figure(2)
plot(x,'*r');
grid on;
title('(2)均衡器输入信号的星座图');
W(1:K)=0;
W((K+1)/2)=1;%均衡器抽土系数的初始值
ceta=0;
%CMA算法
for k=K:N
x_k=x(k:-1:k-K+1);
z_k=x_k*(W.');%*exp(-j*ceta);
z(k-K+1)=z_k;
% z_d=decide_16QAM(z_k,1);
% ceta=ceta+delta1*imag(z_k*conj((z_d-z_k)));
s(k)=z_k*(abs(z_k)^2-R);
isi(k-K+1)=ISI(actual_isi,W);
W=W-delta*s(k)*conj(x_k);
end
if(jt==1)
end;
ISI_av=ISI_av+isi;%均方误差的累加。
% sum=sum+numoferr/N;
end
% sum=sum/Num_of_realizations;;
ISI_av=ISI_av/Num_of_realizations; %取平均
z1=real(z);
z2=imag(z);
figure(3)
plot(z(N-800:N-K+1),'*k');
grid on;
%title('均衡后的星座图');
figure(4)
plot(10*log10(ISI_av))%画ISI,单位dB
xlabel('迭代次数');
ylabel('ISI(dB)');
%figure(5)
%plot(D)%画ISI,单位dB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -