2017-12-12 12 views
1

audio.wav 파일에서 스펙트로 그램을 그리기 위해 오디오 파일 작업을하고있었습니다. 나는 scipy 문서에있는 코드를 살펴 봤다.신호 스펙트럼에서 피크 추출하기

from scipy import signal 
import matplotlib.pyplot as plt 
import numpy as np 
fs = 10e3 
N = 1e5 
amp = 2 * np.sqrt(2) 
noise_power = 0.01 * fs/2 
time = np.arange(N)/float(fs) 
mod = 500*np.cos(2*np.pi*0.25*time) 
carrier = amp * np.sin(2*np.pi*3e3*time + mod) 
noise = np.random.normal(scale=np.sqrt(noise_po wer), size=time.shape) 
noise *= np.exp(-time/5) 
x = carrier + noise 
f, t, Sxx = signal.spectrogram(x, fs) 
plt.pcolormesh(t, f, Sxx) 
plt.ylabel('Frequency [Hz]') 
plt.xlabel('Time [sec]') 
plt.show() 

이제 플롯은 다소 비슷해 보입니다. plot1

이제이 플롯은 빈도 대 시간입니다. 피크 포인트 (또는 최대 값)에서 y 값을 추출하고 싶습니다. 내가 할 수있는 방법이 있니?

이 음모는 수동으로 작성한 기능을 기반으로한다는 것을 기억하십시오. 오디오 파일의 경우 모든 항목이 무작위로 선택됩니다.

답변

0

최대 신호의 주파수

f[np.argmax(Sxx, axis=0)] 

통해 발견 될 수 넌

m = np.argmax(Sxx, axis=0) 
plt.plot(t,f[m], color="crimson") 

enter image description here

+0

http://www.peterjbentley.com/heartchallenge/spectrograms1로 플롯이있다 .jpg 좀 더 자세히 알려주세요 위의 그림을 보면 최대 피크를 식별해야합니다. f [m] 값을 살펴 보았습니다.이 값이 정확히 무엇인지 설명하고 주파수 대 시간 플롯에서 하나의 가장 높은 점을 얻는 방법은 무엇입니까? – Djokester

+0

'f [m]'는 최대 신호의 주파수입니다. 예 : 시간 t [i]에서 신호는 f [m] [i]의 주파수에서 최대가된다. 내가 보여 주려고하는 줄거리가 무엇인지 모르겠다. 그래서 나는 그 문제를 이해하지 못한다. – ImportanceOfBeingErnest