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

📄 aaa.asv

📁 协作通信的两种协作方式AF、DF的相关文档和独立编写的仿真程序
💻 ASV
字号:
function  BerSnrTable=AAA(maxsnr)
fprintf( 'AAA仿真\n') ;
BerSnrTable = zeros(maxsnr+1,3);
% --------------------------------------------- %
%                   参数定义                     %
% --------------------------------------------- %
% Initialize the parameters
NumLoop = 100;
NumSubc = 64;
NumCP = 16;
SyncDelay = 0;
% 子载波数            64
% 位数/ 符号          2
% 符号数/ 载波        100
% 训练符号数          0
% 循环前缀长度        16   (1/16)*T
% 调制方式            QPSK
% 多径信道数          3 
% IFFT Size          64 
% 信道最大时延        2
% --------------------------------------------- %
%                  QPSK MODULATION              %
% --------------------------------------------- %
for snr=0:maxsnr
BerSnrTable(snr+1,1) = snr;
BitsTx = floor(rand(1,NumLoop*NumSubc)*2);
SymQpsk=QpskMapping(BitsTx);
%SymQAMtmp = reshape(BitsTx,2,NumLoop*NumSubc/2).';
%SymQAMtmptmp = bi2de(SymQAMtmp,2,'left-msb');
%QAMTable = [-1-i -1+i 1-i 1+i];
%SymQAM = QAMTable(SymQAMtmptmp+1);
SymQpskd=zeros(1,NumLoop*NumSubc/2);
for i= 1:2*NumSubc:NumLoop*NumSubc/2-2*NumSubc+1
         c1=[];
         c2=[];
        x1=SymQpsk(1,i:i+63);
        x2=SymQpsk(1,i+64:i+127);
 % --------------------------------------------- %
 %                   IFFT                        
 % --------------------------------------------- %
 SymIFFTtmp = reshape(x1,NumSubc,1);
 SymIFFT = ifft(SymIFFTtmp,NumSubc);
 % --------------------------------------------- %
 %             Add cyclic prefix                 %
 % --------------------------------------------- %
 NumAddPrefix = NumSubc + NumCP;
 s1 = zeros(NumAddPrefix,1);
 RowPrefix = (NumSubc - NumCP + 1):NumSubc;
 s1 = [SymIFFT(RowPrefix,:);SymIFFT];
 X1=reshape(s1,1,NumAddPrefix);
% --------------------------------------------- %
%                     FFT                       %
% --------------------------------------------- %
SymIFFTtmp1 = reshape(x2,NumSubc,1);
SymFFT = fft(SymIFFTtmp1,NumSubc,1);
% --------------------------------------------- %
%             Add cyclic prefix                 %
% --------------------------------------------- %
 NumAddPrefix = NumSubc + NumCP;
 s2 = zeros(NumAddPrefix,1);
 RowPrefix = (NumSubc - NumCP + 1):NumSubc;
 s2 = [SymFFT(RowPrefix,:);SymFFT];
 X2=reshape(s2,1,NumAddPrefix);
% --------------------------------------------- %
%             channel  cofficient               %
% --------------------------------------------- %
 h1=randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix);
 H1=diag(h1,0);
 h2=randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix);
 H2=diag(h2,0);
 h3=randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix);
 H3=diag(h3,0);
 h4=randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix);
 H4=diag(h4,0);
 %生成加性高斯白噪声%
 zsnl=sqrt(1/(10^((snr)/10)));
 N11=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 N12=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 N21=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 N22=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 %中继R1信号处理%
 Y11=X1*H1+N11;
 Y12=X2*H1+N12;
 S11=sqrt(0.25/(1+0.5))*Y11;
 t=zeros(1,NumAddPrefix-1);
 t=Y12(1,2:NumAddPrefix);
 tt=fliplr(t);
 Y12(1,2:NumAddPrefix)=tt;
 S12=sqrt(0.25/(0.5+1))*Y12;
 %中继R2信号处理%
 Y21=X1*H2+N21;
 Y22=X2*H2+N22;
 S21=-sqrt(0.25/(0.5+1))*conj(Y22);
 q=conj(Y21);
 t=zeros(1,NumAddPrefix-1);
 t=q(1,2:NumAddPrefix);
 tt=fliplr(t);
 q(1,2:NumAddPrefix)=tt;
 S22=sqrt(0.25/(0.5+1))*q;
% --------------------------------------------- %
%             接收端的信号处理                   %
% --------------------------------------------- %
%生成加性高斯白噪声%
 zsnl=sqrt(1/(10^((snr)/10)));
 N1=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 N2=zsnl*(randn(1,NumAddPrefix)+j*randn(1,NumAddPrefix));
 R1=S11*H3+S21*H4+N1;
 R2=S12*H3+S22*H4+N2;
% --------------------------------------------- %
%            Remove Guard Intervals             %
% --------------------------------------------- %
K1=reshape(R1,NumAddPrefix,1 );
K2=reshape(R2,NumAddPrefix,1 );
SymDeCP1 = zeros(NumSubc,1);
SymDeCP1 = K1((NumCP+1+SyncDelay):NumAddPrefix+SyncDelay,:);
SymDeCP2 = zeros(NumSubc,1);
SymDeCP2 = K2((NumCP+1+SyncDelay):NumAddPrefix+SyncDelay,:);
F1=reshape(SymDeCP1,1,NumSubc);
F2=reshape(SymDeCP2,1,NumSubc);
% --------------------------------------------- %
%          对第二个ofdm信号的处理                %
% --------------------------------------------- %
o=F2(1,NumSubc-NumCP+1:NumSubc);
p=F2(1,1:NumSubc-NumCP);
F2(1,1:NumCP)=o;
F2(1,NumCP+1:NumSubc)=p;
% --------------------------------------------- %
%                     FFT                       %
% --------------------------------------------- %
FF1=reshape(F1,NumSubc,1);
FF2=reshape(F2,NumSubc,1);
ZZ1 = fft(FF1,NumSubc,1);
ZZ2 = fft(FF2,NumSubc,1);
% --------------------------------------------- %
%       alamouti 合成信号估计值ss0和ss1          %
% --------------------------------------------- %
Z1=reshape(ZZ1,1,NumSubc);
Z2=reshape(ZZ2,1,NumSubc);
HH3=diag(h3(1,NumAddPrefix-NumSubc+1:NumAddPrefix),0);
HH4=diag(h4(1,NumAddPrefix-NumSubc+1:NumAddPrefix),0);
ss0=Z1*conj(HH3)+conj(Z2)*HH4;
ss1=Z1*conj(HH4)-conj(Z2)*HH3;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
 %          最大似然译码          %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 for k=1:NumSubc
 dh = [1+j -1+j -1-j 1-j]/sqrt(2);
 D1=abs(ss0(k)*[1 1 1 1]-dh).^2;
 [minScale positionmin]=min(D1);
 c1=[c1 dh(positionmin)];
 D2=abs(ss1(k)*[1 1 1 1]-dh).^2;
 [minScale positionmin]=min(D2);
 c2=[c2 dh(positionmin)];
 end
SymQpskd(1,i:i+63)=c1;
SymQpskd(1,i+64:i+127)=c2;
end
BitRx=QpskInverseMapping(SymQpskd);
[Num,Ber]=symerr(BitsTx,BitRx);
BerSnrTable(snr+1,2) = Num ;
BerSnrTable(snr+1,3) = Ber ;
end
figure(1);
 semilogy(BerSnrTable(1:3:maxsnr+1,1),BerSnrTable(1:3:maxsnr+1,3),'g*-');


































⌨️ 快捷键说明

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