classdef Timing_Recovery < handle properties(Access=public) modulation timing_error_detector sps damping_factor normalized_loop_bandwidth detector_gain end methods(Access=public) function obj = Timing_Recovery(options) arguments(Input) options.modulation = 'PAM/PSK/QAM' options.timing_error_detector = 'Gardner'; options.sps = 2; options.damping_factor = 1.0; options.normalized_loop_bandwidth = 0.005; options.detector_gain = 1; end fn = fieldnames(options); for n = 1:numel(fn) obj.(fn{n}) = options.(fn{n}); end end function [data_out,timing_error] = process(obj, data_in) timing_synchronization = comm.SymbolSynchronizer( ... "Modulation", obj.modulation, ... "TimingErrorDetector", obj.timing_error_detector, ... "SamplesPerSymbol", obj.sps, ... "DampingFactor", obj.damping_factor, ... "NormalizedLoopBandwidth", obj.normalized_loop_bandwidth, ... "DetectorGain", obj.detector_gain); data_out = data_in; [data_out.signal,timing_error] = timing_synchronization(data_in.signal); end end end