matlab编程4-PSK载波调制信号在AWGN信道下的误比特率,误符号率,理论误符号率,理论误比特率 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); %正交载波
时间: 2023-07-23 21:09:39 浏览: 122
下面是一个基于4-PSK调制的Matlab代码,可以计算在AWGN信道下的误比特率、误符号率、理论误符号率和理论误比特率:
```matlab
clear all;
clc;
M = 4; % 4-PSK调制
k = log2(M); % 每个符号的比特数
fs = 100; % 采样频率
T = 1/fs; % 采样间隔
fc = 10; % 载波频率
EbNo = 0:1:20; % 信噪比范围
EsNo = EbNo + 10*log10(k); % 符号噪声比
n = 100000; % 发送符号总数
data = randi([0 1],n,k);% 随机生成数据
dataSym = bi2de(data); % 将比特转换为符号
modData = pskmod(dataSym,M); % 进行4-PSK调制
c1 = sqrt(2/T)*cos(2*pi*fc*(0:n-1)*T)'; % 同相载波
c2 = -sqrt(2/T)*sin(2*pi*fc*(0:n-1)*T)'; % 正交载波
c = c1 + 1j*c2; % 载波信号
s = modData.*c; % 调制信号
% 4-PSK解调
demodData = zeros(n, k);
demodDataSym = zeros(n, 1);
for i = 1:n
r = awgn(s(i), EsNo, 'measured'); % 加入高斯白噪声
r1 = real(r);
r2 = imag(r);
% 判决器决定接收到的符号
if r1 > 0 && r2 > 0
demodDataSym(i) = 0;
demodData(i,:) = [0 0];
elseif r1 < 0 && r2 > 0
demodDataSym(i) = 1;
demodData(i,:) = [0 1];
elseif r1 < 0 && r2 < 0
demodDataSym(i) = 2;
demodData(i,:) = [1 1];
else
demodDataSym(i) = 3;
demodData(i,:) = [1 0];
end
end
[numErrors, ber] = biterr(data, demodData); % 计算误比特率
[numErrors, ser] = symerr(dataSym, demodDataSym); % 计算误符号率
% 理论误比特率和误符号率
theoSer = 2*qfunc(sqrt(2*EsNo)*sin(pi/M)); % 理论误符号率
theoBer = theoSer/k; % 理论误比特率
% 绘图
figure;
semilogy(EbNo, ber, 'b-o', 'linewidth', 2);
hold on;
semilogy(EsNo, theoBer, 'r--', 'linewidth', 2);
grid on;
xlabel('Eb/No (dB)');
ylabel('BER');
legend('实验误比特率', '理论误比特率');
figure;
semilogy(EbNo, ser, 'b-o', 'linewidth', 2);
hold on;
semilogy(EsNo, theoSer, 'r--', 'linewidth', 2);
grid on;
xlabel('Eb/No (dB)');
ylabel('SER');
legend('实验误符号率', '理论误符号率');
```
在上述代码中,首先生成随机的比特数据,将比特转换为符号,进行4-PSK调制,加入高斯白噪声后进行4-PSK解调,最后计算误比特率和误符号率。同时,还计算了理论误符号率和理论误比特率,并将实验结果和理论值进行比较。绘制了误比特率和误符号率随信噪比变化的曲线。
阅读全文