Преобразование БПФ фильтрованного сигнала нижних частот с частотой среза 300 Гц возвращает ненулевые значения от -600 Гц до + 600 Гц - PullRequest
0 голосов
/ 15 апреля 2020

Я применяю БПФ для сигнала, записанного на частоте 25000 Гц. Сначала я применяю низкочастотный фильтр Баттерворта 3-го порядка с частотой среза 300 Гц. Затем БПФ применяется к возвращенному сигналу.

Код для фильтрации нижних частот выглядит следующим образом:

def butter_lowpass_filter(data, cutoff, fs, order):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    # Get the filter coefficients
    b, a = signal.butter(order, normal_cutoff, btype='low', analog=False)
    y = signal.filtfilt(b, a, data)
    return y

Когда я применяю и строю график БПФ сигнала, я получаю значения> 0 от -600 Гц до + 600 Гц. Я понимаю, что это, вероятно, потому что я нормализую частоту среза от частоты Найквиста. Код для расчета и построения частоты по оси X выглядит следующим образом:

fft_list= fft(low_pass_filtered_signal)
freq = fftfreq(len(fft_list),1/25000)
plt.figure(1)
plt.figure(figsize=(12,6))
plt.plot(freq,fft_list)
print (freq)
plt.xticks(np.arange(min(freq), max(freq)+1, 1000),rotation=45)
plt.show() 

enter image description here

Моя проблема для фильтра нижних частот с частотой среза 300 Гц, имеет ли смысл иметь коэффициенты БПФ от -600 Гц до 600 Гц. Если нет, есть ли что-то, что я делаю неправильно в моем коде?

...