% 清除工作区和关闭所有图形窗口
clear all;
close all;
% 设置参数
N = 10; % 信号长度
M = 4; % M-PAM调制中的M值
A = 1; % 振幅
fc = 10; % 载波频率
fs = 1000; % 采样频率
T = 1/fs; % 采样间隔
% 生成随机M-PAM数据
data = randi([0 M-1], 1, N);
%data=[0,1,2,3,4,5,6,7,8,9];
disp(data);
% 生成格雷码映射
gray_map = gray2bin(0:M-1, 'pam', M);
gray_symbols = gray_map(data+1);
% 生成M-PAM调制信号
t = 0:T:(N-1)*T; % 时间向量
pam_symbols = 2*gray_symbols - M-1; % 符号映射
pam_waveform = A * pam_symbols; % 调制波形
% 可视化结果
figure;
stem(t, pam_symbols, 'linewidth', 2);
xlabel('时间 (s)');
ylabel('幅值');
title('M-PAM 调制信号的符号映射');
% 可选:添加载波
carrier_wave = cos(2*pi*fc*t); % 生成载波
modulated_signal = pam_waveform .* carrier_wave; % 调制信号与载波相乘
% 计算平均功率
avg_power = mean(abs(modulated_signal).^2);
disp(['平均功率:', num2str(avg_power)]);
% 计算每个符号在星座图中的坐标(由于是一维的M-PAM调制,虚部均为0)
constellation = pam_symbols;
% 计算每对符号之间的欧氏距离
distances = zeros(N, N);
for i = 1:N
for j = 1:N
distances(i, j) = abs(constellation(j) - constellation(i));
end
end
% 显示欧氏距离矩阵
disp('欧氏距离矩阵:');
disp(distances);
% 星座图
figure;
scatter(real(modulated_signal), imag(modulated_signal), 'filled');
xlabel('实部');
ylabel('虚部');
title('星座图');
figure;
plot(t, modulated_signal, 'linewidth', 2);
xlabel('时间 (s)');
ylabel('幅值');
title('M-PAM 调制信号 (带载波)');