📄 stbc1126a.m
字号:
clear all;
close all;
Nt=2;
fs=2e6;
Nfft=256;
fdelta=fs/Nfft
Pow=[0 -4 -8]; %heavy multipath
Delay=[0 1.5 4]*1e-6;
hh=10.^(Pow/20);
norm_h=hh./norm(hh);
tic;
for trial=1:100,
%add to generate the channel SUI-4 model
channel_h_new=zeros(2,64);
H=zeros(1,128);
%h2=zeros(1,128);
for ant=1:Nt
h=norm_h.*exp(sqrt(-1)*2*pi*rand(1,length(Pow)));
for k=1:128,
f=(k-1)*fdelta;
H(ant,k)=h*exp(sqrt(-1)*2*pi*Delay'*f);
end;
channel_h_new(ant,:)=H(ant,1:2:128);
end
%add to generate the channel SUI-4 model
channel_h=zeros(2,128);
channel_h=kron(channel_h_new,ones(1,2));
snr_dB=30;
snr=power(10,snr_dB/10);
subchannel=16;
ws=hadamard(8)/sqrt(8);
Nt=2;
for i=1:subchannel
sc_tone_index{i}=i:subchannel:128;
end;
x=randint(1,128*6,[0,3]);
mod_sig=qammod(x,4)./sqrt(2);
reshape_sig=reshape(mod_sig,8,[]);
for i=1:length(mod_sig)/48,
trans_sub{i}=reshape_sig(:,(i-1)*6+1:i*6);
end
X1=zeros(8,6);
X2=zeros(8,6);
trans_signal_ant1=zeros(128,6);
trans_signal_ant2=zeros(128,6);
for i=1:(subchannel/2)
X1=ws*trans_sub{(i-1)*2+1}*sqrt(1/2);
X2=ws*trans_sub{i*2}*sqrt(1/2);
trans_signal_ant1((i-1)*16+1:i*16,:)=[X1;-conj(X2)];
trans_signal_ant2((i-1)*16+1:i*16,:)=[X2;conj(X1)];
end
%add the channel SUI-4 model for transmit antenna 20071127.
kron_h1=zeros(128,8);
kron_h2=zeros(128,8);
kron_h1=kron(ones(1,8),channel_h(1,:).');
kron_h2=kron(ones(1,8),channel_h(2,:).');
trans_signal_ant1=trans_signal_ant1;%.*kron_h1;
trans_signal_ant2=trans_signal_ant2;%.*kron_h2;
%add the channel SUI-4 model for transmit antenna 20071127.
%add the detection of OFDM 20071127.
trans_signal_insert_ant1=zeros(128,8);
trans_signal_insert_ant2=zeros(128,8);
for i=1:subchannel
trans_signal_insert_ant1(sc_tone_index{i},[1,3,4,5,6,8])=trans_signal_ant1((i-1)*8+1:i*8,:);
trans_signal_insert_ant2(sc_tone_index{i},[1,3,4,5,6,8])=trans_signal_ant2((i-1)*8+1:i*8,:);
end
transmit_signal=zeros(128,8);
transmit_signal=trans_signal_insert_ant2.*kron_h1+trans_signal_insert_ant2.*kron_h2;
%transmit_signal=awgn(transmit_signal,snr_dB);
Receive_sub=cell(1,16);
for i=1:subchannel
Receive_sub{i}=transmit_signal(sc_tone_index{i},[1,3,4,5,6,8]);
end
%add the detection of OFDM 20071127.
h1=zeros(128,6);
h2=zeros(128,6);
for i=1:subchannel
hh1{i}=kron_h1(sc_tone_index{i},[1,3,4,5,6,8]);
hh2{i}=kron_h2(sc_tone_index{i},[1,3,4,5,6,8]);
end;
for i=1:subchannel/2
R1=Receive_sub{(i-1)*2+1};
R2=Receive_sub{i*2};
decode_temp1=zeros(8,6);decode_temp2=zeros(8,6);
h1_1=hh1{(i-1)*2+1};
h1_2=hh1{i*2};
h2_1=hh2{(i-1)*2+1};
h2_2=hh2{(i*2)};
for k=1:6
beta_X1=diag(conj(h1_1(:,k)))*R1(:,k)+diag(h2_1(:,k))*conj(R2(:,k));
beta_X2=diag(conj(h2_1(:,k)))*R1(:,k)-diag(h1_1(:,k))*(conj(R2(:,k)));
com_h=(diag(h1_1(:,k))'*diag(h1_1(:,k))+diag(h2_1(:,k))'*diag(h2_1(:,k)));
A=ws*com_h;
inv_ZF=inv(A'*A+eye(8)/snr)*A';
decode_temp1(:,k)=inv_ZF*beta_X1;
decode_temp2(:,k)=inv_ZF*beta_X2;
end;
decode_data{(i-1)*2+1}=decode_temp1;
decode_data{i*2}=decode_temp2;
end
%add the computer SNR
for i=1:16
decode_data_X(1,(i-1)*48+1:i*48)=reshape(decode_data{i},1,[]);
end
first_Rx=complex(abs(real(decode_data_X)),abs(imag(decode_data_X)));
mean_value=mean(first_Rx);
power_value=abs(mean_value).^2;
var_noise=var(first_Rx);
Current_SNR=10*log10(power_value/var_noise);
%add the computer SNR.
%x-demod_Qpsk
% fs=2e6;
% Nfft=256;
% fdelta=fs/Nfft
% Pow=[0 -4 -8]; %heavy multipath
% Delay=[0 1.5 4]*1e-6;
% hh=10.^(Pow/20);
% norm_h=hh./norm(hh);
% h=norm_h.*exp(sqrt(-1)*2*pi*rand(1,length(Pow)));
% for k=1:128,
% f=(k-1)*fdelta;
% H(k)=h*exp(sqrt(-1)*2*pi*Delay'*f);
% g(k)=norm(H(k));
% end;
% plot(20*1og10(g));
SNR_frame(trial)=Current_SNR;
end;
toc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -