📄 ltable.m
字号:
function [lt_data,lt_state] = ltable(md,s,varargin)%LTABLE Space-time code look-up table generator.% [LT_DATA,LT_STATE] = LTABLE(MD,S) creates MD, S-states% space-time code data and state look-up tables. MD corresponds% to the number of constellation signals e.g. MD-PSK and MD-QAM.% The summary of available designs is listed below. %% [LT_DATA,LT_STATE] = LTABLE(MD,S,METHOD) same as above but % with specific design METHOD. Possible values for METHOD are% {'SpaceTime'}|'DelayDiv'|'UsrExtBlock'. When an 'UsrExtBlock'% option is chosen an external block code definition is required.%% Type%% type stc_bc16.txt%% to see how the entries in the extern file are stored.%% [LT_DATA,LT_STATE] = LTABLE(...,'EchoOn') toggles internal% function echo on.%% TABLE OF AVAILABLE DESIGNS%% # | MD | MODULATION | STATES | METHOD% -----+-----+------------+--------+-------------% 1. | 4 | PSK | 4 | 'SpaceTime'% 2. | 4 | PSK | 8 | 'SpaceTime'% 3. | 4 | PSK | 16 | 'SpaceTime'% 4. | 4 | PSK | 32 | 'SpaceTime'% 5. | 8 | PSK | 8 | 'SpaceTime'% 6. | 8 | PSK | 8 | 'DelayDiv'% 7. | 8 | PSK | 16 | 'SpaceTime'% 8. | 8 | PSK | 32 | 'SpaceTime'% 9. | 16 | QAM | 16 | 'SpaceTime'% 10. | 16 | QAM | 16 | 'DelayDiv'% 11. | 16 | QAM | 16 | 'UsrExtBlock'%% See also DISPDES, SPACE.% Copyright 2001-2002 Kamil Anis, anisk@feld.cvut.cz% Dept. of Radioelectronics, % Faculty of Electrical Engineering% Czech Technical University in Pragu% $Revision: 2.0 $ $Date: 2002/10/23 17:33:28 $% --% <additional stuff should go here>ie = isempty(varargin);switch iecase 1 method = 'SpaceTime'; % default design methodcase 0 switch varargin{1} case 'EchoOn' method = 'SpaceTime'; % default design method otherwise method = varargin{1}; endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BODY BEGIN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% State matrix generatorbase = reshape(1:s,md,s/md)';lt_state = repmat(base,md,1);% Data matrix generator% block code of 16QAMload stc_bc16.txt;for j = 1:md l = j - 1; ak = bitget(l,1); bk = bitget(l,2); dk = bitget(l,3); ek = bitget(l,4); switch md % 4 PSK case 4 for i = 1:s k = i - 1; ak_1 = bitget(k,1); bk_1 = bitget(k,2); ak_2 = bitget(k,3); bk_2 = bitget(k,4); ak_3 = bitget(k,5); bk_3 = bitget(k,6); switch s case 4 lt_data(i,j,1) = mod(2 * bk_1 + ak_1,md); lt_data(i,j,2) = mod(2 * bk + ak,md); case 8 lt_data(i,j,1) = mod(2 * ak_2 + 2 * bk_1 + ak_1,md); lt_data(i,j,2) = mod(2 * ak_2 + 2 * bk + ak,md); case 16 lt_data(i,j,1) = mod(2 * ak_2 + 2 * bk_1 + ak_1,md); lt_data(i,j,2) = mod(2 * bk_2 + 2 * ak_1 + 2 * bk + ak,md); case 32 lt_data(i,j,1) = mod(2 * ak_3 + 3 * bk_2 + 2 * ak_2 + 2 * bk_1 +... ak_1,md); lt_data(i,j,2) = mod(2 * ak_3 + 3 * bk_2 + 2 * bk_1 + ak_1 + 2 *... bk + ak,md); end end % 8 PSK case 8 for i = 1:s k = i - 1; ak_1 = bitget(k,1); bk_1 = bitget(k,2); dk_1 = bitget(k,3); ak_2 = bitget(k,4); bk_2 = bitget(k,5); switch s case 8 switch method case 'SpaceTime' lt_data(i,j,1) = mod(4 * dk_1 + 2 * bk_1 + 5 * ak_1,md); lt_data(i,j,2) = mod(4 * dk + 2 * bk + ak,md); case 'DelayDiv' lt_data(i,j,1)=mod(4 * dk_1 + 2 * bk_1 + ak_1,md); lt_data(i,j,2)=mod(4 * dk + 2 * bk + ak,md); end case 16 lt_data(i,j,1) = mod(ak_2 + 4 * dk_1 + 2 * bk_1 + 5 * ak_1,md); lt_data(i,j,2) = mod(5 * ak_2 + 4 * dk_1 + 2 * bk_1 + ak_1 + 4 *... dk + 2 * bk + ak,md); case 32 lt_data(i,j,1) = mod(2 * bk_2 + 3 * ak_2 + 4 * dk_1 + 2 * bk_1 +... 5 * ak_1,md); lt_data(i,j,2) = mod(2 * bk_2 + 7 * ak_2 + 4 * dk_1 + 2 * bk_1 +... ak_1 + 4 * dk + 2 * bk + ak,md); end end % 16 QAM case 16 for i = 1:s k = i - 1; ak_1 = bitget(k,1); bk_1 = bitget(k,2); dk_1 = bitget(k,3); ek_1 = bitget(k,4); switch s case 16 switch method case 'SpaceTime' lt_data(i,j,1) = mod(8 * ek_1 + 4 * dk_1 + 2 * bk_1 + 11 *... ak_1,md); lt_data(i,j,2) = mod(16 * ek_1 + 16 * dk_1 + 16 * bk_1 + 16 *... ak_1 + 8 * ek + 4 * dk + 2 * bk + ak,md); case 'DelayDiv' lt_data(i,j,1) = mod(8 * ek_1 + 4 * dk_1 + 2 * bk_1 + ak_1,md); lt_data(i,j,2) = mod(8 * ek + 4 * dk + 2 * bk + ak,md); case 'UsrExtBlock' lt_data(i,j,1) = stc_bc16(k + 1,1); lt_data(i,j,2) = stc_bc16(k + 1,2) - i + j; end end end endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BODY END %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if isempty(varargin) == 0 switch varargin{end} case 'EchoOn' [indent,gap,name] = iprompt('LTABLE:'); str1 = num2str(md); str2 = num2str(s); if (md == 4) | (md == 8) str3 = 'PSK'; else str3 = 'QAM'; end disp(' '); disp([name,gap,'Look-up tables for ',method,' code ',str1,str3,', ',... str2,'-states created.']); disp(' '); endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -