Added:
- Class folder 'Timing Recovery' with different timing recoveries - Minimal example for the timing recovery on the FSO data - New evaluation scripts in the FSO project folder
This commit is contained in:
77
Classes/04_DSP/Timing Recovery/Timing_Recovery_Move_It.m
Normal file
77
Classes/04_DSP/Timing Recovery/Timing_Recovery_Move_It.m
Normal file
@@ -0,0 +1,77 @@
|
||||
classdef Timing_Recovery_Move_It < handle
|
||||
|
||||
properties(Access=public)
|
||||
f_sim
|
||||
gamma
|
||||
end
|
||||
|
||||
methods(Access=public)
|
||||
function obj = Timing_Recovery_Move_It(options)
|
||||
arguments(Input)
|
||||
|
||||
options.f_sim = 14e9;
|
||||
options.gamma = 0.1;
|
||||
|
||||
end
|
||||
|
||||
fn = fieldnames(options);
|
||||
for n = 1:numel(fn)
|
||||
obj.(fn{n}) = options.(fn{n});
|
||||
end
|
||||
|
||||
%obj-Initialization here%
|
||||
|
||||
end
|
||||
|
||||
function data_out = process(obj, data_in)
|
||||
|
||||
e = NaN(size(data_in.signal));
|
||||
T = 1/obj.f_sim;
|
||||
t = zeros(size(data_in.signal));
|
||||
t(2) = T/2;
|
||||
mu = zeros(size(data_in.signal));
|
||||
|
||||
% n = 2;
|
||||
for k = 3:2:length(data_in.signal)
|
||||
data_in.signal(k-1) = data_in.signal(k-1)*(1-mu(k-2)) + data_in.signal(k)*mu(k-2);
|
||||
data_in.signal(k) = data_in.signal(k)*(1-mu(k-1)) + data_in.signal(k+1)*mu(k-1);
|
||||
|
||||
% TED
|
||||
e(k) = (data_in.signal(k-2)-data_in.signal(k))*data_in.signal(k-1);
|
||||
e(k+1) = e(k);
|
||||
|
||||
% TED Mueller Mueller
|
||||
% e(k) = ref_in(n-1)*data_in.signal(k) - ref_in(n)*data_in.signal(k-2);
|
||||
% e(k+1) = e(k);
|
||||
% n = n+1;
|
||||
%
|
||||
% interpolator control
|
||||
% t(k) = t(k-1) + T/2 + obj.gamma/2*e(k);
|
||||
% t(k+1) = t(k) + T/2 + obj.gamma/2*e(k+1);
|
||||
t(k) = t(k-1) + T/2 + obj.gamma*e(k)*T/2;
|
||||
t(k+1) = t(k) + T/2 + obj.gamma*e(k+1)*T/2;
|
||||
% t(k) = k*T/2 + obj.gamma*e(k)*T/2;
|
||||
% t(k+1) = k*T/2 + obj.gamma*e(k+1)*T/2;
|
||||
|
||||
% interpolator
|
||||
mu(k) = t(k)/(T/2) - round(t(k)/(T/2));
|
||||
mu(k+1) = t(k+1)/(T/2) - round(t(k+1)/(T/2));
|
||||
|
||||
thres = 0.7;
|
||||
if mu(k)-mu(k-1) > thres
|
||||
mu(k) = mu(k) - 1;
|
||||
elseif mu(k) - mu(k-1) < -thres
|
||||
mu(k) = mu(k) + 1;
|
||||
end
|
||||
|
||||
if mu(k+1)-mu(k) > thres
|
||||
mu(k+1) = mu(k+1) - 1;
|
||||
elseif mu(k+1) - mu(k) < -thres
|
||||
mu(k+1) = mu(k+1) + 1;
|
||||
end
|
||||
end
|
||||
data_out = data_in;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user