[PYTHON] 파이썬에서 fft bandpass 필터
PYTHON파이썬에서 fft bandpass 필터
내가 시도하는 것은 fft로 데이터를 필터링하는 것입니다. 나는 1d- 배열로서 500Hz로 녹음 된 잡음있는 신호를 가지고있다. 고주파수는 20Hz로, 저주파는 10Hz로 차단되어야합니다. 내가 시도한 것은 :
fft=scipy.fft(signal)
bp=fft[:]
for i in range(len(bp)):
if not 10<i<20:
bp[i]=0
ibp=scipy.ifft(bp)
내가 얻는 것은 복소수입니다. 그래서 무언가가 틀려야합니다. 뭐? 코드를 수정하려면 어떻게해야합니까?
해결법
-
==============================
1.bp 단위의 크기가 반드시 Hz 일 필요는 없지만 신호의 샘플링 빈도에 따라 다르기 때문에 scipy.fftpack.fftfreq를 사용하여 변환해야합니다. 또한 신호가 진짜라면 scipy.fftpack.rfft를 사용해야합니다. 다음은 지정된 양보다 적은 모든 주파수를 걸러내는 최소한의 작업 예제입니다.
bp 단위의 크기가 반드시 Hz 일 필요는 없지만 신호의 샘플링 빈도에 따라 다르기 때문에 scipy.fftpack.fftfreq를 사용하여 변환해야합니다. 또한 신호가 진짜라면 scipy.fftpack.rfft를 사용해야합니다. 다음은 지정된 양보다 적은 모든 주파수를 걸러내는 최소한의 작업 예제입니다.
import numpy as np from scipy.fftpack import rfft, irfft, fftfreq time = np.linspace(0,10,2000) signal = np.cos(5*np.pi*time) + np.cos(7*np.pi*time) W = fftfreq(signal.size, d=time[1]-time[0]) f_signal = rfft(signal) # If our original signal time was in seconds, this is now in Hz cut_f_signal = f_signal.copy() cut_f_signal[(W<6)] = 0 cut_signal = irfft(cut_f_signal)
우리는 실수와 푸리에 공간에서 신호의 진화를 플로팅 할 수 있습니다 :
import pylab as plt plt.subplot(221) plt.plot(time,signal) plt.subplot(222) plt.plot(W,f_signal) plt.xlim(0,10) plt.subplot(223) plt.plot(W,cut_f_signal) plt.xlim(0,10) plt.subplot(224) plt.plot(time,cut_signal) plt.show()
-
==============================
2.여기서 뭘 하려는지 근본적인 결함이 있습니다. 주파수 영역에서 직사각형 창을 적용하면 sinc 함수로 컨벌루션 된 시간 영역 신호가 생성됩니다. 즉, 주파수 영역에서 도입 된 단계 변경으로 인해 시간 영역 신호에서 많은 양의 "링잉"이 발생합니다. 이러한 종류의 주파수 영역 필터링을 수행하는 적절한 방법은 주파수 영역에서 적절한 창 함수를 적용하는 것입니다. 좋은 입문 DSP 책은 이것을 다루어야합니다.
여기서 뭘 하려는지 근본적인 결함이 있습니다. 주파수 영역에서 직사각형 창을 적용하면 sinc 함수로 컨벌루션 된 시간 영역 신호가 생성됩니다. 즉, 주파수 영역에서 도입 된 단계 변경으로 인해 시간 영역 신호에서 많은 양의 "링잉"이 발생합니다. 이러한 종류의 주파수 영역 필터링을 수행하는 적절한 방법은 주파수 영역에서 적절한 창 함수를 적용하는 것입니다. 좋은 입문 DSP 책은 이것을 다루어야합니다.
from https://stackoverflow.com/questions/19122157/fft-bandpass-filter-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 내부 클래스 : 생성시 외부 클래스 객체를 얻으려면 어떻게해야합니까? (0) | 2018.11.18 |
---|---|
[PYTHON] pandas에 rolling_apply를 사용하는 Python 사용자 정의 함수 (0) | 2018.11.18 |
[PYTHON] utf8 문제가있는 파이썬 정규식 (0) | 2018.11.18 |
[PYTHON] sparse_softmax_cross_entropy_with_logits를 사용하여 tensorflow에서 가중 크로스 엔트로피 손실을 구현하려면 어떻게해야합니까? (0) | 2018.11.18 |
[PYTHON] 파이썬 서브 프로세스의 파일 기술자 3에 쓴다. 객체를 열어 라. (0) | 2018.11.18 |