Generate K randomly rearranged ECG signals from the extracted beats, where K can be any large integer.
6 次查看(过去 30 天)
显示 更早的评论
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
- 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 个评论
回答(1 个)
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.
See the FAQ: What is a cell array
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
signal = cell2mat(allBeats) % Create single vector signal.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 ECG / EKG 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!