rs_encoder_154a.m

来自「source Matlab traites the UWB」· M 代码 · 共 55 行

M
55
字号
%% function tx_bit = rs_encoder_154a(data,DATALENGTH,interleaver_seed)%function tx_bit = rs_encoder_154a(data,DATALENGTH,interleaver_seed)% RS encoding parameters% We are in GF(2^6)m = 6;% Codeword length and message lengthk = 55;n = k+8;% Note: rsgenpoly(n,k) and rsgenpoly(n,k,67) are the samenblock = ceil(DATALENGTH/330);fprintf('[RS encoder] Number of blocks = %d\n',nblock);tx_bit = [];for l = 1:nblock  fprintf('[RS encoder] block = %d, (%d,%d)\n',...          l,1+(l-1)*330,min(l*330,DATALENGTH));  data_block = data(1+(l-1)*330:min(l*330,DATALENGTH));  BLOCKLENGTH = length(data_block);  fprintf('[RS encoder] BLOCKLENGTH = %d\n',BLOCKLENGTH);  % Note: according to 15.4a, the maximum number of bit is 330. Hence, if  % DATA_LENGTH < 330, pad zeros at the beginning  if BLOCKLENGTH < 330    fprintf('[RS encoder] zero padding\n');    data_block = [zeros(1,330-BLOCKLENGTH) data_block];  end  % Conversion from bit to symbol in GF(2^6)  data_block = permute(reshape(data_block,m,k),[2 1]);  symbols = bi2de(data_block,'left-msb');  % RS encoding  enc_symbols = rsenc(gf(symbols',m),n,k);  % Keep only what is necessary  if BLOCKLENGTH < 330    enc_symbols = enc_symbols(floor((330-BLOCKLENGTH)/m)+1:end);  end  % Convert back to bit  tx_bit_block = de2bi(double(enc_symbols.x),m,'left-msb');  tx_bit_block = reshape(permute(tx_bit_block,[2 1]),1,size(tx_bit_block,1)*m);  tx_bit = [tx_bit tx_bit_block];endif ~isempty(interleaver_seed)  fprintf('[RS encoder] interleaving\n');  tx_bit = randintrlv(tx_bit,interleaver_seed);endreturn;

⌨️ 快捷键说明

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