用matlab绘制两幅BER图,分别为有噪声和无噪声时,bits_option三种情况的BER
时间: 2024-03-09 22:48:49 浏览: 161
假设你已经计算出了三种bits_option情况下的误码率(有噪声和无噪声),分别存储在变量ber1、ber2、ber3中。你可以使用以下代码片段来绘制两幅BER图:
```
% 有噪声情况下的BER图
snr = ... % 信噪比数组,长度和ber1、ber2、ber3相同
semilogy(snr, ber1, 'r-', snr, ber2, 'g-', snr, ber3, 'b-')
legend('bits option 1', 'bits option 2', 'bits option 3')
xlabel('SNR (dB)')
ylabel('BER')
title('BER with Noise')
% 无噪声情况下的BER图
semilogy(snr, ber1_nonoise, 'r-', snr, ber2_nonoise, 'g-', snr, ber3_nonoise, 'b-')
legend('bits option 1', 'bits option 2', 'bits option 3')
xlabel('SNR (dB)')
ylabel('BER')
title('BER without Noise')
```
其中,snr为信噪比数组,长度和ber1、ber2、ber3相同,可以自行设置。semilogy函数用于绘制对数坐标下的曲线,legend函数用于给不同的曲线添加标签,xlabel和ylabel分别用于设置x轴和y轴标签,title用于设置图标题。
相关问题
用matlab 绘制BER图,有噪声时,bits_option三种情况的BER
好的,我明白了你的问题。在Matlab中绘制误比特率(BER)图,需要以下步骤:
1. 生成随机数据位,并将其调制为数字信号
2. 为数字信号添加噪声
3. 解调数字信号,并计算误比特率
4. 重复步骤2-3,直到获得足够的误比特率数据点
5. 绘制误比特率曲线
对于三种不同的bits_option情况,可以分别生成数据位并重复上述步骤。
下面是一个简单的示例代码,用于生成单个二进制数据位的BPSK调制,并添加AWGN噪声:
```matlab
% 生成随机的单个二进制数据位
data = randi([0,1],1,1);
% BPSK调制
s = 2*data-1;
% 添加AWGN噪声
EsNo = 10; % 信噪比
EbNo = EsNo - 10*log10(1); % 能量又称比特,信噪比为Es/No,Eb/No = Es/No * Rb/Bw,其中Rb为比特率,Bw为带宽。
N0 = 1/(10^(EbNo/10)); % 噪声功率谱密度
noise = sqrt(N0/2)*(randn(1,1)+1j*randn(1,1)); % 复高斯噪声
r = s+noise;
% 解调数字信号
dec_data = real(r)>0;
% 计算误比特率
ber = sum(dec_data~=data)/length(data);
```
你可以根据需要修改代码,以生成不同的数据位和调制方式,并绘制BER曲线。
clear all; close all; clc;tic its_option =2; hoise_option=1; =4;NT=2; SNRdBs=[0:2:20];sq05=sqrt(0.5); obe_target =500; BER_target =1e-3; taw_bit_len= 2592-6; nterleaving_num = 72; deinterleaving_num = 72; _frame = 1e8; or i_SNR=1:length(SNRdBs) sig_power=NI;SNRdB=SNRdBs(i_SNR); sigma2=sig_power*10°(-SNRdB/10)*noise_option;sigmal=sqrt(sigma2/2); nobe = 0; Viterbi_init for i_frame=1:1:N_frame I switch (bits_option) case (0】, bits=zeros(1,raw_bit_len); case (11, bits=ones(1,raw_bit_len); casef2), bits=randint(1,raw_bit_len); case (2), bits=randi(1,1,raw_bit_len)-1; end encoding_bits= convolution_encoder(bits);interleaved=[]; for i=l:interleaving_mum interleaved=[interleavedencoding_bits([i:interleaving_mum:end])];for tx_time-l:648 tx_bits=interleaved(1:8); interleaved(1:8)=[]; QAM16_symbol=QAM16_mod(tx_bits, 2);x(1,1) =QAM16_symbol(1);x(2,h)=QAM16_symbol(2);if rem(tx_time-1,81)==0 H = sq05*(randn(2,2)+j*randn(2,2)); end y =H*x; noise = sqrt(sigma2/2)*(randn(2,1)+j*randn(2,1)); if noise_option==1, y = y + noise;endW=inv(H'*H+sigma2*diag (ones(1,2)))*H'; K_tilde =W*y; x_hat = QAM16_slicer(X_tilde, 2); temp_bit=[temp_bit QAM16_denapper(X_hat, 2)]; end deinterleaved=[]; for i=1:deinterleaving_rum deinterleaved=[deinterleaved temp_bit([i:deinterleaving_mum:end])];end received_bit=Viterbi_decode(deinterleaved) for EC_dummy=1:1:raw_bit_len, if nobe>=nobe_target, break; end end if (nobe>=nobe_target) break; end end BER(i_SNR)=nobe/((i_frame-1)*raw_bit_len+EC_dummy);fprintf(’t%dt\t%1.4f\n', SNRdB,BER(i_SNR)); if BER(i_SMR)<BER_target, break; end end利用上述代码构建一个新的代码,实现BER绘图,使其分别绘制两幅BER图,分别为有噪声和无噪声时,bits-option三种情况的BER
抱歉,我无法运行代码并生成图表。但是,我可以为您提供一个思路,帮助您实现绘制两幅BER图的功能。
首先,您需要在代码中添加绘图的部分。可以使用MATLAB中的plot函数来绘制BER曲线。在循环中,每次计算出一个SNR点的BER后,将其存储在一个数组中。例如:
```
SNRdBs=[0:2:20];
bits_option=[0,1,2];
BER_noise=zeros(length(SNRdBs),length(bits_option));
BER_no_noise=zeros(length(bits_option),1);
for i_SNR=1:length(SNRdBs)
SNRdB=SNRdBs(i_SNR);
% 代码中的其他部分
BER_noise(i_SNR,1)=BER1;
BER_noise(i_SNR,2)=BER2;
BER_noise(i_SNR,3)=BER3;
if BER1 < BER_target || BER2 < BER_target || BER3 < BER_target
break;
end
end
figure;
semilogy(SNRdBs, BER_noise(:,1), 'r^-', SNRdBs, BER_noise(:,2), 'bo-', SNRdBs, BER_noise(:,3), 'g*-');
xlabel('SNR (dB)');
ylabel('BER');
title('BER vs SNR (with noise)');
legend('bits-option=0', 'bits-option=1', 'bits-option=2');
for i_bits=1:length(bits_option)
bits_option_val=bits_option(i_bits);
% 代码中的其他部分
BER_no_noise(i_bits)=BER;
end
figure;
bar(bits_option, BER_no_noise);
xlabel('bits-option');
ylabel('BER');
title('BER vs bits-option (without noise)');
```
在上面的例子中,我们使用了一个名为`BER_noise`的二维数组来存储有噪声时的BER数据,第一维表示SNR点的索引,第二维表示bits-option的索引。类似地,我们使用一个名为`BER_no_noise`的一维数组来存储无噪声时的BER数据,每个元素表示一个bits-option值。
在第一个图中,我们使用了MATLAB的`semilogy`函数来绘制三条BER曲线,每条曲线对应一个bits-option值。在第二个图中,我们使用MATLAB的`bar`函数来绘制一个条形图,每个条形代表一个bits-option值。
注意,由于我们使用了不同的图形函数,因此需要为每个图形创建一个新的图形窗口,以便它们分别显示。这可以通过MATLAB的`figure`函数来实现。
希望这可以帮助您实现您的目标!
阅读全文