Использование FIR в Python для проверки наличия частоты в образце - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу знать, существует ли какая-то частота в сигнале или нет, я хочу создать функцию из следующего стиля:

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, но они были мне непонятны, я искал простой пример этого функтина / любого более подходящего примера реализации - цель состоит в том, чтобы проверить, существует ли конкретная частота в произвольном сигнале)

...