Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
    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()
Esempio n. 8
0
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)
Esempio n. 9
0
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()