Make it work

This commit is contained in:
Mike Walters 2016-07-30 10:51:29 +01:00
parent a3ce184f5e
commit 1538f37132
4 changed files with 37 additions and 16 deletions

View File

@ -301,12 +301,15 @@ class HackRFSweepThread(RtlPowerBaseThread):
"overhang": overhang,
"single_shot": single_shot
}
self.fft_size = 64
self.freqs = [self.get_hop_freq(hop) for hop in range(hops)]
self.freqs_crop = [(f[0] + crop_freq, f[1] - crop_freq) for f in self.freqs]
self.databuffer = {"timestamp": [], "x": [], "y": []}
self.databuffer_hop = {"timestamp": [], "x": [], "y": []}
self.hop = 0
self.prev_line = ""
self.prev_freq = 0
self.skip = True
print("hackrf_sweep params:")
pprint.pprint(self.params)
@ -329,10 +332,28 @@ class HackRFSweepThread(RtlPowerBaseThread):
self.process = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
universal_newlines=False)
def filter_nan(self, num):
if np.isnan(num) or np.isinf(num) or np.isneginf(num):
return -80
return num
def parse_output(self, buf):
"""Parse one buf of output from hackrf_sweep"""
data = np.fromstring(buf, dtype='<f4')
print("Got buffer for {}MHz".format(data[0]))
centre_freq = data[0] * 1e6
if centre_freq != self.prev_freq:
if centre_freq < self.prev_freq:
# Skip first run through in case it was incomplete
# otherwise the data_storage array sizes are setup incorrectly and mismatch later
if not self.skip:
self.data_storage.update(self.databuffer)
self.skip = False
self.databuffer = {"timestamp": [], "x": [], "y": []}
self.databuffer["x"] += [centre_freq + i * 20e6 / self.fft_size for i in range(int(-self.fft_size/2), int(self.fft_size/2))]
self.databuffer["y"] += [self.filter_nan(x) for x in data[1:]]
self.prev_freq = centre_freq
def run(self):
@ -342,7 +363,7 @@ class HackRFSweepThread(RtlPowerBaseThread):
self.rtlPowerStarted.emit()
while self.alive:
buf = self.process.stdout.read(4*(1+32))
buf = self.process.stdout.read(4*(1+self.fft_size))
if buf:
self.parse_output(buf)

View File

@ -81,7 +81,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="__main__.py" line="465"/>
<location filename="__main__.py" line="468"/>
<source>QSpectrumAnalyzer {}</source>
<translation type="unfinished"></translation>
</message>
@ -176,12 +176,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="__main__.py" line="298"/>
<location filename="__main__.py" line="301"/>
<source>N/A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="__main__.py" line="465"/>
<location filename="__main__.py" line="468"/>
<source>About - QSpectrumAnalyzer</source>
<translation type="unfinished"></translation>
</message>
@ -206,7 +206,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="__main__.py" line="298"/>
<location filename="__main__.py" line="301"/>
<source>Frequency hops: {} | Sweep time: {:.2f} s | FPS: {:.2f}</source>
<translation type="unfinished"></translation>
</message>

View File

@ -189,10 +189,10 @@
<number>3</number>
</property>
<property name="minimum">
<double>24.000000000000000</double>
<double>1.000000000000000</double>
</property>
<property name="maximum">
<double>1766.000000000000000</double>
<double>6000.000000000000000</double>
</property>
<property name="value">
<double>87.000000000000000</double>
@ -227,10 +227,10 @@
<number>3</number>
</property>
<property name="minimum">
<double>24.000000000000000</double>
<double>1.000000000000000</double>
</property>
<property name="maximum">
<double>1766.000000000000000</double>
<double>6000.000000000000000</double>
</property>
<property name="value">
<double>108.000000000000000</double>

View File

@ -116,9 +116,9 @@ class Ui_QSpectrumAnalyzerMainWindow(object):
self.startFreqSpinBox.setSizePolicy(sizePolicy)
self.startFreqSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.startFreqSpinBox.setDecimals(3)
self.startFreqSpinBox.setMinimum(24.0)
self.startFreqSpinBox.setMaximum(1766.0)
self.startFreqSpinBox.setProperty("value", 87.0)
self.startFreqSpinBox.setMinimum(1.0)
self.startFreqSpinBox.setMaximum(6000.0)
self.startFreqSpinBox.setProperty("value", 2390.0)
self.startFreqSpinBox.setObjectName(_fromUtf8("startFreqSpinBox"))
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.startFreqSpinBox)
self.label_3 = QtGui.QLabel(self.frequencyDockWidgetContents)
@ -132,9 +132,9 @@ class Ui_QSpectrumAnalyzerMainWindow(object):
self.stopFreqSpinBox.setSizePolicy(sizePolicy)
self.stopFreqSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.stopFreqSpinBox.setDecimals(3)
self.stopFreqSpinBox.setMinimum(24.0)
self.stopFreqSpinBox.setMaximum(1766.0)
self.stopFreqSpinBox.setProperty("value", 108.0)
self.stopFreqSpinBox.setMinimum(1.0)
self.stopFreqSpinBox.setMaximum(6000.0)
self.stopFreqSpinBox.setProperty("value", 2510.0)
self.stopFreqSpinBox.setObjectName(_fromUtf8("stopFreqSpinBox"))
self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.stopFreqSpinBox)
self.label = QtGui.QLabel(self.frequencyDockWidgetContents)