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

📄 main.asv

📁 v-blast4x4_dast程序
💻 ASV
字号:
%该程序是加入注水和旋转矩阵的闭环V-BLAST的性能仿真、4发4收、16QAM调制、采用CL和ZF-VBLAST两种解码;
clc;
clear;
ss=[-3,-1,1,3];
%ss = [-1,1];
%16QAM的符号集;

maxlen=length(ss);
c=5000000000;
m = 4;
signal_power=10*m;
%signal_power=2*m;

nT=m;
nR=m;
Lm=input('请输入短帧数:      ');
%SNR_num=input('请输入信噪比的取值个数:          ');
for ii=1:maxlen
    for jj=1:maxlen
        x((ii-1)*maxlen+jj)=ss(ii)+ss(jj)*j;
        a((ii-1)*maxlen+jj,:)=dec2bin((ii-1)*maxlen+jj-1,maxlen);
    end;
end;

%旋转矩阵
M4 = [0.2012 0.3255 -0.4857 -0.7859;-0.3255 0.2012 0.7859 -0.4857;0.4857 0.7859 0.2012 0.3255;-0.7859 0.4857 -0.3255 0.2012]; 



for pp=1:Lm    %确定短帧数

%随机生成输入符号
   for jj=1:m
        n1=1+floor(maxlen*rand);
        n2=1+floor(maxlen*rand);     
        x_symbol(jj,pp)=ss(n1)+ss(n2)*j;
   end;
    
    %随机生成信道特征矩阵
    M(:,:,pp)=randn(nR,nT)/sqrt(2)+j*randn(nR,nT)/sqrt(2);
    M_size1=size(M,1)
    M_size2=size(m,2)
    [U,S,V] = svd(M(:,:,pp));
    
    
    %计算注水系数
    p(:,:,pp) = waterfilling4x4(Lm,8, M, pp, 4);
    q(:,:,pp) = sqrt(p(:,:,pp))
    %DAST编码
    for ii = 1:size(M(:,:,pp),1)
        M_in1((ii-1)*size(M(:,:,pp),2)+1:ii*size(M(:,:,pp),2),:,pp) = diag(M(ii,:,pp));
    end;
    M_in2(:,:,pp)=M_in1(:,:,pp);%等价信道矩阵
    [u,s,v]=svd(M_in2(:,:,pp));
    %开环的信道模型
    y(:,pp)=M(:,:,pp)*x_symbol(:,pp);
    
    %闭环的等效信道模型
    WM2(:,:,pp) = M(:,:,pp)*V*q(:,:,pp)*M4;
    Wy2(:,pp) = WM2(:,:,pp)*x_symbol(:,pp);
    
    %加入DAST编码的闭环信道模型
    WM3(:,:,pp)=M_in2(:,:,pp)*v*q(:,:,pp)*M4;     
    Wy3(:,pp) = WM3(:,:,pp)*x_symbol(:,pp);
    
end;
%星座映射
x_bit=symbol2bit(x_symbol,x,a);


 %--------------------解码部分--9--------------
h1=waitbar(0,'please wait for decoding in one SNR...');      
%加白噪声
%kk为信噪比取值
    kk = 8;
    snr=(kk-1)*2;
    %snrf(kk)=snr(kk)+10*log10(2);
    snr_lin=10^(snr/10);
    noise_power=signal_power/snr_lin;
    noise_std=sqrt(0.5*noise_power);
    %randn('state',11);
    noise1=(randn(4*m,Lm)+j*randn(4*m,Lm))*noise_std;
    noise=(randn(m,Lm)+j*randn(m,Lm))*noise_std;
    r_in=y+noise;    %开环系统的接收信号
    W2r_in = Wy2 + noise;    %闭环系统的接收信号
    W3r_in = Wy3 + noise1;   %加入DAST信道编码的接收信号


%v-blast decode
for pp=1:Lm
 

uu1(pp,:)=VBLAST(r_in(:,pp),M(:,:,pp),m,ss);             %开环系统ZF-VBLAST解码
u1(pp,:)=CL_complex(r_in(:,pp),M(:,:,pp),ss,c);          %开环系统CL解码
       
u2(pp,:)=CL_complex(W2r_in(:,pp),WM2(:,:,pp),ss,c);      %闭环系统解码
%uu2(pp,:)=VBLAST(W2r_in(:,pp),WM2(:,:,pp),m,ss);
u3(pp,:)=CL_complex(W3r_in(:,pp),WM3(:,:,pp),ss,c);      %加入DAST编码的闭环系统解码
end;

%u1 = mean(u1,1);
%u2 = mean(u2,1);
%u3 = mean(u3,1);

%三种情况的误比特率
err1=err_count(u1,x,a,x_bit)
%err1=err_count(uu1,x,a,x_bit)
err2=err_count(u2,x,a,x_bit)
err3=err_count(u3,x,a,x_bit)
 %waitbar(kk/SNR_num); 
 %end;
close(h1);
%semilogy(snr,err1,'gs-');
%hold on;
%semilogy(snr,err2,'r*-');
hold on;
%semilogy(snr,err3,'b*-');
xlabel('符号信噪比');
ylabel('误比特率');
title('16QAM   k=4');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -