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
时间: 2024-03-09 15:46:52 浏览: 116
ga_main_gamain_tic函数_遗传算法源码_AllClear_
抱歉,我无法运行代码并生成图表。但是,我可以为您提供一个思路,帮助您实现绘制两幅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`函数来实现。
希望这可以帮助您实现您的目标!
阅读全文