python 기반 음성 분석

음성 분석


실험에서 제작된 몇 개의 음성 분석 프로그램을 묘사하다.

실험용 음성 데이터


1분 30회 사운드 데이터를 사용했다.
샘플링 빈도: 48kHz
비트 크기: 24비트

FFT


며칠 전 투고한 내용과 같은 절차다.
FFT.py
print("===== Wave2FFT_lim =====")
F = np.fft.fft(self.data)
Amp = np.abs(F/(self.frames/2))
Amp_tmp = np.abs(F/(self.frames/2))
Amp_new = Amp / Amp_tmp.max()
freq = np.fft.fftfreq(self.frames, 1/self.Fs)
fig = plt.figure()
plt.plot(freq[1:int(self.frames/2)],Amp_new[1:int(self.frames/2)])
plt.xlabel("Freq [Hz]")
plt.ylabel("Amp")
plt.title("FFT")
plt.ylim(0, 1)
fig.savefig("{}/FFT(Normalization).png".format(self.Folder))
plt.show()
plt.close()
실행 결과
느낌이 좋아, 특정 주기로 서 있어.
또 이번에는 반응 유무를 확인하기 위해 정규화했다.

분광도


spectrogram.py
print("===== Wave2Spec =====")
fig = plt.figure()
pxx, freq, bins, t = plt.specgram(self.data[:,0], Fs = self.Fs)
plt.title("spec")
plt.xlabel("time [sec]")
plt.ylabel("Freq [Hz]")
fig.savefig("{}/Spec.png".format(self.Folder))
plt.show()
plt.close()
실행 결과
세로 스트라이프는 0∼2500Hz 사이에서 은은하게 보이지만, 저주파대가 짙어지기 때문에 중요하다.

STFT


STFT.py
print("===== Wave2STFT =====")
pylab.figure()
f, t, stft = sp.stft(self.data[:,0],fs=self.Fs)
plt.pcolormesh(t, f, np.abs(stft),cmap='hot')
pylab.title("STFT")
plt.xlabel("time [sec]")
plt.ylabel("Freq [Hz]")
pylab.savefig("{}/STFT.png".format(self.Folder))
pylab.show()
실행 결과
취미를 중심으로 해봤는데 아까 스펙트럼보다 더 중요한 부분이 추출된 것 같아요.
또 학습 부족감을 부정할 수 없기 때문에 이 결과가 무엇을 의미하는지 배우고 싶다.

총결산


이번에 몇 차례 음성 분석을 실시했는데 하나하나가 시각적으로 이해하기 쉬워 연구에 사용할 수 있는 내용이다.

좋은 웹페이지 즐겨찾기