diff --git a/Classes/04_DSP/Equalizer/ML_MLSE.m b/Classes/04_DSP/Equalizer/ML_MLSE.m index 9c9a033..7ad2722 100644 --- a/Classes/04_DSP/Equalizer/ML_MLSE.m +++ b/Classes/04_DSP/Equalizer/ML_MLSE.m @@ -102,7 +102,7 @@ classdef ML_MLSE < handle % --- Parameters obj.S = numel(unique(D.signal)); % alphabet size - obj.Nf = obj.order; % filter length + obj.Nf = obj.order*obj.sps; % filter length % obj.delta = 3;%ceil(obj.Nf/2); % delay parameter obj.nStates = obj.S^obj.L; obj.nFeasible = obj.nStates*obj.S; @@ -195,8 +195,8 @@ classdef ML_MLSE < handle k = symbol; % --- Build Δ-delayed observation window y_k - i1 = k - obj.Nf + 1 + obj.delta; - i2 = k + obj.delta; + i1 = sample - obj.Nf + 1 + obj.delta; + i2 = sample + obj.delta; buf = x(max(1,i1):min(length(x),i2)); padL = max(0,1 - i1); padR = max(0,i2 - length(x)); @@ -327,15 +327,19 @@ classdef ML_MLSE < handle end [~, s_end] = max(pm); - viterbi_path = zeros(N,1,'uint32'); - viterbi_path(N) = s_end; - for n = N:-1:2 + viterbi_path = zeros(symbol,1,'uint32'); + viterbi_path(symbol) = s_end; + for n = symbol:-1:2 viterbi_path(n-1) = pred(n, viterbi_path(n)); end y_vit = obj.first_sym(viterbi_path); y = obj.first_sym(viterbi_path); + + + + if 1 %debug || training err = sum(y ~= d(1:length(y))); ser = err./length(y); @@ -354,7 +358,7 @@ classdef ML_MLSE < handle subplot(2,2,4); % scatter(1:N,pm_sto,1,'.') - plot(1:N,pm_sto) + plot(1:symbol,pm_sto) title('Path Metric Winners') end