📄 cma.m
字号:
clear all
N=1000;
L=12;
m=4; %输入信号的长度
mu=0.00001; %设置迭代步长
%c=[-1 3 10 7 3 -1 -5 2];
%c=[0.2 0.5 1 -0.1];
%c=zeros(1,21);c(1)=1;c(21)=0.599971;
%c(1)=exp(-0.7*i);c(2)=0;c(3)=0;c(4)=0.3*exp(-1.8*i);
% c=zeros(1,68);c(1)=1;c(8)=0.26311;c(40)=0.151214;c(68)=0.391599;
%c=zeros(1,21);c(1)=1;c(21)=0.599971;
%c=[0.3132 -0.1040 0.8908 0.3134 0.1]; %信道
% c=[0.3132 -0.1040 0.8908 0.3134];%信道
c(1)=exp(-0.7*i);c(2)=0;c(3)=0;c(4)=0.3*exp(-1.8*i);
mse_av1=zeros(1,N-L);
aa=[0:m-1];% aa=[0 0 0 0]在循环前初始值的设定
bb=qammod(aa,m);
R=sum(abs(bb.^4))/sum(abs(bb.^2)); % sum是一个求和的符号
snr=25;
times=10;
for j=1:times;
j
s=randint(1,N,m);%随机产生一个一行N列的0到4之间的整数序列,作为输入的数字信号
a=qammod(s,m); %显示输入信号的星座图
x=filter(c,1,a);%filter是滤波器,表示的是信号通过信道
y= awgn(x,snr,'measured'); % 对信号加入一个加性白噪声
W1=zeros(1,L);W1(L/2)=1;%中心抽头
for k=1:N-L
y_k1=y(k+L-1:-1:k);
z1(k)=W1*y_k1.';
M(k)=abs(z1(k))-sqrt(R);
% e1(k)=z1(k)*(R-abs(z1(k))^2);
e1(k)=tanh(M(k));
W1=W1+mu*(1/(cosh(M(k)))^2)*conj(y_k1)*sign(z1(k));
% W1=W1+mu*conj(y_k1)*(e1(k));
mse1(k)=min(abs(e1(k))).^2;
end
mse_av1=mse_av1+mse1;
end
mse_av1=mse_av1/times;
plot(40*log10(mse_av1),'r')
xlabel('迭代次数','fontsize',14)
ylabel('均方误差','fontsize',14)
grid on
hold off
scatterplot(a,1,0,'k*')
title('发射信号')
xlabel('实部','fontsize',14)
ylabel('虚部','fontsize',14)
grid on
scatterplot(y,1,0,'k*')
title('均衡器输入信号')
xlabel('实部','fontsize',14)
ylabel('虚部','fontsize',14)
grid on
scatterplot(z1,1,0,'k*')
title('CMA信号')
xlabel('实部','fontsize',14)
ylabel('虚部','fontsize',14)
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -