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

📄 mlsd.m

📁 这是一个连续相位调制的程序
💻 M
字号:
function [demod_sym] = mlsd(corr_metric, h, output, state_trans, input, phase_state)

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

[state_num, input_num] = size(output);
[tmp, mod_sym_num] = size(corr_metric);
demod_sym = zeros(mod_sym_num, 1);

% For matlab matrix index convenience, modify output symbol representation.
output = output + 1;

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

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

branch_metric = zeros(state_num, input_num);    % Branch metric state_num * input_num

for k = 1 : mod_sym_num
    % branch metric calculation.
    for i = 1 + mod(k - 1, 2) : 2 : state_num
        for l = 1 : input_num
            branch_metric(i, l) = real(corr_metric(output(i, l), k) * exp(-j * pi * h * phase_state(i)));
        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, input, 1 + mod(k, 2));
    
    % Survivor state path saving
    for n = 1 + mod(k, 2) : 2 : state_num
          survivor_path(n, k) = state_trans(n, sur_path_index(n));
    end
end

[maximum index] = max(acc_metric(1 : 2, mod_sym_num + 1));

% Traceback for decoding
for i = mod_sym_num : -1 : 1
    demod_sym(i) = input(index, find(state_trans(index, :) == survivor_path(index, i)));
    index = survivor_path(index, i);
end
demod_sym(end) = [];

⌨️ 快捷键说明

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