QAM-16的盲均衡算法,采用CMA算法。
CMA算法只是盲均衡算法的初级版本,一般采用CMA+DD LMS的组合方式。步进,滤波器长度等需要根据实际情况进行调节。
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); % 均衡输出
en = abs(yn)^2 - 13.2; % 均衡估计误差
wn = wn - mu.*en*yn*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));
end