📄 rs_decoder_154a.m
字号:
%% 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -