38 lines
922 B
Python
38 lines
922 B
Python
import scipy as sp
|
|
import numpy as np
|
|
|
|
|
|
|
|
def chunk_samples(samples, num_rows):
|
|
return samples.reshape((samples.shape[0]//num_rows, num_rows))
|
|
|
|
|
|
def db(x):
|
|
return 10*np.log10(x)
|
|
|
|
|
|
def quad_demod(samples):
|
|
return 0.5*np.angle(samples[:-1] * np.conj(samples[1:]))
|
|
|
|
|
|
def lowpass(data, f_cutoff, f_s):
|
|
nyq = 0.5*f_s
|
|
normal_cutoff = f_cutoff/nyq
|
|
b, a = sp.signal.butter(2, normal_cutoff, btype="low", analog=False)
|
|
y = sp.signal.lfilter(b, a, data)
|
|
return y
|
|
|
|
|
|
def sdr_bandpass(data, f_pass, f_cutoff, extent_MHz):
|
|
|
|
lower_extent = extent_MHz[0]*1E6
|
|
upper_extent = extent_MHz[1]*1E6
|
|
extent_range = upper_extent - lower_extent
|
|
|
|
normal_pass = (f_pass - lower_extent)/extent_range
|
|
normal_cutoff = (f_cutoff - lower_extent)/extent_range
|
|
|
|
b, a = sp.signal.butter(2, (normal_pass, normal_cutoff), btype="bandpass", analog=False)
|
|
y = sp.signal.lfilter(b, a, data)
|
|
return y
|