📄 make_interleaver.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 + -