2016-12-07 4 views
1

다음과 같은 CSV 파일에 전기 생리학 데이터가 들어 있습니다. 세 번째 열은 소프트웨어를 사용하여 필터링 된 데이터를 포함합니다. 두 번째 열은 필터링되지 않은 데이터를 포함합니다.시계열 데이터의 고주파 필터링 - 파이썬

data = pd.read_csv("trial_filtered.csv") 
datad = np.asarray(data) 

x1 = datad[:100,0] 
y1 = datad[:100,1] 
y2 = datad[:100, 2] 

이 데이터를 플롯하고 비 필터링에서 필터링 된 것과 비교하고 싶습니다.

plt.subplot(2, 1, 1) 
plt.plot(x1, y1, 'yo-') 
plt.title('BB565 - OD')  
plt.ylabel('raw signal (voltage)') 

plt.subplot(2, 1, 2) 
plt.plot(x1, y2, 'r.-') 
plt.xlabel('time (milliseconds)') 
plt.ylabel('filtered data') 

plt.show() 

또한 두 번째 열에 대해 40Hz 이상의 모든 것을 필터링하고 추가 열을 만들고 싶습니다.

다음을 시도했지만 계속 붙어 있습니다. nitime 모듈을 사용하지 않고도 내 시계열 데이터에서 고주파수를 필터링 할 수있는 다른 방법이 있습니까? 당신은 하나의 그래프에있는 모든 계열을 표시하려면

y3 = [] 
ts_y1 = nitime.TimeSeries(y1, time_unit='ms', sampling_interval=1.0) 
#let's take out everything above 30 hertz 
filter = nitime.analysis.FilterAnalyzer(ts_y1, lb=0., ub=40.) 
filtered_ts = filter.fir.datad 
y3.append(filtered_ts.copy()) 

답변

1

, 당신은) (plt.plot을 사용할 수 있습니다 는 , 연속적으로 호출하고 마지막으로 plt.show()로 종료하는 것은,이 모두를 둘 것이다 그것들을 하나의 그림으로 만든다. 두 번째 질문에 대한

, 당신은 "하드"필터를 원한다면, 당신은 다음과 같이 FFT 모듈을 사용하여 시도 할 수 있습니다 :

  1. FFT 신호를하고, 30Hz로의 해당 각 주파수를 파악,

  2. 빈을 찾은 다음 해당 빈 위에있는 빈을 모두 0으로 설정하십시오. 이 작업을 수행하기 전에 fftshift를 사용해야합니다.

  3. 로우 패스 필터링 신호가 있습니다. 여기에 설명하고 업로드 할 작은 스크립트를 작성하겠습니다.

이 정보가 도움이 되었기를 바랍니다.