rs_decoder_154a.m

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

M
50
字号
%% function dec_data = rs_decoder_154a(rx_data,interleave_seed)%function dec_data = rs_decoder_154a(rx_data,interleaver_seed)if ~isempty(interleaver_seed)  fprintf('[RS decoder] deinterleaving\n');  rx_data = randdeintrlv(rx_data,interleaver_seed);end% We are in GF(2^6)m = 6;k = 55;n = k+8;% Note: rsgenpoly(n,k) and rsgenpoly(n,k,67) are the sameDATALENGTH = length(rx_data);nblock = ceil(DATALENGTH/378);fprintf('[RS decoder] Number of blocks = %d\n',nblock);dec_data = [];for l = 1:nblock  fprintf('[RS decoder] block = %d, (%d,%d)\n',...          l,1+(l-1)*378,min(l*378,DATALENGTH));  rx_data_block = rx_data(1+(l-1)*378:min(l*378,DATALENGTH));  BLOCKLENGTH = length(rx_data_block);  fprintf('[RS decoder] BLOCKLENGTH = %d\n',BLOCKLENGTH);  % Now, prepare for decoding  if rx_data_block < 378    fprintf('[RS decoder] zero padding\n');    rx_data_block = [zeros(1,378-BLOCKLENGTH) rx_data_block];  end  % Conversion from bit to symbol in GF(2^6)  rx_data_block = permute(reshape(rx_data_block,m,n),[2 1]);  rx_symbols = bi2de(rx_data_block,'left-msb');  % Actually decode  dec_symbols = rsdec(gf(rx_symbols',m),n,k);  % And convert back to bit  dec_symbols = dec_symbols(end-(BLOCKLENGTH/m-8)+1:end);  dec_data_block = de2bi(double(dec_symbols.x),m,'left-msb');  dec_data_block = ...      reshape(permute(dec_data_block,[2 1]),1,size(dec_data_block,1)*m);  dec_data = [dec_data dec_data_block];endreturn;

⌨️ 快捷键说明

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