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

📄 testdapsk_f_long_code.m

📁 通信系统中的最新的分块差分调制技术的源码
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ofdm系统参数设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%101/5/chan.6 is very good
clc;
clear all;
Nu=112;                             % ifft size according to fs
Ng=88;                              % the length of cp
bw=10000;                           % channel bandwidth
fs=10000;                           % sampling frequency
a=2;                                % deferential amplitude
long=Nu;
% the block size of differential mudulation 
%-----------------------------------------
%-----------long=1:frequency difference-----------
%-----------long=Nu:time difference---------------
%-----------long=56:block frequency difference----

z=phase_corect1('chan.6',fs,Nu); 
%z=0
carriers=ceil(bw*Nu/fs);            % useful carrier number
ncon=16;                            % constellation
Ns=Nu+Ng;
nums=10;                            % ofdm symbol number in a transimission frame
times=10;                           % the times of repeat transimission in some SNR!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% test ofdmdapsk in frequency Ber performnce  %%%%%%%%%%%%%%%%%%%%%% 
snr1=0;
for  snr=10:5:30
     ratio=0;
    
    for time=1:times
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       %%%%%%%%%%%%%%%%%%%%%% error control encode%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        trel = poly2trellis(7,[134 171]); % Define trellis.
        msg = randint(carriers*log2(ncon)*nums/2,1,2,123); % Random data
        msg1=msg(long*log2(ncon)+1:end);
        code = convenc(msg,trel); % Encode.rate=1/2
        
        
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       %%%%%%%%%%%%%%%%%%%%%%%%%%%  send  signal  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       % generating  nums  symbols of ofdm each time
       %dapsk modulation
%        datamap=dapskmap_frequency(code,a,ncon); 
       datamap=dapskmap_frequency_long(code,a,ncon,long);
       
       datamap=reshape(datamap,carriers,nums);
        %add zero  to carriers according to Nu
        numzero=ceil((Nu-carriers)/2);
        datamap=[zeros(numzero,nums);datamap;zeros(numzero,nums)]; 
        %ofdm modulation
        datamap=ifft(datamap);
        %add cp
        temp=datamap((Nu-Ng+1):Nu,:);
        datamap=[temp;datamap];
        clear temp;
        % get ofdm baseband signal
        [m,n]=size(datamap);
        outstream=reshape(datamap,m*n,1); 
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%%%%% pass channel  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        %pass multichannel
        outstream=multirayfade(outstream,fs,'chan.6');
        %pass awgn channeel
        outstream=awgn(outstream,snr,'measured') ;
        
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%%%%%%%%%   receive signal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      
       %delete cp
       datademap=reshape(outstream,m,n);
       temp=datademap;
       temp(1:Ng,:)=[];
       datademap=temp;
       clear temp;
       
       %ofdm symbols demodulation
       datademap=fft(datademap);
       temp=datademap;
       
       % delete zero according to carriers
       temp(1:numzero,:)=[];
       temp=temp;
       len=length(temp);
       temp(len-numzero+1:len,:)=[];
       datademap=temp;
       clear temp;
       %dapsk signal demodulation
       datademap=reshape(datademap,1,carriers*nums);
%        datademap=dapskdemod_frequency(datademap);
       datademap=dapskdemod_frequency_long(datademap,long);
       %datademap=exp(i*z).*datademap;
       %map the demodulation signals to bit streams
%        [outbit]=dapskgray_frequency_correct(datademap,a,ncon,z);
       [outbit]=dapsktogray_frequency(datademap,a,ncon);   
          
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       %%%%%%%%%%%%%%%%%%%%% error ctrol decode%%%%%%%%%%%%%%%%%%%%%%%%%%
       ncode=outbit';
       tblen =34; % Traceback length
       % Use hard decisions.
       %decoded1 = vitdec(ncode,trel,tblen,'cont','hard');

       % To prepare for soft-decision decoding, map to decision values.
       [x,qcode] = quantiz(1-2*ncode,[-.75 -.5 -.25 0 .25 .5 .75],...
       [7 6 5 4 3 2 1 0]); % Values in qcode are between 0 and 2^3-1.
       decoded3 = vitdec(qcode',trel,tblen,'cont','soft',3);
       %decoded3=decoded3(long*log2(ncon)+1:end);
       [n1,ber] = biterr(decoded3(tblen+1:end),msg(1:end-tblen));
       ratio=ratio+ber;
   end
%        disp('%%%%%%%%%%%%%%%% display ber /snr %%%%%%%%%%%%%%%%%%%%%%%')
%        snr
       snr1=snr1+1;
       ratio_ber(snr1)=ratio/times;
   end
       % figure plot ber according to snr 
        snr=10:5:30;
        semilogy(snr,ratio_ber,'r*');
        disp('********************* final result********************');
        [ ratio_ber']

⌨️ 快捷键说明

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