Определение частоты среза для фильтрацииPython

Программы на Python
Ответить
Anonymous
 Определение частоты среза для фильтрации

Сообщение Anonymous »

Я хотел бы определить выбор частоты среза, например, для фильтра нижних частот Баттерворта второго порядка, используя анализ частотного спектра. Для этой цели я хотел бы реализовать быстрое преобразование Фурье для своих данных с помощью scipy.fftpack.
После преобразования сигнала я сгладил спектр с помощью фильтра Савицкого-Голея. и определил пороговую частоту как 5% от максимальной частоты спектра. Впоследствии я определил значимые частоты значительный_freqs на основе этой пороговой частоты. Частота среза определялась как максимальное значение в списке значимых частот.

Код: Выделить всё

from scipy.fftpack import fft, fftfreq
from scipy.signal import savgol_filter
import numpy as np

#example data
np.random.seed(42)
duration = 10
fs = 500  # sampling rate
n_samples = duration * fs #number of samples

time = np.linspace(0, duration, n_samples)
signal = (
2 * np.sin(2 * np.pi * 5 * time) +
0.5 * np.sin(2 * np.pi * 20 * time) +
np.random.normal(0, 0.2, n_samples)
)

#method
freqs = fftfreq(len(signal), d=1/fs)[:len(signal) // 2]
spectrum = np.abs(fft(signal))[:len(signal) // 2]

smoothed_spectrum = savgol_filter(spectrum, window_length=11, polyorder=2)

threshold = 0.05 * max(smoothed_spectrum)
significant_freqs = freqs[smoothed_spectrum >= threshold]

optimal_cutoff = max(significant_freqs)

threshold_dB = 20 * np.log10(threshold / max(smoothed_spectrum))

print(f"\nOptimal cutoff frequency: {optimal_cutoff:.10f} Hz")
print(f"Threshold amplitude: {threshold_dB:.2f} dB")
Достаточно ли этого способа определить частоту среза? Как мне определить пороговую частоту, выраженную относительно максимальной частоты?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -filtering
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»