📄 main.asv
字号:
clc
clear all;
system_info.uncoded_frame_length = 1000;
% Generator matrix
generator_matrix = [1 0 1; 1 1 1];
[system_info.n, system_info.constraint_length] = size(generator_matrix);
system_info.coded_frame_length = system_info.uncoded_frame_length * system_info.n;
EbNodB_start = 1;
EbNodB_end = 4;
EbNodB_step = 1;
trellis = convolutional_trellis(generator_matrix, system_info);
counter = 0;
for EbNodB = EbNodB_start:EbNodB_step:EbNodB_end
counter = counter + 1;
system_info.EbNo = 10 .^ (EbNodB ./ 10);
system_info.noise_variance = 1 ./ (2 .* system_info.EbNo ./ system_info.n);
errors = 0;
loops = 0;
while loops < 100
loops = loops + 1;
data_bits = round(rand(1, system_info.uncoded_frame_length));
encoded_bits = convolutional_encoder(data_bits, trellis, system_info);
modulated_bits = qpsk_modul(encoded_bits);
noise = sqrt(system_info.noise_variance) .* randn(1,0.5*system_info.coded_frame_length);
received_signal_temp = modulated_bits + noise;
received_signal=ydqpsk(received_signal_temp);
received_signal = 2 .* received_signal ./ system_info.noise_variance;
[LLR, temp] = convolutional_map_decoder(received_signal, trellis, system_info);
decoded_bits = (sign(LLR) + 1) ./ 2;
errors = errors + xor(decoded_bits, data_bits) * ones(system_info.uncoded_frame_length,1);
disp(sprintf('Uncoded errors so far for %g dB in %g loops : %g', EbNodB, loops, errors))
end
BER(counter) = errors/(loops * system_info.uncoded_frame_length);
end
similogy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -