Skip to content

Commit 0f1a090

Browse files
committed
hrv - wip
1 parent 1d60ad6 commit 0f1a090

File tree

1 file changed

+45
-26
lines changed

1 file changed

+45
-26
lines changed

src/data_analysis/heart_rate_variability/exploring_heart_rate_variability.clj

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,23 @@
9595
hop-size 8
9696
n-windows (int (/ (- n window-size)
9797
hop-size))
98-
spectrograms (->> (range n-windows)
99-
(pfor/pmap (fn [w]
100-
(let [start-idx (* w hop-size)
101-
window (-> resampled-ppi
102-
:ppi
103-
(dtype/sub-buffer start-idx window-size))
104-
window-standardized (stats/standardize window)
98+
windows (->> (range n-windows)
99+
(map (fn [w]
100+
[w (let [start-idx (* w hop-size)]
101+
(-> resampled-ppi
102+
:ppi
103+
(dtype/sub-buffer start-idx window-size)))])))
104+
rmssds (->> windows
105+
(map (fn [[w window]]
106+
(-> window
107+
(tcc/shift 1)
108+
(tcc/- window)
109+
tcc/sq
110+
tcc/mean
111+
tcc/sqrt))))
112+
spectrograms (->> windows
113+
(pfor/pmap (fn [[w window]]
114+
(let [window-standardized (stats/standardize window)
105115
window-filtered (.bandPassFilter bw
106116
(double-array window-standardized)
107117
4
@@ -116,6 +126,7 @@
116126
vec)]
117127
{:sampling-rate sampling-rate
118128
:resampled-ppi resampled-ppi
129+
:rmssds rmssds
119130
:spectrograms spectrograms})))
120131

121132

@@ -145,6 +156,7 @@
145156

146157
(defn plot-with-measures [{:keys [sampling-rate
147158
resampled-ppi
159+
rmssds
148160
spectrograms]}]
149161
(when spectrograms
150162
(let [n (-> spectrograms first :magnitude count)
@@ -160,6 +172,14 @@
160172
(when (:label resampled-ppi)
161173
{:=color :label
162174
:=color-type :nominal}))))
175+
:rmssd (-> {:t times
176+
:rmssd rmssds}
177+
tc/dataset
178+
(plotly/base {:=height 300 :=width 700})
179+
(plotly/layer-line {:=x :t
180+
:=y :rmssd})
181+
plotly/plot
182+
(assoc-in [:layout :yaxis :range] [0 0.1]))
163183
:power-spectrum (kind/plotly
164184
{:data [{:x times
165185
:y freqs
@@ -340,17 +360,17 @@
340360

341361
(def WESAD-spectrograms
342362
(memoize
343-
(fn [{:keys [ppi-params spectrogram-params]}]
363+
(fn [{:keys [ppi-params measures-params]}]
344364
(-> ppi-params
345365
extract-ppi
346-
(compute-measures spectrogram-params)))))
366+
(compute-measures measures-params)))))
347367

348368

349369
(delay
350370
(-> {:ppi-params {:subject-id 5
351371
:row-interval [0 1000000]}
352-
:spectrogram-params {:sampling-rate 10
353-
:window-size-in-sec 120}}
372+
:measures-params {:sampling-rate 10
373+
:window-size-in-sec 120}}
354374
WESAD-spectrograms
355375
plot-with-measures))
356376

@@ -382,18 +402,17 @@
382402

383403
(delay
384404
(let [subject 5]
385-
(-> (label-intervals subject)
386-
(tc/select-rows #(not= (:label %) :ignore))
387-
#_(tc/select-rows #(= (:label %) :meditation))
388-
(tc/rows :as-maps)
389-
(->> (map (fn [{:keys [offset n label]}]
390-
[label
391-
(try (-> {:ppi-params {:subject-id subject
392-
:row-interval [offset (+ offset n)]}
393-
:spectrogram-params {:sampling-rate 10
394-
:window-size-in-sec 120}}
395-
WESAD-spectrograms
396-
plot-with-measures
397-
;; :LF-to-HF-series
398-
)
399-
(catch Exception e 'unavailable))]))))))
405+
(kind/fragment
406+
(-> (label-intervals subject)
407+
(tc/select-rows #(not= (:label %) :ignore))
408+
#_(tc/select-rows #(= (:label %) :meditation))
409+
(tc/rows :as-maps)
410+
(->> (mapcat (fn [{:keys [offset n label]}]
411+
[label
412+
(try (-> {:ppi-params {:subject-id subject
413+
:row-interval [offset (+ offset n)]}
414+
:measures-params {:sampling-rate 10
415+
:window-size-in-sec 120}}
416+
WESAD-spectrograms
417+
plot-with-measures)
418+
(catch Exception e 'unavailable))])))))))

0 commit comments

Comments
 (0)