def __init__(self): QMainWindow.__init__(self) loadUi("../ui/Continious.ui", self) self.setWindowTitle("Wavelet Transform Data Analyzer Tool") self.setWindowIcon(QtGui.QIcon('../icon/icon.png')) self.setFixedSize(1087, 642) Features.center(self) self.signals = [] self.audio = [] self.time = [] self.load_check = False self.analyze_check = False self.actionClose.triggered.connect(self.close_window) self.cont_signal_Load.triggered.connect(self.load_signal) self.actionFolder.triggered.connect(self.load_folder)#load signal via menubar self.addToolBar(NavigationToolbar(self.widget_1DCont_Original.canvas, self)) # embedding matplotlib to widget self.pushButton_1DCont_Analyze.clicked.connect(self.analyze_cont) # self.pushButton_save_db_cont.clicked.connect(self.save_to_db) wave_types = pywt.wavelist(kind='continuous') self.comboBox_1DCont_Type.addItems(wave_types) self.checkBox_1D_Average.setChecked(True), self.checkBox_1D_Entropy.setChecked(True) self.checkBox_1D_Kurtosis.setChecked(True) self.checkBox_1D_Max.setChecked(True) # discrete page statistic functions checks self.checkBox_1D_Median.setChecked(True) self.checkBox_1D_Min.setChecked(True) self.checkBox_1D_Skewness.setChecked(True) self.checkBox_1D_StandartDeviation.setChecked(True)
def run(self): self.average, self.entropy, self.kurtosis, self.max_v, self.median, self.min_v, self.skewness, self.standart_dev = Features.check_statistics( self) #self.wavelet_type, self.sampling_per, self.min_scale, self.max_scale, self.scale_step = Features.cont_check_wavelet(self) self.sampling_per = 1 self.min_scale = 1 self.max_scale = 8 self.scale_step = 1 wave_types = pywt.wavelist(kind='continuous') self.scaling = np.arange(self.min_scale, self.max_scale, self.scale_step) for wave_func in wave_types: self.wavelet_type = wave_func self.wavelet_level = len(self.scaling) - 1 col, self.header, self.db_header = Features.init_table( self, len(self.all_signals)) self.db_matrix = np.zeros( (len(self.all_signals), 8 * (self.wavelet_level + 1)), dtype=complex) for iter in range(0, len(self.all_signals)): #print(self.all_signals[iter]) self.signals.clear() self.audio, self.sample = librosa.load(self.all_signals[iter]) self.signals.append(self.audio) self.time = np.arange(0, len(self.audio)) / self.sample coef, freqs = pywt.cwt(self.audio, self.scaling, self.wavelet_type, int(self.sampling_per)) for i in range(0, self.wavelet_level + 1): self.signals.append( coef[i]) # adding signals array to coeffs self.db_matrix[iter] = Features.insertTableComplex( self, iter, col) w_name = str(self.wavelet_type) table_name = "Db_GTZAN_function_" + w_name + "_Scale_1_to_8_Period_1" Database.create_table( Database.database_name, table_name, self.db_header, "") # creating new table with statistic function Database.create_table(Database.database_name, table_name, self.db_header, "Comp_") for index in range(0, len(self.all_signals)): name = self.all_signals[index].split(sep='/') Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "") Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "Comp_") print(table_name)
def load_signal(self): self.all_signals, self.filter, self.load_check = Features.load_signal(self) if (self.load_check): if (len(self.all_signals) > 1): # Multiple file self.label_1DCont_DataName.setText("Multiple Signals") # Data name else: name = self.all_signals[0].split(sep='/') self.label_1DCont_DataName.setText(name[-1]) # Setting data name else: Features.message("You have to load at least 1 signal !", QMessageBox.Warning) self.label_1DCont_DataName.setText("No signal selected")
def load_folder(self): self.all_signals, self.load_check = Features.load_folder(self) if (self.load_check): Features.message(str(len(self.all_signals)) + " signals ready to be processed !", QMessageBox.Information) if (len(self.all_signals) > 1): # Multiple file self.label_1DCont_DataName.setText("Multiple Signals") # Data name else: name = self.all_signals[0].split(sep='/') self.label_1DCont_DataName.setText(name[-1]) # Setting data name else: Features.message("You have to load at least 1 signal !", QMessageBox.Warning) self.label_1DCont_DataName.setText("No signal selected")
def __init__(self): super().__init__() QMainWindow.__init__(self) loadUi("../ui/mainWindow.ui", self) self.setWindowTitle("Wavelet Transform Toolbox") self.setWindowIcon(QtGui.QIcon('../icon/icon.png')) self.setFixedSize(500, 300) Features.center(self) self.pushButton_DiscreteWavelet1D.clicked.connect(self.openDiscretePage) self.pushButton_ContinuousWavelet1D.clicked.connect(self.openContinuousPage) self.pushButton_Prediction.clicked.connect(self.openClassificationPage)
def load_folder(self): #Dosya Yükleme self.all_signals, self.load_check = Features.load_folder(self) if (self.load_check): Features.message( str(len(self.all_signals)) + " signals ready to be processed !", QMessageBox.Information) if (len(self.all_signals) > 1): self.label_1D_DataName.setText("Multiple Signals") else: name = self.all_signals[0].split(sep='/') self.label_1D_DataName.setText(name[-1]) else: Features.message("You have to load at least 1 signal", QMessageBox.Warning)
def load_signal(self): self.all_signals, self.filter, self.load_check = Features.load_signal( self) self.progressBar.setValue(0) if (self.load_check): if (len(self.all_signals) > 1): #Çoklu Veri Girişi self.label_1D_DataName.setText("Multiple Signals") #Veri Adı else: name = self.all_signals[0].split(sep='/') self.label_1D_DataName.setText(name[-1]) #Veri Adını oluşturma else: Features.message("You have to load at least 1 signal", QMessageBox.Warning) self.label_1D_DataName.setText("No signal selected")
def __init__(self): QMainWindow.__init__(self) loadUi("../ui/Discrete.ui", self) self.setWindowTitle("Discrete Wavelet Analysis") self.setWindowIcon( QtGui.QIcon('../icon/iDiscrete Wavelet Analysiscon.png')) self.setFixedSize(991, 830) Features.center(self) self.MplWidget.canvas.axes.remove() #ortada oluşan modeli siliyor self.clear_count = 0 #currently how many canvas we have self.load_check = False #Sinyal Yüklenmiş Mi? self.analyze_check = False #İşlenmiş mi self.signals = [] #Sinyaller self.audio = [] #Ses Dosyaları self.time = [] #Zaman #self.addToolBar(NavigationToolbar(self.MplWidget.canvas, self)) # Sinyalleri daha iyi görmek için toolbar self.actionClose.triggered.connect(self.close_window) #Sayfayı Kapatma self.actionFolder.triggered.connect( self.load_folder) #Menu Bardan Dosya Yükleme self.actionImage.triggered.connect( self.load_signal) #Menu Bardan Sinyal Yükleme self.pushButton_1D_Analyze.clicked.connect( self.analyze_signal) #Analiz butonu self.progressBar.setValue(0) #progressBar değeri ilk başta 0 self.pushButton_save_to_db.clicked.connect( self.save_to_db) #Veritabanına kaydetme wave_types = pywt.wavelist(kind='discrete') self.comboBox_1D_Type.addItems( wave_types) #Wavelet Typeları için comboBox oluşturuluyor for i in range(1, 20): self.comboBox_1D_Level.addItem(str(i), i) self.comboBox_1D_Level.currentIndexChanged.connect( self.on_combobox_changed, self.comboBox_1D_Level.currentIndex()) self.checkBox_1D_Average.setChecked(True) self.checkBox_1D_Entropy.setChecked(True) self.checkBox_1D_Kurtosis.setChecked(True) self.checkBox_1D_Max.setChecked(True) self.checkBox_1D_Median.setChecked(True) self.checkBox_1D_Min.setChecked(True) self.checkBox_1D_Skewness.setChecked(True) self.checkBox_1D_StandartDeviation.setChecked(True)
def __init__(self): QMainWindow.__init__(self) loadUi("../ui/Discrete.ui", self) self.setWindowTitle("Wavelet Transform Data Analyzer Tool") self.setWindowIcon(QtGui.QIcon('../icon/icon.png')) self.setFixedSize(1482, 949) Features.center(self) self.MplWidget.canvas.axes.remove() self.clear_count = 0 #currently how many canvas we have self.load_check = False #işlenecek bir sinyal var mı ? self.analyze_check = False #işlenmiş mi self.signals = [] self.audio = [] self.time = [] self.addToolBar(NavigationToolbar( self.MplWidget.canvas, self)) # embedding matplotlib to widget self.actionClose.triggered.connect(self.close_window) self.actionFolder.triggered.connect(self.load_folder) self.actionImage.triggered.connect( self.load_signal) #load signal via menubar self.pushButton_1D_Analyze.clicked.connect( self.analyze_signal) #analyze button #self.pushButton_1D_Analyze.clicked.connect(self.run) #bütün dataya bütün fonksiyonlar self.pushButton_save_to_db.clicked.connect(self.save_to_db) wave_types = pywt.wavelist(kind='discrete') self.comboBox_1D_Type.addItems(wave_types) #initialize comboBox for i in range(1, 20): self.comboBox_1D_Level.addItem(str(i), i) self.comboBox_1D_Level.currentIndexChanged.connect( self.on_combobox_changed, self.comboBox_1D_Level.currentIndex()) self.checkBox_1D_Average.setChecked(True) self.checkBox_1D_Entropy.setChecked(True) self.checkBox_1D_Kurtosis.setChecked(True) self.checkBox_1D_Max.setChecked( True) # discrete page statistic functions checks self.checkBox_1D_Median.setChecked(True) self.checkBox_1D_Min.setChecked(True) self.checkBox_1D_Skewness.setChecked(True) self.checkBox_1D_StandartDeviation.setChecked(True)
def analyze_signal(self): #Veriyi Analiz Etme self.average, self.entropy, self.kurtosis, self.max_v, self.median, self.min_v, self.skewness, self.standart_dev = Features.check_statistics( self) self.wavelet_type, self.wavelet_level = Features.discrete_check_wavelet( self) if (self.load_check and (self.average or self.entropy or self.kurtosis or self.max_v or self.median or self.min_v or self.skewness or self.standart_dev)): #işlenecek müzik olması durumu self.analyze_check = True col, self.header, self.db_header = Features.init_table( self, len(self.all_signals)) self.db_matrix = np.zeros( (len(self.all_signals), 8 * (self.wavelet_level + 1))) for iter in range(0, len(self.all_signals)): print(self.all_signals[iter]) self.signals.clear() self.audio, self.sample = librosa.load(self.all_signals[iter]) self.signals.append(self.audio) self.time = np.arange(0, len(self.audio)) / self.sample coeffs = pywt.wavedec( self.audio, self.wavelet_type, level=self.wavelet_level) #Wavelet Analiz for i in range(0, self.wavelet_level + 1): self.signals.append(coeffs[i]) #Sinyalleri Coef içine atma if (iter == 0 and self.wavelet_level < 8): #İlk sinyali yazdırma Features.discrete_plot_signal(self) self.db_matrix[iter] = Features.insertTable(self, iter, col) self.progressBar.setValue( ((iter + 1) / len(self.all_signals)) * 100) #level = 3 ise signals içinde 5 (4 analiz edilmiş + 1 source) else: if not self.load_check: Features.message("You have to load at least 1 signal", QMessageBox.Warning) else: Features.message( "You have to pick at least 1 statistic function", QMessageBox.Warning)
def save_to_db(self): if (self.load_check and self.analyze_check): w_name = str(self.wavelet_type) table_name = "Db_GTZAN_function_" + w_name + "_Scale_" + self.min_scale + "_to_" + self.max_scale + "_Period_" + self.sampling_per Database.create_table( Database.database_name, table_name, self.db_header, "") #İstatistiksel fonksiyonlar ile yeni tablo oluşturma Database.create_table(Database.database_name, table_name, self.db_header, "Comp_") for index in range(0, len(self.all_signals)): name = self.all_signals[index].split(sep='/') Database.delete_row(Database.database_name, table_name, name[-1], "") Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "") Database.delete_row(Database.database_name, table_name, name[-1], "Comp_") Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "Comp_") Features.message("Your Data Saved Succesfully !", QMessageBox.Warning) else: if (self.load_check): Features.message("You have to analyze the signals first !", QMessageBox.Warning) else: Features.message("You have to load at least 1 signal !", QMessageBox.Warning)
def save_to_db(self): if (self.load_check and self.analyze_check): w_name = str(self.wavelet_type) table_name = "Db_GTZAN_function_" + w_name + "_Degree_" + str( self.wavelet_level) Database.create_table( Database.database_name, table_name, self.db_header, "") # creating new table with statistic function for index in range(0, len(self.all_signals)): name = self.all_signals[index].split(sep='/') #name of signal Database.delete_row(Database.database_name, table_name, name[-1], "") Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "") #adding db to values Features.message("Your Data Saved Succesfully", QMessageBox.Information) else: if (self.load_check): Features.message("You have to analyze the signals first", QMessageBox.Warning) else: Features.message("You have to load at least 1 signal", QMessageBox.Warning)
def analyze_cont(self): self.average, self.entropy, self.kurtosis, self.max_v, self.median, self.min_v, self.skewness, self.standart_dev = Features.check_statistics(self) self.wavelet_type, self.sampling_per, self.min_scale, self.max_scale, self.scale_step = Features.cont_check_wavelet(self) if (self.load_check and ( self.average or self.entropy or self.kurtosis or self.max_v or self.median or self.min_v or self.skewness or self.standart_dev)): # işlenecek müzik olması durumu self.scaling = np.arange(int(self.min_scale), int(self.max_scale), int(self.scale_step)) self.analyze_check = True self.wavelet_level = len(self.scaling) - 1 col, self.header, self.db_header = Features.init_table(self, len(self.all_signals)) self.db_matrix = np.zeros((len(self.all_signals), 8 * (self.wavelet_level + 1)), dtype=complex) for iter in range(0, len(self.all_signals)): print(self.all_signals[iter]) self.signals.clear() self.audio, self.sample = librosa.load(self.all_signals[iter]) self.signals.append(self.audio) self.time = np.arange(0, len(self.audio)) / self.sample coef, freqs = pywt.cwt(self.audio, self.scaling, self.wavelet_type, int(self.sampling_per)) for i in range(0, self.wavelet_level + 1): self.signals.append(coef[i]) # adding signals array to coeffs if (iter == 0): # plotting first signal only self.plot_original_signal() firstau = self.audio time = self.time self.db_matrix[iter] = Features.insertTableComplex(self, iter, col) self.plot_wavelet(firstau,time) else: if not self.load_check: Features.message("You have to load at least 1 signal !", QMessageBox.Warning) else: Features.message("You have to pick at least 1 statistic function !", QMessageBox.Warning)
def save_to_db(self): if (self.load_check and self.analyze_check): w_name = str(self.wavelet_type) table_name = "Db_GTZAN_function_" + w_name + "_Degree_" + str( self.wavelet_level) Database.create_table( Database.database_name, table_name, self.db_header, "") # İstatistiksel fonksiyonlar için tablo oluşturma for index in range(0, len(self.all_signals)): name = self.all_signals[index].split(sep='/') #Sinyalin adı Database.delete_row(Database.database_name, table_name, name[-1], "") Database.add_values_to_table(Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "") #Db'ye değerleri girme Features.message("Your Data Saved Succesfully", QMessageBox.Information) else: if (self.load_check): Features.message("You have to analyze the signals first", QMessageBox.Warning) else: Features.message("You have to load at least 1 signal", QMessageBox.Warning)
def __init__(self): QMainWindow.__init__(self) loadUi("../ui/Prediction.ui", self) self.setWindowTitle("Wavelet Transform Data Analyzer Tool") self.setWindowIcon(QtGui.QIcon('../icon/icon.png')) Features.center(self) list_tables = Database.get_table_names(Database.database_name) Features.list_db_tables(self, list_tables) for i in range(2, 21): self.comboBox_kfold.addItem(str(i), i) self.selected_table_name = "" self.checkBox_knn.setChecked(True) self.checkBox_randomForest.setChecked(True) self.checkBox_svcLinear.setChecked(True) self.checkBox_svcPoly.setChecked(True) # prediction page checks self.checkBox_gaussianNB.setChecked(True) self.checkBox_svcRBF.setChecked(True) self.pushButton.clicked.connect(self.analyze_signal) self.dbTables_listWidget.itemSelectionChanged.connect(self.selectionChanged)
def analyze_signal(self): if(self.selected_table_name != ""): table_name = self.selected_table_name if(table_name.find('Comp_') != -1) : table_name = table_name.replace('Comp_','') matrix = ClassifyMusic.run(table_name, int(self.comboBox_kfold.currentText()), Features.checked_functions(self), self.checkBox_printConf.isChecked()) Features.init_results_table(self) Features.fill_result_table(self, matrix) else : Features.message("You have to choose a table", QMessageBox.Warning)
def run(self): wave_types = pywt.wavelist(kind='discrete') levels = [1, 2, 3] signals = [] self.average, self.entropy, self.kurtosis, self.max_v, self.median, self.min_v, self.skewness, self.standart_dev = Features.check_statistics( self) table_names = Database.get_table_names(Database.database_name) for wave_func in wave_types: if wave_func.find("sym") == -1: for level in levels: self.wavelet_level = level self.wavelet_type = wave_func col, self.header, self.db_header = Features.init_table( self, len(self.all_signals)) self.db_matrix = np.zeros( (len(self.all_signals), 8 * (self.wavelet_level + 1))) if not any("Db_GTZAN_function_" + str(wave_func) + "_Degree_" + str(level) in s for s in table_names): for iter in range(0, len(self.all_signals)): self.signals.clear() self.audio, self.sample = librosa.load( self.all_signals[iter]) self.signals.append(self.audio) self.time = np.arange(0, len( self.audio)) / self.sample coeffs = pywt.wavedec( self.audio, self.wavelet_type, level=self.wavelet_level) # wavelet analyze for i in range(0, self.wavelet_level + 1): self.signals.append( coeffs[i] ) # adding signals array to coeffs self.db_matrix[iter] = Features.insertTable( self, iter, col ) # level = 3 ise signals içinde 5 (4 analiz edilmiş + 1 kaynak) w_name = str(wave_func) table_name = "Db_GTZAN_function_" + w_name + "_Degree_" + str( level) Database.create_table(Database.database_name, table_name, self.db_header, "") for index in range(0, len(self.all_signals)): name = self.all_signals[index].split( sep='/') # name of signal Database.delete_row(Database.database_name, table_name, name[-1], "") Database.add_values_to_table( Database.database_name, table_name, name[-1], self.db_header, self.db_matrix[index], "") # adding db to values print(table_name) else: print("Db_GTZAN_function_" + str(wave_func) + "_Degree_" + str(level) + ' passed') else: print(wave_func + " passed")
def on_combobox_changed(self, value): if (value >= 7): Features.message( "Plotting is not supported on levels higher than 5", QMessageBox.Information)