forked from mo-gaafar/multi-signal-visualizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclasses.py
139 lines (106 loc) · 4.53 KB
/
classes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# THIS FILE CONTAINS FUNCTION DEFENITIONS AND OBJECTS USED IN MAIN
# IT WILL BE SPLIT INTO MORE LOGICAL MODULES IN THE FUTURE
from asyncio.windows_events import NULL
from main import DebugMode, MainWindow
import string
from PyQt5 import QtWidgets, uic
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QSlider, QTextEdit, QFileDialog, QScrollBar, QComboBox, QCheckBox, QScrollBar, QLCDNumber, QLineEdit
import pyqtgraph as pg
from pyqtgraph import PlotWidget
import sys
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas
import scipy.io
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
import utility as util
# Global Interface Variables
LabelTextBox = "null"
FreqRangeMin = 0
FreqRangeMax = 250
# TODO: add themes here somehow? create theme object or dictionary?
SpectroTheme = 'viridis'
# Should be updated from combobox (on change)
SignalSelectedIndex = 0
SpectroSelectedIndex = 0
def SetSelectedIndex(Input, Selector):
if Selector == "Signal":
global SignalSelectedIndex
SignalSelectedIndex = Input
print(SignalSelectedIndex)
util.printDebug("Signal dropdown: " + str(SignalSelectedIndex))
class ChannelLine():
def __init__(self, Label="Unlabeled", LineColour=0xFFFF00, IsHidden=False, Filepath="null", Time=[], Amplitude=[]):
self.Label = "untitled"
self.LineColour = 0xffff00
self.IsHidden = IsHidden
self.Filepath = "null"
self.Time = []
self.Amplitude = []
self.TimeArrFull = np.array([])
self.AmplitudeArrFull = np.array([])
self.PlotWidgetReference = PlotWidget()
def UpdateColour(self, InputColour):
PrevColour = self.LineColour
# Keeps previous colour if user cancels/selects black
if (InputColour == "#000000"):
self.LineColour = PrevColour
else:
self.LineColour = InputColour
util.printDebug(str(self.LineColour) +
" set as colour for channel: " + str(SignalSelectedIndex))
# LineColour Getter
def GetColour(self):
return self.LineColour
def UpdateHide(self):
util.printDebug("Updated IsHidden")
# Global plot channel object that contains related attributes
# TO BE INITIALIZED AS GLOBAL VAR
class PlotterWindow:
def __init__(self, YAxisRange=(0, 1), XAxisRange=(-1, 1), CineSpeed=1.0):
self.YAxisRange = YAxisRange # Tuple containing min/max ranges
self.XAxisRange = XAxisRange
self.CineSpeed = 50
def UpdateCineSpeed(self, Input):
self.CineSpeed = (50) / (Input/100)
#MainWindow.timer = QtCore.QTimer()
# MainWindow.timer.setInterval(100*self.CineSpeed)
class ChannelSpectrogram:
def __init__(self, FreqRangeMax=1000, FreqRangeMin=0, SelectedChannel=1, SelectedTheme="Default"):
self.FreqRangeMax = FreqRangeMax
self.FreqRangeMin = FreqRangeMin
self.SelectedTheme = SelectedTheme
def UpdateFreqRange(Input, MinOrMax):
if MinOrMax == "Min":
util.printDebug("Brengan")
# Updates the object variable
# Update the attribute in the actual plot
if MinOrMax == "Max":
util.printDebug("Brengan")
# Updates the object variable
# Update the attribute in the actual plot
def UpdateSelectedTheme(ThemeIndex):
util.printDebug("Brengan")
# Updates the object variable
# Update the attribute in the actual plot
def initSpectroRangeSliders(self):
self.MinRangeSlider = self.findChild(QSlider, "MinRangeSlider")
self.MinRangeSlider.setMaximum(FreqRangeMax)
self.MinRangeSlider.setValue(0)
self.MinRangeSlider.sliderReleased.connect(
lambda: self.SpectrogramFrequency(self.MinRangeSlider.value(), "min"))
self.MaxRangeSlider = self.findChild(QSlider, "MaxRangeSlider")
self.MaxRangeSlider.setMaximum(FreqRangeMax)
self.MaxRangeSlider.setValue(FreqRangeMax)
self.MaxRangeSlider.sliderReleased.connect(
lambda: self.SpectrogramFrequency(self.MaxRangeSlider.value(), "max"))
self.MinLCD = self.findChild(QLCDNumber, "MinLCD")
self.MinLCD.display(FreqRangeMin)
self.MinRangeSlider.valueChanged.connect(
lambda: self.MinLCD.display(self.MinRangeSlider.value()))
self.MaxLCD = self.findChild(QLCDNumber, "MaxLCD")
self.MaxLCD.display(FreqRangeMax)
self.MaxRangeSlider.valueChanged.connect(
lambda: self.MaxLCD.display(self.MaxRangeSlider.value()))