⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blast_mmse_ic.m

📁 关于分层空时码的matlab程序
💻 M
字号:
%for test
clc;
clear all;
Tx_n = 4;
Rx_n = 4;
%SNR_dB = 10;
SNR_dB = -5;%start point + SNR_step
SNR_step = 5;
ff_num = 0;% frame num in every run
index = 6;%for modu index:1/2/4/6 bits per symbol
frame_length = 48;
point = 0;
BER = 1;
while ( BER > 1.0e-004 )
    if SNR_dB > 30
        break;
    end
	error_temp = 0;
	point = point + 1;
	SNR_dB = SNR_dB + SNR_step;
	while ( error_temp < 1000 || ff_num > 40000)
		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
		%it means that average of signal module is 1
		module_signal = [];
		for t=1:Tx_n
			module_signal =[ module_signal abs(channel_output(t,:))];			
		end
		signal_level = mean(abs(module_signal).^2);
		signal_level_dB = 10*log10(signal_level);
	    %amplifier_for_SNR_linear = 1/signal_level;
		%channel_output = channel_output * amplifier_for_SNR_linear;
		if SNR_dB < 50
			decoder_input = awgn(channel_output,(SNR_dB + 10*log10(index)),signal_level_dB);
		else
			decoder_input = channel_output;
		end
		decoder_output_demodu = vblast_decoder_MMSE_IC(H,decoder_input, index,SNR_dB);%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 + -