Как я могу использовать scipy.signal.freqz для полосового фильтра в обработке сигнала - PullRequest
0 голосов
/ 11 апреля 2020

я пробовал этот полосовой фильтр, он не работает должным образом

def BP_FILTER(raw_signal,Fs=125,alpha=5/6, beta=4, N=30*125):
    """
    Args:
        alpha - cuttoff frequency of start of pass band
        beta  - cuttoff frequency of end of pass band
        Fs    - frequency sample
        N     - samples for plot(optional) we don't have to use it 
    """
    f_signal=fft(raw_signal)
    W,H=freqz(raw_signal,worN=raw_signal.size,fs=Fs)
    W=np.array([np.sqrt(item.real**2+item.imag**2) for item in W])
    filtered_signal=f_signal.copy()
    filtered_signal[np.where(W<alpha)] = 0
    filtered_signal[np.where(W>beta)] = 0
    filtered_signal=ifft(filtered_signal)
    low_frequencies=f_signal.copy()
    low_frequencies[np.where(W>=alpha)] = 0
    low_frequencies=ifft(low_frequencies)
    high_frequencies=f_signal.copy()
    high_frequencies[np.where(W<=beta)] = 0
    high_frequencies=ifft(high_frequencies)


    plt.subplot(311)
    plt.title('low_frequencies')
    plt.plot(low_frequencies[:N])


    plt.subplot(312)
    plt.title('high_frequencies')
    plt.plot(high_frequencies[:N])

    plt.subplot(313)
    plt.title('PPG Component')
    plt.plot(filtered_signal[:N])

    #display the plots
    plt.subplots_adjust(hspace=1)
    plt.show()
    return filtered_signal

Может кто-нибудь объяснить мне, как правильно использовать scipy.signal.freqz, потому что я все неправильно интерпретировал, я думаю

...