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

📄 stbc1126a.m

📁 是自己自创的好程序
💻 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 + -