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

📄 make_interleaver.m

📁 用Matlab仿真turbocode的算法
💻 M
字号:
%******************************************************************************%*                                                                            *%* make_interleaver.m                                                         *%* Zufalls- und Blockinterleaver                                              *%*                                                                            *%******************************************************************************%* Author(s)    : Andreas Dittrich                                            *%* Project start: 23.11.2000                                                  *%* Completed    : 23.11.2000                                                  *%* Last change  : 23.04.2001                                                  *%* Time         : 14:45                                                       *%******************************************************************************%* Changes      : |                                                           *%******************************************************************************%******************************************************************************%* Last change: 23.04.2001                                                    *%* Time       : 14:45                                                         *%* By         : Andreas Dittrich                                              *%* Description: semirandom and block added.                                   *%******************************************************************************%******************************************************************************%*                                                                            *%* function [IL,IL_inv] = make_interleaver( N, IL_method );                   *%*                                                                            *%******************************************************************************%* make_interleaver erzeugt ein Interleaver-/Deinterleavervektor              *%* Bsp.: x_interleaved = x(IL), x = x_interleaved(IL_inv)                     *%*                                                                            *%* N = Anzahl der Elemente                                                    *%* IL_method = Interleavermethode: {'random','block','semirandom'}            *%******************************************************************************function [IL,IL_inv] = make_interleaver( N, IL_method );if (nargin==1),   [IL,IL_inv] = make_interleaver_random( N );else if (nargin==2),      switch lower(IL_method)      case 'random', [IL,IL_inv] = make_interleaver_random( N );      case 'block', [IL,IL_inv] = make_interleaver_block( N );      case 'semirandom', [IL,IL_inv] = make_interleaver_semirandom( N );      case 'ttcmrandom', [IL,IL_inv] = make_interleaver_ttcmrandom( N );      otherwise, error('unknown Iterleaver Method');      end   endend%************** Random Interleaver ****************function [IL,IL_inv] = make_interleaver_random( N );IL = zeros(1,N);IL_inv = zeros(1,N);[tmp, IL] = sort(rand(1,N)); IL_inv(IL)= [1:N];% Alternative Methode (langsamer)%Topf = [1:N];%for i = [N:-1:2],%   x = ceil( i*rand );%   IL(i)=Topf(x);%   IL_inv(IL(i))=i;%   Topf(x) = Topf(i);%end;%IL(1) = Topf(1);%IL_inv(IL(1))=1;%************** Block Interleaver ****************function [IL,IL_inv] = make_interleaver_block( N );IL = zeros(1,N);IL_inv = zeros(1,N);N_sqr = floor( sqrt(N) );block = zeros(N_sqr,N_sqr);block(1:N_sqr*N_sqr) = [1:N_sqr*N_sqr];IL = [reshape(block',1,N_sqr*N_sqr),[(N_sqr*N_sqr+1):N]];IL_inv(IL) = [1:N];%************** Semirandom (Block+Random) Interleaver ****************function [IL,IL_inv] = make_interleaver_semirandom( N );[IL,IL_inv] = make_interleaver_block( N );N_sqrh = floor( sqrt(N)/2 );N_subblocks = floor( N/N_sqrh );for i=1:N_subblocks,   [tmp, IL2] = sort(rand(1,N_sqrh));   IL((i-1)*N_sqrh+[1:N_sqrh]) = IL( IL2 + (i-1)*N_sqrh );end,[tmp, IL2] = sort(rand(1,(N-N_subblocks*N_sqrh)));IL( (N_subblocks*N_sqrh+1):N ) = IL( N_subblocks*N_sqrh + IL2 );IL_inv(IL) = [1:N];%************** TTCM Random Interleaver ****************function [IL,IL_inv] = make_interleaver_ttcmrandom( N );IL = zeros(1,N);IL_inv = zeros(1,N);[tmp, tmp1] = sort(rand(1,ceil(N/2)));[tmp, tmp2] = sort(rand(1,floor(N/2)));IL (1:2:end)=2*tmp1-1;IL (2:2:end)=2*tmp2;IL_inv(IL)= [1:N];% Alternative Methode (langsamer)%Topf = [1:N];%for i = [N:-1:2],%   x = ceil( i*rand );%   IL(i)=Topf(x);%   IL_inv(IL(i))=i;%   Topf(x) = Topf(i);%end;%IL(1) = Topf(1);%IL_inv(IL(1))=1;

⌨️ 快捷键说明

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