📄 blast_qr.m
字号:
%for test
clc;
clear all;
Tx_n=4;
Rx_n=4;
%SNR_dB = 10;
SNR_dB = -5;
%SNR_dB=[0:2:20]
SNR_step = 5;
ff_num = 0;% frame num in every run
index = 1;%for modu index:1/2/4/6 bits per symbol
frame_length = 48;
point = 0;
BER = 1;
while ( BER > 1.0e-003 )
error_temp = 0;
point = point + 1;
SNR_dB = SNR_dB + SNR_step;
while ( error_temp < 1000)
ff_num = ff_num + 1;
source = rand(1,Tx_n*frame_length*index)>.5;
%encoder_input = modulation(source, index);
%encoder_input = 2*source - 1;
[encoder_output,Padding_Bit_Length] = vblast_encoder(Tx_n, source);
for t=1:Tx_n
encoder_output_modu(t,:) = modulation(encoder_output(t,:), index);
end
[channel_output,H] = flat_channel(Rx_n, encoder_output_modu);
%keep the signal level at 0 dB
module_signal = [];
for t=1:Tx_n
module_signal =[ module_signal abs(channel_output(t,:))];
end
signal_level = mean(module_signal);
%signal_level_dB = 10 * log10(signal_level);
%amplifier_for_SNR_dB = 0 - signal_level_dB;
%amplifier_for_SNR_linear = power(10,amplifier_for_SNR_dB/20);
amplifier_for_SNR_linear = 1/signal_level;
channel_output = channel_output * amplifier_for_SNR_linear;
decoder_input = awgn(channel_output,SNR_dB);
decoder_output_demodu = vblast_decoder_QR(H,decoder_input, index);%demodulate already
sink = zeros(1,Tx_n*frame_length*index);
%demultiplex
for i = 1:Tx_n
sink(i:Tx_n:end)=decoder_output_demodu(i,:);
end
error_temp = sum(sink ~= source)+error_temp;
end
BER(point) = error_temp/(Tx_n*frame_length*index*ff_num);
ff_num = 0;
end
S = 0:SNR_step:(point-1)*SNR_step;
semilogy(S,BER,'r-*');
grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -