Compare commits
2 Commits
c499090cdb
...
be600231e5
Author | SHA1 | Date |
---|---|---|
Sebastien Bourdeauducq | be600231e5 | |
Sebastien Bourdeauducq | aded9ddfbc |
4
dmi.py
4
dmi.py
|
@ -1,3 +1,5 @@
|
||||||
|
from math import ceil
|
||||||
|
|
||||||
import SoapySDR
|
import SoapySDR
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import gc
|
import gc
|
||||||
|
@ -13,6 +15,7 @@ def main():
|
||||||
freq_sample = 1e6
|
freq_sample = 1e6
|
||||||
freq_base = 1088230e3
|
freq_base = 1088230e3
|
||||||
block_size = 4096
|
block_size = 4096
|
||||||
|
throttle_factor = ceil(freq_sample/125e3)
|
||||||
|
|
||||||
gui = GUI(freq_sample, freq_base, block_size)
|
gui = GUI(freq_sample, freq_base, block_size)
|
||||||
try:
|
try:
|
||||||
|
@ -36,7 +39,6 @@ def main():
|
||||||
buf_sdr.start()
|
buf_sdr.start()
|
||||||
try:
|
try:
|
||||||
throttle = 0
|
throttle = 0
|
||||||
throttle_factor = 8
|
|
||||||
position_acc = 0.0
|
position_acc = 0.0
|
||||||
while True:
|
while True:
|
||||||
buffers = buf_sdr.get()
|
buffers = buf_sdr.get()
|
||||||
|
|
35
noptica.py
35
noptica.py
|
@ -4,7 +4,7 @@ import threading
|
||||||
|
|
||||||
import SoapySDR
|
import SoapySDR
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.signal import blackmanharris
|
from scipy import signal
|
||||||
|
|
||||||
|
|
||||||
class BufferedSDR:
|
class BufferedSDR:
|
||||||
|
@ -127,7 +127,7 @@ class Stabilizer:
|
||||||
self.wiggle_amplitude = 0.15
|
self.wiggle_amplitude = 0.15
|
||||||
|
|
||||||
def input(self, samples):
|
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)
|
i = np.argmax(spectrum)
|
||||||
amplitude = spectrum[i]
|
amplitude = spectrum[i]
|
||||||
|
|
||||||
|
@ -189,3 +189,34 @@ class PositionTracker:
|
||||||
self.last_phase = phase[-1]
|
self.last_phase = phase[-1]
|
||||||
self.last_position = position[-1]
|
self.last_position = position[-1]
|
||||||
return position
|
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
|
||||||
|
|
Loading…
Reference in New Issue