Created
March 8, 2022 14:37
-
-
Save nbecker/66b76d4464352eb8669903d0b77396d4 to your computer and use it in GitHub Desktop.
crl.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from transonic import boost | |
import numpy as np | |
@boost | |
class crl: | |
k: float | |
aT: float | |
sum1: float | |
sum2: float | |
def __init__ (self, omega_n, zeta, init=0): | |
self.k = 2 * zeta * omega_n | |
self.aT = omega_n / (2 * zeta) | |
self.sum1 = 0 | |
self.sum2 = init | |
@boost | |
def call1 (self, xmit: complex, rcv: complex): | |
mix_out = rcv * np.exp (-1j * self.sum2) | |
err = np.angle (mix_out * xmit.conj()) | |
freq = self.k * (self.aT * self.sum1 + err) | |
self.sum1 += err | |
self.sum2 += freq | |
return mix_out | |
@boost | |
def __call__ (self, xmit: 'complex[]', rcv: 'complex[]'): | |
if len (xmit) != len (rcv): | |
raise RuntimeError ('loop_2nd: size mismatch') | |
out = np.empty (len (xmit), dtype=rcv.dtype) | |
phase = np.empty (len (xmit)) | |
freq = np.empty (len (xmit)) | |
for i, (x,r) in enumerate (zip (xmit, rcv)): | |
phase[i] = self.sum2 | |
freq[i] = self.sum1 | |
out[i] = self.call1 (x, r) | |
return out, phase, freq |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment