Я хочу знать, существует ли какая-то частота в сигнале или нет, я хочу создать функцию из следующего стиля:
def freq_exists(signal, freq):
if freq in signal:
return True
return False
Я генерирую волну 1 Гц, как это:
def create_sin_wave(freq):
sample_rate = 8000 # sampling rate Hz
duration = 0.0025 # in seconds
f = freq # sine frequency Hz
samples = (np.sin(2*np.pi*np.arange(sample_rate*duration)*f/sample_rate)).astype(np.float32)
return samples
signal = create_sin_wave(1) # this will return sine wave of 1hz freq.
Теперь я хочу смоделировать его с помощью БПФ и очистить его от шумов, чтобы я знал, есть ли 1HZ на сигнале или нет:
fourier_transform = numpy.fft.fft(signal) # get the Fourier transform of the signal
magnitude_of_fourier_transform = np.abs(fourier_transform ) # get the magnitude
И теперь я хочу добавить фильтр (FIR) по результатам, чтобы я мог выдать логический ответ, существует ли частота X в сигнале или нет.
Я видел функции scipy.signal.firwin
и scipy.signal.lfilter
, но мне это не яснокакие параметры входят в эту функцию и как сгенерировать логическую универсальную функцию (например, скелет freq_exists), которая будет возвращать true / false на любой частоте X и любом сигнале.
Может кто-нибудь добавить пример по этому поводу?(Я видел официальные примеры scipy, но они были мне непонятны, я искал простой пример этого функтина / любого более подходящего примера реализации - цель состоит в том, чтобы проверить, существует ли конкретная частота в произвольном сигнале)