MMA是改进的CMA,有RCA和CMA的优点,还能对相位误差进行修正。
N = 5e5; % 仿真符号数
M = 16; % QAM16
msg = randi([0 M-1],N,1); % 产生随机符号
tx = qammod(msg,M); % QAM调制
test_snr = 20:5:30; % 信噪比测试
% 模拟多径信道
h = [0.05,0.1+0.15*1j,0.9-0.15*1j,0.15,-0.1+0.2*1j,0.1+0.2*1j,-0.01+0.15*1j];
ch = conv(tx,h,'same'); % 过信道
mu = 3e-5; % 收敛步进
% 输出
qout = zeros(length(ch),length(test_snr));
for j = 1:length(test_snr)
rx = awgn(ch,test_snr(j),'measured'); % 添加噪声
wn = zeros(11,1); % 初始化横向滤波器系数
wn(5) = 1; % 随机初始化
for i = 1:length(rx)-10
xn = flipud(rx(i:i+10)); % 均衡输入 xn,...,x2,x1,x0
yn = sum(xn.*wn); % 均衡输出
enr = real(yn)*(real(yn)^2-8.2);
eni = imag(yn)*(imag(yn)^2-8.2);
en = enr+eni*1i; % 均衡估计误差
wn = wn - mu.*en*conj(xn);% 更新均衡系数
qout(i,j) = yn; % 输出
end
end
% 绘图
scatterplot(rx(end-1e4:end));
for i = 1:length(test_snr)
scatterplot(qout(end-1e4:end,i));
en