Определите, содержится ли указанная c частота в сигнале - PullRequest
1 голос
/ 19 марта 2020

Мне нужно написать скрипт, который должен определять частоты и находить определенный c, если он содержится в сигнале. Проблема в том, что я получаю большое количество разных частот после использования БПФ, и никакой частоты не должно быть. Например, если я просто посылаю простые 440 Гц, нахожу пик и печатаю соответствующую частоту, это работает хорошо. Но если я посылаю высокочастотный сигнал с другим шумом, он не работает. Этот случай мне интереснее.

Что я делаю:

from scipy.io import wavfile
import numpy as np
from numpy import fft

fs, data = wavfile.read('./signal.wav')
frs = np.fft.fftfreq(len(data))
res = abs(frs*fs)

В Res я вижу много «лишних» частот. Основная задача - определить, есть ли заданная частота c. 21487 Гц, например. Я также нашел реализацию алгоритма Гертцеля, но это занимает много времени. Есть ли быстрый и простой способ решить мою проблему?

Заранее спасибо

1 Ответ

0 голосов
/ 20 марта 2020

Как я понимаю, команда np.fft.fftfreq возвращает только частотный вектор частотного бина, а не fft сигнала.

Чтобы найти частоту в сигнале, вы должны сделать fft и затем найдите, например, максимум в векторе, а затем вычислите частоту обратной связи. Или вы знаете положение в векторе, и вы можете посмотреть частоту в векторе рез.

Поскольку fftfreq не вычисляет fft, это гораздо быстрее, чем вычислять алгоритм Гёртцеля.

Описание np.fft.fftfreq

...