用matlab画出不同进制下的MFSK的非相干解调时的误码率曲线和相干解调下的误码率曲线
时间: 2023-08-24 10:03:55 浏览: 194
以下是使用MATLAB画出不同进制下的MFSK的非相干解调和相干解调下的误码率曲线的示例代码:
```matlab
clear all;
close all;
clc;
M = [2,4,8,16]; % 不同进制数
EbN0 = -10:1:20; % 信噪比范围
N = 10000; % 仿真次数
% 计算非相干解调下的误码率
for i = 1:length(M)
for j = 1:length(EbN0)
error = 0;
for k = 1:N
tx_data = randi([0,M(i)-1],1,100); % 随机生成100个符号
tx_signal = pskmod(tx_data,M(i)); % M进制PSK调制
noise = sqrt(0.5/(10^(EbN0(j)/10))) * (randn(1,length(tx_signal)) + 1i*randn(1,length(tx_signal))); % AWGN信道噪声
rx_signal = tx_signal + noise; % 加入噪声的接收信号
rx_data = pskdemod(rx_signal,M(i),'nondiff'); % 非相干解调得到接收符号
error = error + sum(rx_data ~= tx_data); % 统计错误符号数
end
ber_nondiff(i,j) = error / (N*length(tx_data)); % 计算误码率
end
end
% 计算相干解调下的误码率
for i = 1:length(M)
for j = 1:length(EbN0)
error = 0;
for k = 1:N
tx_data = randi([0,M(i)-1],1,100); % 随机生成100个符号
tx_signal = pskmod(tx_data,M(i)); % M进制PSK调制
noise = sqrt(0.5/(10^(EbN0(j)/10))) * (randn(1,length(tx_signal)) + 1i*randn(1,length(tx_signal))); % AWGN信道噪声
rx_signal = tx_signal + noise; % 加入噪声的接收信号
rx_data = pskdemod(rx_signal,M(i)); % 相干解调得到接收符号
error = error + sum(rx_data ~= tx_data); % 统计错误符号数
end
ber_coherent(i,j) = error / (N*length(tx_data)); % 计算误码率
end
end
% 画图
figure;
semilogy(EbN0,ber_nondiff(1,:),EbN0,ber_nondiff(2,:),EbN0,ber_nondiff(3,:),EbN0,ber_nondiff(4,:));
hold on;
semilogy(EbN0,ber_coherent(1,:),'--',EbN0,ber_coherent(2,:),'--',EbN0,ber_coherent(3,:),'--',EbN0,ber_coherent(4,:),'--');
grid on;
xlabel('Eb/N0 (dB)');
ylabel('BER');
title('MFSK误码率曲线');
legend('2FSK非相干解调','4FSK非相干解调','8FSK非相干解调','16FSK非相干解调',...
'2FSK相干解调','4FSK相干解调','8FSK相干解调','16FSK相干解调');
```
执行以上代码可得到不同进制下的MFSK的非相干解调和相干解调下的误码率曲线,其中M=2,4,8,16分别对应2FSK,4FSK,8FSK和16FSK。
阅读全文