Generate K randomly rearranged ECG signals from the extracted beats, where K can be any large integer.

1 回表示 (過去 30 日間)
Mibang
Mibang 2024 年 10 月 16 日
編集済み: Mibang 2024 年 10 月 17 日
ECG Signal Information from "data_116_N_V_R.mat":
load data_116_N_V_R.mat
openfig(illustration.fig)
whos -file data_116_N_V_R.mat
Name Size Bytes Class Attributes ECGsignal 649783x1 5198264 double RRinterval 2410x1 19280 double Rpeak 2411x1 19288 double annotation - 2779 categorical
- ECGsignal: MITDB ECG signal sampled at 360 Hz.
- Rpeak: Locations of R-peaks in the ECG signal, provided as sample indices.
- RRinterval: Intervals in samples between consecutive R-peaks based on the Rpeak array.
- annotation: Beat-type annotation centered around each R-peak. In this test data, each beat is labeled as either "N" or "V," but it can represent various other types.
Beat Definition:
Please, refer to the attached figure (illustration.fig).
openfig('illustration.fig');
Each beat is defined by two portions extending around a central R-peak:
- Left portion: 40% of the preceding RR interval, to the left of the R-peak.
- Right portion: 60% of the succeeding RR interval, to the right of the R-peak.
I want to segment every beat and then randomly rearrange segmented beats to form new ECG signals.
Discontinuity Adjustment for Rearranged Beats:
Due to the random reordering, there will be discontinuities between consecutive beats. To minimize these:
- Adjust the first sample of each right-side beat by +1 or -1 relative to the last sample of the preceding left-side beat.
- +1 adjustment if the second sample of the right-side beat is greater than the first, then shift the rest smaples of the beat accordingly.
- -1 adjustment if the second sample of the right-side beat is smaller than the first, then shift the rest smaples of the beat accordingly.
Goal:
- Generate K randomly rearranged ECG signals from the extracted beats, where K can be any large integer (let's say e.g., 10).
- I want to have updated RR-intervals (RRinterval), R-peaks (Rpeak), and annotations in accordance with newly generated ECG signals.
  7 件のコメント
Voss
Voss 2024 年 10 月 17 日
Have you segmented the individual beats yet?
Mibang
Mibang 2024 年 10 月 17 日
No, I am working on it and got only sudo code yet.

サインインしてコメントする。

回答 (1 件)

Image Analyst
Image Analyst 2024 年 10 月 17 日
Because each segment may be a different number of samples (elements) you will have to first go through the signal and store the individual segments in a cell array, say it's called allBeats.
Then you can shuffle the order
randomOrder = randperm(numel(allBeats))
allBeats = allBeats(randomOrder);
Then you can concatenate all the cells together into a single double array.
allBeats = {[1,222,3], [40,55,66,77]} % Sample data with y-values of 2 beats
allBeats = 1x2 cell array
{[1 222 3]} {[40 55 66 77]}
signal = cell2mat(allBeats) % Create single vector signal.
signal = 1×7
1 222 3 40 55 66 77
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
  1 件のコメント
Mibang
Mibang 2024 年 10 月 17 日
編集済み: Mibang 2024 年 10 月 17 日
You also need to find updated RR-interval and R-peaks of new signals. And "annotation" updated as well.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMeasurements and Feature Extraction についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by