matlab 4-PSK调制信号在AWGN信道下的误比特率和误符号率的仿真
时间: 2024-01-16 16:02:01 浏览: 116
下面是一个matlab实现4-PSK调制信号在AWGN信道下的误比特率和误符号率的仿真的示例代码:
```matlab
clear all;
close all;
clc;
nsymbol = 10000; % 信号符号数
T = 1; % 信号时间长度
fs = 100; % 采样率
ts = 1/fs; % 采样时间间隔
t = 0:ts:T-ts; % 采样时间序列
fc = 10; % 信号频率
c = sqrt(2/T)*exp(j*2*pi*fc*t); % 信号载波
c1 = sqrt(2/T)*cos(2*pi*fc*t); % 实部载波
c2 = -sqrt(2/T)*sin(2*pi*fc*t); % 虚部载波
M = 4; % 调制阶数
graycode = [0 1 3 2]; % 灰码映射表
EsN0 = 0:15; % 信噪比范围
snr1 = 10.^(EsN0/10); % 信噪比转换为线性值
msg = randint(1, nsymbol, M); % 生成随机信息序列
msg1 = graycode(msg+1); % 灰码映射
msgmod = pskmod(msg1, M).'; % 进行4-PSK调制
tx = real(msgmod*c); % 加载波调制
tx1 = reshape(tx.', 1, length(msgmod)*length(c)); % 将调制后的信号串并成一行
spow = norm(tx1).^2/nsymbol; % 发送信号功率
% 开始循环计算不同信噪比下的误比特率和误符号率
for indx = 1:length(EsN0)
sigma = sqrt(spow/(2*snr1(indx))); % 计算噪声标准差
rx = tx1 + sigma*randn(1, length(tx1)); % 加入高斯噪声
rx1 = reshape(rx, length(c), length(msgmod)); % 将接收信号串并成矩阵
% 解调
r1 = (c1*rx1)/length(c1);
r2 = (c2*rx1)/length(c2);
r = r1 + j*r2;
y = pskdemod(r, M);
decmsg = graycode(y+1);
% 计算误码率
[err, ber(indx)] = biterr(msg, decmsg, log2(M));
[err, ser(indx)] = symerr(msg, decmsg);
end
% 理论误码率和误符号率
ser1 = qfunc(sqrt(2*snr1)*sin(pi/M));
ber1 = ser1/log2(M);
% 画图
semilogy(EsN0, ber, '-ko', EsN0, ser, '-k*', EsN0, ser1, EsN0, ber1, '-k.');
title('4-PSK调制信号在AWGN信道下的性能');
xlabel('Es/N0');
ylabel('误比特率和误符号率');
legend('误比特率', '误符号率', '理论误符号率', '理论误比特率');
```
这段代码实现了4-PSK调制信号在AWGN信道下的误比特率和误符号率的仿真。和上面的8-PSK调制信号的代码类似,只需要修改一些调制方式和灰码映射表即可。运行代码后会得到一个关于Es/N0的误比特率和误符号率的函数图像,通过图像可以评估4-PSK调制信号在AWGN信道下的性能。
阅读全文