完成2ask、2fsk、2psk、4psk的抗噪性能分析,画出-10db--20db的误码率曲线的matlab代码
时间: 2023-07-10 15:09:11 浏览: 250
以下是一个简单的 MATLAB 代码示例,用于绘制-10 dB和-20 dB信噪比下2ASK、2FSK、2PSK和4PSK的误码率曲线。
```matlab
SNR = -10:0.1:-20; % 信噪比范围
M = [2, 2, 2, 4]; % 调制阶数
SER = zeros(length(M), length(SNR)); % 符号误码率
BER = zeros(length(M), length(SNR)); % 位误码率
for i = 1:length(M)
for j = 1:length(SNR)
% 生成随机符号序列
symbols = randi([0, M(i)-1], [1, 10000]);
% 将符号序列调制成数字信号
switch i
case 1 % 2ASK
signal = 2 * symbols - 1;
case 2 % 2FSK
f1 = 100; f2 = 200;
t = 0:0.001:1;
phi1 = 2 * pi * f1 * t;
phi2 = 2 * pi * f2 * t;
signal = cos(phi1 .* (symbols == 0) + phi2 .* (symbols == 1));
case 3 % 2PSK
signal = exp(1j * 2 * pi * symbols / M(i));
case 4 % 4PSK
signal = exp(1j * pi/4 + 1j * pi/2 * symbols);
end
% 添加高斯噪声
noise = randn([1, length(signal)]) * sqrt(0.5 / (10^(SNR(j)/10)));
noisy_signal = signal + noise;
% 解调数字信号并计算误码率
switch i
case 1 % 2ASK
decoded_symbols = (noisy_signal > 0);
case 2 % 2FSK
f1 = 100; f2 = 200;
t = 0:0.001:1;
phi1 = 2 * pi * f1 * t;
phi2 = 2 * pi * f2 * t;
decoded_symbols = ((cos(phi2) - cos(phi1)) .* noisy_signal > cos(phi1) .* cos(phi2));
case 3 % 2PSK
decoded_symbols = mod(round(angle(noisy_signal) * M(i) / (2 * pi)), M(i));
case 4 % 4PSK
decoded_symbols = mod(round(angle(noisy_signal) / (pi/2)), M(i));
end
SER(i, j) = sum(decoded_symbols ~= symbols) / length(symbols);
BER(i, j) = SER(i, j) / log2(M(i));
end
end
% 绘制误码率曲线
figure;
semilogy(SNR, BER(1,:), 'b', SNR, BER(2,:), 'g', SNR, BER(3,:), 'r', SNR, BER(4,:), 'm');
xlabel('信噪比 (dB)');
ylabel('误码率');
legend('2ASK', '2FSK', '2PSK', '4PSK');
grid on;
```
请注意,此代码中的调制方案是粗略实现的,仅用于说明目的。实际上,还有更复杂的调制方案和解调算法可以使用,以获得更好的抗噪性能。
阅读全文