def analysis(self): # TODO: 解析結果を格納する構造体をどうするか? # TODO: Flaskを使っているとき、辞書型でGlobal変数を作っていた from FiSig.AudioManager import AudioManager from scipy import hanning from FiSig.gwt import gwt import time self.Result = Struct() self.Result.wave = None # オーディオファイルのロード # [data, fs] = wavread(self.wavfilepath) am = AudioManager(self.wavfilepath) fs = am.getFs() data = am.getData() self.Result.fs = fs self.Result.wave.data_raw = data ############################################ # wave ############################################ # DEBUG: データが長いと面倒なので、0.5sだけ抜き出す if len(data) > fs / 2: data = data[0:fs / 2 - 1] N = len(data) self.Result.wave.data = data ############################################ # STFT ############################################ fftLen = 512 win = hanning(fftLen) step = fftLen / 2 spectrogram = abs(stft(data, win, step)[:, :fftLen / 2 + 1]).T spectrogram = 20 * np.log10(spectrogram) ############################################ # GWT ############################################ # GWTは解析時間が長いので、解析時間を表示 self.statusBar().showMessage("GWT running ..", 5000) # 時間計測開始 start = time.time() # GWT解析を実行する d_gwt, trange, frange = gwt(data, Fs=fs) d_gwt = 20 * np.log10(np.abs(d_gwt)) extent = trange[0], trange[-1], frange[0], frange[-1] # 解析終了と、解析時間を表示する self.statusBar().showMessage( "GWT fin ... analys time %0.2f[s]" % (time.time() - start), 10000) fontsize = 10 # ***************************** # オーディオファイルのプロット # ***************************** self.ax1.cla() # グラフのプロット self.ax1.plot(data) # 上限値選択ウィジェットの実行 ls1 = AxisLimitSelector2D(data, self.fig1, self.ax1, self.ax1_sub) # 軸の設定 # self.fig1.tight_layout() self.ax1.set_xlabel('Time [s]', fontsize=fontsize) self.ax1.set_ylabel('Amplitude [-]]', fontsize=fontsize) self.ax1.locator_params(nbins=10, axis='x', tight=None) self.ax1.locator_params(nbins=3, axis='y', tight=None) self.canvas1.draw() # ***************************** # STFT # ***************************** self.ax2.cla() # STFT結果の表示 self.ax2.imshow(spectrogram, origin="lower", aspect="auto", cmap="jet") # 上限値選択ウィジェットの実行 ls2 = AxisLimitSelector3D(spectrogram, self.fig2, self.ax2, self.ax2_sub) # 軸の設定 # self.fig2.tight_layout() self.ax2.set_xlabel('Time [s]', fontsize=fontsize) self.ax2.set_ylabel('Frequency [Hz]', fontsize=fontsize) self.ax2.locator_params(nbins=10, axis='x', tight=None) self.ax2.locator_params(nbins=3, axis='y', tight=None) self.canvas2.draw() # ***************************** # GWT # ***************************** self.ax3.cla() # GWT結果は間引く gdata = d_gwt[::10, ::10] # STFT結果の表示 im = self.ax3.imshow(np.flipud(gdata.T), cmap='jet', extent=extent) # 上限値選択ウィジェットの実行 self.selector3.setData(d_gwt, "3D") # 軸の設定 self.ax3.axis('auto') self.ax3.set_title('Scarogram (GWT)', fontsize=fontsize) self.ax3.title.set_visible(False) self.ax3.set_xlabel('Time [s]', fontsize=fontsize) self.ax3.set_ylabel('Frequency [Hz]', fontsize=fontsize) self.ax3.locator_params(nbins=10, axis='x', tight=None) self.ax3.locator_params(nbins=3, axis='y', tight=None) self.canvas3.draw()
def analys(self): import time from scipy import hanning from FiSig.gwt import gwt from FiSig.stft import stft self.statusbar.showMessage("analysing ..", 5000) # -- progress bar -- self.progressBar.setVisible(True) self.progressBar.setValue(10) # オーディオファイルのロード am = AudioManager(self.abspath) fs = am.getFs() data = am.getData() # --- データを格納 --- self.fs = fs ############################################ # wave ############################################ # DEBUG: データが長いと面倒なので、0.5sだけ抜き出す if len(data) >= fs / 2: data = data[0:fs / 2 - 1] N = len(data) # --- データを格納 --- self.wave_d = data # -- progress bar -- self.progressBar.setValue(30) ############################################ # STFT ############################################ # fftLen = 512 # win = hanning(fftLen) # step = fftLen / 2 # spectrogram = abs(stft(data, win, step)[:, : fftLen / 2 + 1]).T # spectrogram = 20 * np.log10(spectrogram) # # # --- データを格納 --- # self.spec_d = spectrogram # -- progress bar -- self.progressBar.setValue(60) ############################################ # GWT ############################################ # GWTは解析時間が長いので、解析時間を表示 # self.statusbar.showMessage("GWT running ..", 5000) # 時間計測開始 # start = time.time() # GWT解析を実行する d_gwt, trange, frange = gwt(data, Fs=fs) d_gwt = 20 * np.log10(np.abs(d_gwt)) extent = trange[0], trange[-1], frange[0], frange[-1] # -- progress bar -- self.progressBar.setValue(80) # --- データを格納 --- self.gwt_d = d_gwt self.gwt_trange = trange self.gwt_frange = frange self.gwt_extent = extent # 解析終了と、解析時間を表示する # self.statusbar.showMessage("GWT fin ... analys time %0.2f[s]" % (time.time() - start), 10000) # -- progress bar -- self.progressBar.setValue(100) self.progressBar.setVisible(False)