Filter löschen
Filter löschen

Data Segmentation by proportion

2 Ansichten (letzte 30 Tage)
Theodora Chivu
Theodora Chivu am 3 Dez. 2020
Kommentiert: Theodora Chivu am 10 Dez. 2020
Hi. I want to segmentate an ECG signal recorded for 10 h from a database. Every signal have about 9 milion sample with a sample rate of 250 Hz, so about 3000 seconds. I want to segmentate this signal in time domain so I can have 5 beats in every signal. Every beat is 1.2 s so every signal segmentated will be 6 s and about 1500 samples. I need this for feature extraction and a cnn clasification. How can i extract every signal. I first throught i need to find every QRS complex, but in some cases the P wave will be higher in amplitude than R and findpeaks will get that as a peak. I tried getting every signal in an matrice but it exceeds maximum array size and it can be difficult for further processing.
[signal,Fs,tm]=rdsamp('08455'); %recording name have 2 leads
sig = signal(:,1); %we will wok on the first one
s= 9205760; %samples
fs = 250; %sample rate
t = floor(s/ts); %time for the recording
t_i = 0.8; %initial time for the inteval 2/3 of first 1.2 s
i = floor(t/6); %nr of signals
for j =1:i
t_f = t_i +6; %final time for the interval
m(s,j) = sig((t_i*fs):(t_f*fs)); %I wanted to get every signal in a matrice in which every column will be a signal
t_i = (t_f*ts +1)/ts; %initial time for further intervals
end

Akzeptierte Antwort

Mathieu NOE
Mathieu NOE am 8 Dez. 2020
hello
you can use the attached function to detect positive and negative slope threshold crossing points
this will give you the time index of the signal individual blocks
I could try it inside your code if you could share some signal data
% demo code
n=100;
x=(1:n)/n;
y= 0.5 + sin(20*x)+ 0.02*randn(1,n);
threshold = 1; %
[ind_pos,t0_pos,s0_pos,ind_neg,t0_neg,s0_neg]= crossing_V7(y,x,threshold,'linear'); % positive slope zero crossing points
plot(x,y,'b',t0_pos,s0_pos,'+r',t0_neg,s0_neg,'+g','linewidth',2,'markersize',12);grid
legend('signal','positive slope crossing points','negative slope crossing points');
  1 Kommentar
Theodora Chivu
Theodora Chivu am 10 Dez. 2020
Thank youfor your answer, but i didn't wanted to plot the line that divide the graph but store the graph divided. I ended up doing a matrix with 30000 signals x 300 samples.
y = zeros();
samp =9205760;
for i=1:a-1
poz=(1.2/c);
for j=1:poz
if i==1
poz1=1;
else poz1=poz*(i-1);
end
for l=1:d
if adn(l,1)>=poz1 && adn(l,1)<=(poz*i)
y(i,1)=1;
end
end
y(i,j+1) = s((poz*(i-1)+j),:);
end
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by