用M文件编写 4-PSK、16-PSK仿真
时间: 2024-01-16 21:02:37 浏览: 81
好的,以下是4-PSK和16-PSK仿真的MATLAB代码:
1. 4-PSK仿真
```matlab
clc;
close all;
clear all;
M = 4; % 星座大小
k = log2(M); % 每个符号的比特数
% 创建4-PSK星座映射表
constellation = [1+1i, -1+1i, -1-1i, 1-1i];
constellation = constellation / sqrt(2);
% 随机生成M个符号
txBits = randi([0 1], 1, 10000*k);
% 将比特序列转换为符号序列
txSym = bi2de(reshape(txBits, k, []).', 'left-msb');
txSym = constellation(txSym+1);
% 加入高斯白噪声
snr = 10; % 信噪比
rxSym = awgn(txSym, snr, 'measured');
% 解调接收信号
rxBits = de2bi(qamdemod(rxSym, M, 'UnitAveragePower', true)-1, k, 'left-msb');
rxBits = rxBits(:).';
% 计算误比特率
ber = sum(txBits ~= rxBits) / length(txBits);
fprintf('4-PSK: SNR = %d dB, BER = %e\n', snr, ber);
```
2. 16-PSK仿真
```matlab
clc;
close all;
clear all;
M = 16; % 星座大小
k = log2(M); % 每个符号的比特数
% 创建16-PSK星座映射表
constellation = exp(1i*(0:M-1)*2*pi/M);
constellation = constellation / sqrt(sum(abs(constellation).^2)/M);
% 随机生成M个符号
txBits = randi([0 1], 1, 10000*k);
% 将比特序列转换为符号序列
txSym = bi2de(reshape(txBits, k, []).', 'left-msb');
txSym = constellation(txSym+1);
% 加入高斯白噪声
snr = 10; % 信噪比
rxSym = awgn(txSym, snr, 'measured');
% 解调接收信号
rxBits = de2bi(qamdemod(rxSym, M, 'UnitAveragePower', true)-1, k, 'left-msb');
rxBits = rxBits(:).';
% 计算误比特率
ber = sum(txBits ~= rxBits) / length(txBits);
fprintf('16-PSK: SNR = %d dB, BER = %e\n', snr, ber);
```
阅读全文