76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
|
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_()
|