отметка времени максимальной частоты питона - PullRequest
0 голосов
/ 10 октября 2018

Я использовал этот код как извлечь частоту, связанную со значениями fft в python и добавил фильтр Firwin для обнаружения короткого высокочастотного сигнала.Сигнал длится 1 секунду и происходит случайным образом в аудиофайле в формате WAV длительностью х секунд.Мой код выглядит следующим образом:

from scipy import signal
from scipy.io import wavfile
from scipy.fftpack import fft, ifft,fftfreq
import matplotlib.pyplot as plt
import wave 
import numpy as np
import sys
import struct

frate,data = wavfile.read('SoundPeep.wav')
#print(frate)
b = signal.firwin(101, cutoff=900, fs= frate, pass_zero=False)
data = signal.lfilter(b, [1.0], data)

w = np.fft.fft(data)
freqs = np.fft.fftfreq(len(w))
#print(len(w)/frate)
#print(w.min(), w.max())
# (-0.5, 0.499975)

# Find the peak in the coefficients
idx = np.argmax(np.abs(w))
winner = np.argwhere(np.abs(w) == np.amax(np.abs(w)))

freq = freqs[idx]
freq_in_hertz = abs(freq * frate)
print("HZ")
print(freq_in_hertz)
occurence = idx/frate
print(occurence)

Код хорошо работает при обнаружении пиковой частоты HZ.Моя проблема в том, что я хочу вычислить, где в аудио-файле начинается высокочастотный сигнал.Я думал, что это можно сделать, просто разделив индекс (idx) на частоту кадров записи, но это, похоже, не работает.

1 Ответ

0 голосов
/ 14 октября 2018

Вы могли бы сделать сонограмму, используя кратковременное преобразование Фурье, чтобы увидеть, как частота меняется со временем.Stft возвращает 3 значения: метка времени, амплитуда и частота.Если амплитуда не релевантна, вы можете просто использовать обнаружение пика оттуда.

...