def Generating_WCs(Decomp, QMF_name, order): ''' Intro - 각 신호에 대해서, 미리 정의된 L, QMF 를 바탕으로 Wavelet Coefficients를 뽑아낸다. - 이전 실험에서 우리는 모든 WBFs에 대해서 같은 WCs가 특징선을 잡아낸다는 것을 밝혔다. - 따라서, 여기서는 'db' '8' 에 대해서 실험을 실행한다. INPUT - Decomposition Level - QMF - ORDER OUTPUT - WCs 들이 적혀있는 CSV 파일 - No return value ''' qmf = wavelet.qmf(QMF_name, order) L = 13 - Decomp HE_record = [] MI_record = [] # ECG_HE의 각 row 별로 신호를 읽어낸다. for idx in range(37): mysignal = data_call("ECG_HE", idx, 0) wc = wavelet.FWT_PO(mysignal, L, qmf) Core_WCs = wc[128:256] Core_WCs.insert(0, idx) # List의 첫번째 elements에 신호의 번호매김 HE_record.append(Core_WCs) # Healthy 신호를 HE.csv 파일로 저장 HE_csv = open('HE.csv', 'wb') wr = csv.writer(HE_csv, quoting=csv.QUOTE_ALL) for x in HE_record: wr.writerow(x) # ECG_HE의 각 row 별로 신호를 읽어낸다. for idx in range(208): mysignal = data_call("ECG_MI", idx, 0) wc = wavelet.FWT_PO(mysignal, L, qmf) Core_WCs = wc[128:256] Core_WCs.insert(0, idx) # List의 첫번째 elements에 신호의 번호매김 HE_record.append(Core_WCs) # ECG_MI의 각 row 별로 신호를 읽어낸다. for idx in range(208): mysignal = data_call("ECG_MI", idx, 0) wc = wavelet.FWT_PO(mysignal, L, qmf) # 0~127 (1~128) 번째까지는 Scaling coefficients (128개) # 128 ~ 255 (129~256) 까지는 Feature Core_wc = wc[128:256] Core_wc.insert(0, idx) MI_record.append(Core_wc) # MI 신호를 HE.csv 파일로 저장 MI_csv = open('MI.csv', 'wb') wr = csv.writer(MI_csv, quoting=csv.QUOTE_ALL) for x in MI_record: wr.writerow(x)
def mydata(): from Module.data_call import data_call from Module.bandpass import butter_bandpass_filter testnum = 0 mysignal = data_call("PPG_KW_long", testnum, 0) return testnum, mysignal
def mydata(): from Module.data_call import data_call from Module.bandpass import butter_bandpass_filter testnum = 1 mysignal = data_call("PPG_KW_long", testnum, 0) #mysignal = butter_bandpass_filter(mysignal,0.125,10,1000) return testnum, mysignal
def mydata(): from Module.data_call import data_call from Module.bandpass import butter_bandpass_filter testnum = 2 mysignal = data_call("PPG_KW_long", testnum, 0) #mysignal = butter_bandpass_filter(mysignal,0.125,10,1000) return testnum, mysignal
def __init__(self, Str_DataName, Int_DataNum,Int_Buffer ): self.FltSamplingRate = 125.0 self.Str_DataName = Str_DataName self.Int_DataNum = Int_DataNum self.Int_Buffer = Int_Buffer self.Array_PPG_Long = data_call(data_name=self.Str_DataName,data_num=self.Int_DataNum, wanted_length=0) self.Array_TimeDomain_Long = np.linspace(0, len(self.Array_PPG_Long) / self.FltSamplingRate ,len(self.Array_PPG_Long) ) ## CONTROL VARIABLE ## Int_Start = 40 Int_End = 43 Int_CutTime = 60 self.Int_CutIdx = int(Int_CutTime * self.FltSamplingRate) self.Array_PPG_Long = self.Array_PPG_Long[: self.Int_CutIdx ] self.Array_PPG_Long = self.BandPassFilter(Array_Signal=self.Array_PPG_Long) self.Array_TimeDomain_Long = self.Array_TimeDomain_Long[:int(self.FltSamplingRate) * Int_CutTime] self.Array_PPG = self.Array_PPG_Long[ Int_Start *int(self.FltSamplingRate) :Int_End * int(self.FltSamplingRate)] self.Array_TimeDomain = self.Array_TimeDomain_Long[Int_Start *int(self.FltSamplingRate) :Int_End * int(self.FltSamplingRate)]
if __name__ == "__main__": # Str_DataName = "PPG_KW_long" # Str_DataName = "PPG_Walk" Str_DataName = "PPG_Label" Int_DataNum = 2 Flt_SamplingRate = 125 Flt_highCut = 11 Flt_LowCut = 0.5 Int_OneMinCut = 3600*Flt_SamplingRate PLOT = False # PLOT = True Array_PPG_Long = data_call(data_name=Str_DataName,data_num=Int_DataNum, wanted_length=0) Array_PPG_Long = np.array(Array_PPG_Long) Array_Time_Long = np.linspace(0,len(Array_PPG_Long)/Flt_SamplingRate,len(Array_PPG_Long)) Array_PPG = Array_PPG_Long[:Int_OneMinCut] Array_Time = Array_Time_Long[:Int_OneMinCut] # Object_LowPassFilter = BandPassFilter(Array_Signal=Array_PPG_Long,Flt_SamplingRate=Flt_SamplingRate, Flt_LowCut=Flt_LowCut, Flt_HighCut=Flt_highCut) # Array_PPG_Long = Object_LowPassFilter.butter_bandpass_filter() Object_SSF = SSFMethod(Array_Signal=Array_PPG, Array_Time=Array_Time) Dict_PeakIdxLoc_PeakAmp, Array_Threshold, List_MaxIdx = Object_SSF.Conduct_PeakDetect() print Object_SSF.Check_Result(Str_DataName=Str_DataName, Int_DataNum=Int_DataNum, List_PeakIdx=List_MaxIdx) if PLOT: plt.figure()
Int_EndSec = 13 # No MA Str_DataName_NoMA = "PPG_KW_long" Int_DataNum_NoMA = 2 # Weak MA Str_DataName_WMA = "PPG_Walk" Int_DataNum_WMA = 3 # Strong MA Str_DataName_SMA = "PPG_Walk" Int_DataNum_SMA = 2 Int_CutMin = Int_SampRate * 60 Array_PPGData_NoMA = data_call(data_name=Str_DataName_NoMA, data_num=Int_DataNum_NoMA, wanted_length=0)[:Int_CutMin] Array_PPGData_WMA = data_call(data_name=Str_DataName_WMA, data_num=Int_DataNum_WMA, wanted_length=0)[:Int_CutMin] Array_PPGData_SMA = data_call(data_name=Str_DataName_SMA, data_num=Int_DataNum_SMA, wanted_length=0)[:Int_CutMin] Array_Time = np.linspace(0, len(Array_PPGData_NoMA)/Int_SampRate, len(Array_PPGData_NoMA)) # PLOT matplotlib.rcParams.update({'font.size': 15}) f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True) ax1.plot(Array_Time, Array_PPGData_NoMA) ax2.plot(Array_Time, Array_PPGData_WMA) ax3.plot(Array_Time, Array_PPGData_SMA) plt.xlabel("Time (Sec)", fontsize=20) plt.show()