⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mlsd.m

📁 本人编写的TCM解调源程序共享
💻 M
字号:
function [demod_sym] = mlsd(rcv_sig, info_sym_num, tail_sym_num, output, state_trans, stat_trans_input, stat_trans_output)

% sqwang's source code, used for academic research, not commerce.

stat_trans_output = stat_trans_output + 1;                 % Add 1 for matlab index convenience
state_trans = state_trans + 1;
output = output + 1;

sym_num = info_sym_num + tail_sym_num;
demod_sym = zeros(sym_num, 1);
[state_num, input_num] = size(output);

% For simplicity and debuging, program saves total survivor metric at every symbol.
acc_metric = zeros(state_num, sym_num + 1);
acc_metric(1, 1) = 100;      % Init acc_metric according to initial state

% Survivor path saving
survivor_path = zeros(state_num, sym_num);

t = 0 : 7;
branch_metric = zeros(state_num, input_num);    % Branch metric state_num * input_num

for k = 1 : sym_num 
    corr_metric = rcv_sig(k) * exp(-j * pi/4 * t);
    
    % branch metric calculation.
    for i = 1 : state_num
        for l = 1 : input_num
            branch_metric(i, l) = real(corr_metric(output(i, l)));
        end
    end
    
    % Path metric accumulation, compartion and maximum metric selection&saving
    [acc_metric(:, k + 1), sur_path_index] = metric_acc_cmp_sel(acc_metric(:, k), branch_metric, state_trans, stat_trans_input);
    
    % Survivor state path saving
    for n = 1 : state_num
          survivor_path(n, k) = state_trans(n, sur_path_index(n));
    end
end

index = 1;
% Traceback for decoding
for i = sym_num : -1 : 1
    demod_sym(i) = stat_trans_input(index, find(state_trans(index, :) == survivor_path(index, i)));
    index = survivor_path(index, i);
end

demod_sym(end - tail_sym_num + 1 : end) = [];

⌨️ 快捷键说明

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