Data Segmentation by proportion

2 次查看(过去 30 天)
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

采纳的回答

Mathieu NOE
Mathieu NOE 2020-12-8
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 个评论
Theodora Chivu
Theodora Chivu 2020-12-10
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

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by