写个mqam和2fsk误码率比较的代码matlab
时间: 2023-12-10 12:39:34 浏览: 98
以下是一个比较MQAM和2FSK误码率的MATLAB代码:
```matlab
% 设置参数
M = 16; % MQAM调制阶数
L = 10000; % 信号长度
fc = 1000; % 2FSK载波频率
fs = 8000; % 采样率
EbNo = 0:2:20; % 信噪比范围
bitsPerSym = log2(M); % 每个符号的比特数
% 生成随机数据
data = randi([0,1],1,bitsPerSym*L);
% MQAM调制
modData = qammod(data,M);
% 2FSK调制
t = linspace(0, L/fs, L);
freqDev = 500; % 频率偏移量
carrier1 = sin(2*pi*fc*t);
carrier2 = sin(2*pi*(fc+freqDev)*t);
fskData = cos(2*pi*carrier1.*data + pi/2) + cos(2*pi*carrier2.*(1-data) + pi/2);
% 初始化误码率矩阵
berMQAM = zeros(1,length(EbNo));
ber2FSK = zeros(1,length(EbNo));
% 循环计算误码率
for i = 1:length(EbNo)
% 添加高斯噪声
snr = EbNo(i) + 10*log10(bitsPerSym);
noisePower = 10^(-snr/10);
noise = sqrt(noisePower/2)*(randn(1,L) + 1i*randn(1,L));
% MQAM解调
rxDataMQAM = awgn(modData, snr, 'measured');
demodDataMQAM = qamdemod(rxDataMQAM,M);
% 2FSK解调
rxData2FSK = awgn(fskData, snr, 'measured');
demodData2FSK = (cos(2*pi*(fc+freqDev)*t).*rxData2FSK > 0.5);
% 计算误码率
[~, berMQAM(i)] = biterr(data, demodDataMQAM);
[~, ber2FSK(i)] = biterr(data, demodData2FSK);
end
% 绘制误码率曲线
semilogy(EbNo, berMQAM, 'o-', 'LineWidth', 2);
hold on;
semilogy(EbNo, ber2FSK, 'o-', 'LineWidth', 2);
grid on;
xlabel('EbNo (dB)');
ylabel('Bit Error Rate');
legend('MQAM', '2FSK');
```
该代码首先生成随机数据,然后使用MQAM和2FSK进行调制。然后,在不同的信噪比下,使用awgn函数添加高斯噪声。最后,计算误码率并绘制误码率曲线。可以看到,在相同的信噪比下,MQAM的误码率比2FSK低。
阅读全文