用MATLAB来绘制几条BER曲线图
时间: 2023-06-18 13:04:01 浏览: 186
好的,下面是一个简单的示例代码,用于在MATLAB中绘制几条BER曲线图:
```matlab
% 定义不同的信噪比(SNR)值
snr = [0:10];
% 生成对应的误码率(BER)值
ber1 = qfunc(sqrt(2*10.^(snr/10)));
ber2 = qfunc(sqrt(4*10.^(snr/10)));
ber3 = qfunc(sqrt(8*10.^(snr/10)));
% 绘制BER曲线图
semilogy(snr, ber1, 'b-*', snr, ber2, 'r-o', snr, ber3, 'g-s');
grid on;
xlabel('SNR (dB)');
ylabel('BER');
legend('BER1', 'BER2', 'BER3');
```
这个示例代码定义了3个不同的信噪比值(0到10),并使用qfunc函数生成对应的误码率值。然后,使用semilogy函数绘制了3条BER曲线图,并添加了网格、坐标轴标签和图例。您可以根据需要修改代码中的参数和函数来生成您想要的BER曲线图。
相关问题
写一个绘制三条BER曲线MATLAB代码
以下是绘制三条BER曲线的MATLAB代码:
```matlab
% 设置SNR范围,步长和符号数
SNR_dB = 0:2:10;
snr = 10.^(SNR_dB/10);
syms_num = 100000;
% 生成QPSK、16QAM、64QAM信号
qpsk_data = randi([0 1],1,syms_num/2);
qpsk_mod = pskmod(qpsk_data,2);
qpsk_noise_var = 1./(snr*2);
qam16_data = randi([0 3],1,syms_num/4);
qam16_mod = qammod(qam16_data,16);
qam16_noise_var = 1./(snr*4);
qam64_data = randi([0 7],1,syms_num/6);
qam64_mod = qammod(qam64_data,64);
qam64_noise_var = 1./(snr*6);
% 对每种调制方式进行仿真并绘图
ber_qpsk = zeros(1,length(snr));
ber_qam16 = zeros(1,length(snr));
ber_qam64 = zeros(1,length(snr));
for i=1:length(snr)
% 添加AWGN噪声
qpsk_noise = sqrt(qpsk_noise_var(i)/2)*(randn(1,syms_num/2)+1j*randn(1,syms_num/2));
qpsk_rx = qpsk_mod+qpsk_noise;
qam16_noise = sqrt(qam16_noise_var(i)/2)*(randn(1,syms_num/4)+1j*randn(1,syms_num/4));
qam16_rx = qam16_mod+qam16_noise;
qam64_noise = sqrt(qam64_noise_var(i)/2)*(randn(1,syms_num/6)+1j*randn(1,syms_num/6));
qam64_rx = qam64_mod+qam64_noise;
% 进行信号解调并计算误码率
qpsk_demod = pskdemod(qpsk_rx,2);
qpsk_err_num = sum(qpsk_data~=qpsk_demod);
ber_qpsk(i) = qpsk_err_num/(syms_num/2);
qam16_demod = qamdemod(qam16_rx,16);
qam16_err_num = sum(qam16_data~=qam16_demod);
ber_qam16(i) = qam16_err_num/(syms_num/4);
qam64_demod = qamdemod(qam64_rx,64);
qam64_err_num = sum(qam64_data~=qam64_demod);
ber_qam64(i) = qam64_err_num/(syms_num/6);
end
% 绘制BER曲线
semilogy(SNR_dB,ber_qpsk,'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b');
hold on;
semilogy(SNR_dB,ber_qam16,'r*-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','r');
semilogy(SNR_dB,ber_qam64,'kd-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','k');
grid on;
xlabel('SNR(dB)');
ylabel('BER');
legend('QPSK','16QAM','64QAM');
```
这段代码会生成QPSK、16QAM和64QAM信号,并对每种信号进行仿真,然后绘制三条BER曲线。您可以根据需要修改SNR范围、步长和符号数来调整仿真精度。
用matlab绘制两幅BER图,分别为有噪声和无噪声时,bits_option三种情况的BER图
这里提供一个绘制AWGN信道下的BPSK调制的BER曲线的示例代码,其中bits_option有三种取值:1000、10000、100000。你可以根据这个代码编写自己的程序来绘制有噪声和无噪声时的BER图。
```matlab
SNR_dB = 0:1:10; % 信噪比范围
bits_option = [1000,10000,100000]; % 三种不同的数据位数
for j = 1:length(bits_option)
N = bits_option(j); % 当前数据位数
err = zeros(1,length(SNR_dB)); % 初始化误码率数组
for i = 1:length(SNR_dB)
SNR = 10^(SNR_dB(i)/10); % 将信噪比从dB转换为线性值
noise_std = sqrt(1/SNR); % 计算噪声标准差
tx_bits = randi([0,1],1,N); % 生成随机的发送比特
tx_symbols = 2*tx_bits-1; % BPSK调制
rx_symbols = tx_symbols + noise_std*randn(1,N); % 加上高斯白噪声
rx_bits = (rx_symbols > 0); % 二元判决
err(i) = sum(rx_bits ~= tx_bits)/N; % 计算误码率
end
semilogy(SNR_dB, err, 'LineWidth', 2, 'DisplayName', ['Bits = ', num2str(N)]); % 绘制误码率曲线
hold on;
end
xlabel('SNR (dB)');
ylabel('Bit Error Rate');
title('BPSK Modulation in AWGN Channel');
legend('show');
grid on;
```
这段代码会绘制出三条BER曲线,分别对应bits_option为1000、10000、100000时的情况。你可以根据自己的需要调整SNR范围和步长,以及其他参数。
阅读全文
相关推荐
















