コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
 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")
コード例 #4
0
 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")
コード例 #5
0
    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)
コード例 #6
0
 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)
コード例 #7
0
 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")
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
 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)
コード例 #17
0
    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")
コード例 #18
0
 def on_combobox_changed(self, value):
     if (value >= 7):
         Features.message(
             "Plotting is not supported on levels higher than 5",
             QMessageBox.Information)