Compare commits

...

2 Commits

2 changed files with 36 additions and 3 deletions

4
dmi.py
View File

@ -1,3 +1,5 @@
from math import ceil
import SoapySDR
import numpy as np
import gc
@ -13,6 +15,7 @@ def main():
freq_sample = 1e6
freq_base = 1088230e3
block_size = 4096
throttle_factor = ceil(freq_sample/125e3)
gui = GUI(freq_sample, freq_base, block_size)
try:
@ -36,7 +39,6 @@ def main():
buf_sdr.start()
try:
throttle = 0
throttle_factor = 8
position_acc = 0.0
while True:
buffers = buf_sdr.get()

View File

@ -4,7 +4,7 @@ import threading
import SoapySDR
import numpy as np
from scipy.signal import blackmanharris
from scipy import signal
class BufferedSDR:
@ -127,7 +127,7 @@ class Stabilizer:
self.wiggle_amplitude = 0.15
def input(self, samples):
spectrum = np.abs(np.fft.fft(samples*blackmanharris(len(samples))))
spectrum = np.abs(np.fft.fft(samples*signal.blackmanharris(len(samples))))
i = np.argmax(spectrum)
amplitude = spectrum[i]
@ -189,3 +189,34 @@ class PositionTracker:
self.last_phase = phase[-1]
self.last_position = position[-1]
return position
class LinearPhaseFilter:
def __init__(self, numtaps, *args, **kwargs):
self.numtaps = numtaps
self.coef = signal.firwin(numtaps, *args, **kwargs)
self.state = np.zeros(self.numtaps - 1)
def input(self, block):
output, self.state = signal.lfilter(self.coef, [1.0], block, zi=self.state)
return output
def delay(self):
assert(self.numptaps % 2 == 1)
return (self.numptaps - 1)//2
class Delay:
def __init__(self, block_size, delay_amount):
self.block_size = block_size
self.delay_amount = delay_amount
self.output = np.zeros(block_size)
self.next = np.zeros(delay_amount)
def input(self, block):
assert(len(block) == self.block_size)
split = self.block_size - self.delay_amount
self.output[:self.delay_amount] = self.next
self.output[self.delay_amount:] = block[:split]
self.next = block[split:]
return self.output