HackRF-Treasure-Chest/Software/Universal Radio Hacker/tests/performance/live_spectrogram.py

76 lines
2.5 KiB
Python
Raw Permalink Normal View History

2022-09-22 22:46:47 +02:00
import time
from multiprocessing import Process, Pipe
from multiprocessing.connection import Connection
import numpy as np
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QFrame, QVBoxLayout, QGraphicsView, QPushButton, QGraphicsScene, QLabel
from urh.signalprocessing.Spectrogram import Spectrogram
def generate_data(connection: Connection, num_samples=32768):
frequency = 0.1
divisor = 200
pos = 0
while True:
result = np.zeros(num_samples, dtype=np.complex64)
result.real = np.cos(2 * np.pi * frequency * np.arange(pos, pos + num_samples))
result.imag = np.sin(2 * np.pi * frequency * np.arange(pos, pos + num_samples))
pos += num_samples
if pos / num_samples >= divisor:
frequency *= 2
if frequency >= 1:
frequency = 0.1
pos = 0
connection.send(result)
def go():
global graphic_view, status_label
data_parent, data_child = Pipe(duplex=False)
receiver = Process(target=generate_data, args=(data_child,))
receiver.daemon = True
receiver.start()
scene = QGraphicsScene()
graphic_view.setScene(scene)
scene.setSceneRect(0, 0, 1024, 1024)
x_pos = 0
y_pos = 0
t = time.time()
while True:
speed = time.time()
data = data_parent.recv()
spectrogram = Spectrogram(data)
pixmap = QPixmap.fromImage(spectrogram.create_spectrogram_image(transpose=True))
scene.setSceneRect(scene.sceneRect().adjusted(0, 0, 0, pixmap.height()))
item = scene.addPixmap(pixmap)
item.setPos(x_pos, y_pos)
y_pos += pixmap.height()
graphic_view.fitInView(scene.sceneRect())
status_label.setText("Height: {0:.0f} // Speed: {1:.2f} // Total Time: {2:.2f}".format(scene.sceneRect().height(),
1/(time.time()-speed),
time.time()-t))
QApplication.instance().processEvents()
if __name__ == '__main__':
global graphic_view, status_label
app = QApplication(["spectrum"])
widget = QFrame()
layout = QVBoxLayout()
graphic_view = QGraphicsView()
layout.addWidget(graphic_view)
status_label = QLabel()
layout.addWidget(status_label)
btn = QPushButton("Go")
layout.addWidget(btn)
btn.clicked.connect(go)
widget.setLayout(layout)
widget.showMaximized()
app.exec_()