Files
amodem/pll.py
2014-06-19 17:59:51 +03:00

34 lines
812 B
Python

import numpy as np
class Loop(object):
def __init__(self, Kp, Ki, Fs, output=0):
Ts = 1.0 / Fs
self.coeffs = [Ki*Ts/2 - Kp, Ki*Ts/2 + Kp]
self.output = output
self.inputs = [0]
def handle(self, err):
self.inputs.append(err)
self.output = self.output + np.dot(self.inputs, self.coeffs)
self.inputs.pop(0)
return self.output
class PLL(object):
def __init__(self, freq, Fs, filt, phase=0):
self.freq = freq
self.phase = phase
self.Ts = 1.0/Fs
self.filt = filt
def handle(self, sample):
self.pred = np.cos(self.phase)
self.quad = np.cos(self.phase)
err = self.quad * sample
self.freq += self.filt(err)
self.phase += self.freq * self.Ts
def test():
pass