编写一个matlab程序,用于ccdm对16qam进行概率整形,方差固定为1
时间: 2024-03-07 21:47:55 浏览: 168
16QAM的matlab程序
好的,以下是一个 Matlab 程序,用于实现 CCDM 对 16QAM 进行概率整形,方差固定为 1:
```matlab
% 16QAM 概率整形,方差固定为 1
clc; clear all; close all;
% 设定信号点
M = 16;
x = qammod(0:M-1, M, 'gray');
% 设定初始概率密度函数 PDF
pdf = ones(1, M)/M;
% 设定目标概率密度函数 PDF
pdf_target = [0, 0.04, 0.08, 0.1, 0.15, 0.2, 0.15, 0.1, 0.08, 0.04, 0, 0, 0, 0, 0, 0];
% 设定迭代次数
iter_num = 100;
% 设定方差
sigma2 = 1;
% CCDM 概率整形
for iter = 1:iter_num
% 计算误差
error = pdf_target - pdf;
% 计算调整量
adjust = zeros(1, M);
for i = 1:M
for j = 1:M
if x(j) == x(i)
adjust(i) = adjust(i) + error(j);
else
d = abs(x(j) - x(i));
adjust(i) = adjust(i) + error(j) * exp(-d^2/(2*sigma2));
end
end
end
% 更新 PDF
pdf = pdf + adjust;
% 归一化 PDF
pdf = pdf/sum(pdf);
end
% 绘制结果
figure;
subplot(2, 1, 1);
stem(x, pdf_target, 'r.-');
title('目标概率密度函数');
xlabel('信号点'); ylabel('概率密度');
subplot(2, 1, 2);
stem(x, pdf, 'b.-');
title('整形后的概率密度函数');
xlabel('信号点'); ylabel('概率密度');
```
这个程序和之前的程序基本相同,唯一的区别是在计算调整量时,使用了方差固定为 1 的高斯分布,而不是之前的欧几里得距离平方。具体地,计算调整量的公式为:
$$\Delta p_i = \sum_{j=1}^M e_j \exp\left(-\frac{|x_j-x_i|^2}{2\sigma^2}\right)$$
其中 $e_j$ 是误差,$x_i$ 和 $x_j$ 分别是第 $i$ 和 $j$ 个信号点,$\sigma^2$ 是方差。其他的部分和之前的程序相同。
阅读全文