📄 cmpt_multilead_mfr_int_backup4.c
字号:
#include "multilead_QRS.h"
void cmpt_MultiLead_Recognization_MFR(INT32 *QRS, LONG32 dataxyz[][COL],INT32 sfreq0,INT32 *QRS_P[][COL])
{
INT32 i,j,flag,win10ms,kk,Ind,jj,nn,t1,t2,win100ms,win50ms;
LONG32 rr = (sfreq0 * 1024+500)/1000;
INT32 sslen = (INT32) (5 * rr)>>10;
INT32 datalen = DATALEN - sslen;
INT32 qrsT[200];
LONG32 Mmax = 0;
LONG32 Mmax0,max1,max2,rm,tempr,newM5,M,F,R,min1;
LONG32 temp = 0;
LONG32 sfreq = (LONG32)sfreq0;
LONG32 modrate = (LONG32)(250*1024/sfreq);
LONG32 MM[5],RR[5];
LONG32 st[DATALEN-2];
Combined_Adaptive_Threthold mfr[DATALEN-2];
win10ms = 10*rr+512>>10;
win100ms= 100*rr+512>>10;
win50ms = 50*rr+512>>10;
Ind = 0;
nn = 0;
rm = 0;
/*根据已知的3导数据计算空间速率st*/
for(i=0;i<sslen;i++)
st[i] = 0;
for(i = sslen;i<datalen;i++)
{
temp = 0;
for(j=0;j<COL;j++)
temp += abs(dataxyz[i+sslen][j] - dataxyz[i-sslen][j]);
st[i] = temp/COL;
}
for(i=0;i<5;i++)
{
Mmax0 = 0;
for(j=0;j<sfreq;j++)
Mmax0 = (Mmax0 > st[i*sfreq0+j])? Mmax0:st[i*sfreq0+j];
Mmax += Mmax0;
}
// M = 6*Mmax/50;
M = 3*Mmax/25;
for(i=0;i<5;i++)
{
MM[i] = M;
RR[i] = 0;
}
R = 0;
temp = 0;
for(i=0;i<(350*rr+512>>10);i++)
{
temp += st[i];
}
F = temp/(350*rr+512>>10);
i = 0;
j = 0;
flag = 0;
QRS[0] = 0;
while(i<datalen)
{
temp = 0;
if(i >= QRS[j] + (200 * rr+512>>10)-1 && i <= QRS[j] + (1200 * rr+512>>10))
{
temp = M /sfreq;
// M = M - (INT32)(4 * temp+5)/10;
M = M - ((INT32)((4 * temp+5)*51)>>9);
}
else
temp = 0;
mfr[i].m = M;
if(i > (350*rr+512>>10) - 1)
{
if(flag == 1)
{
for(kk=0;kk<(200*rr+512>>10)-1;kk++)
{
max1 = max2 = 0;
Ind = QRS[j] + kk + 1;
if(Ind > 350*rr+512>>10)
{
for(jj=Ind-(50*rr+512>>10);jj<=Ind;jj++)
max1 = (st[jj] > max1)? st[jj]:max1;
for(jj=Ind-(350*rr+512>>10);jj<=Ind-(300*rr+512>>10);jj++)
max2 = (st[jj] > max2)? st[jj]:max2;
F += ((max1-max2)/150);
}
mfr[Ind].f = F;
}
flag = 0;
i = Ind + 1;
continue;
}
else
{
max1 = max2 = 0;
for(jj=i-(50*rr+512>>10);jj<=i;jj++)
max1 = (st[jj] > max1)? st[jj]:max1;
for(jj=i-(350*rr+512>>10);jj<=i-(300*rr+512>>10);jj++)
max2 = (st[jj] > max2)? st[jj]:max2;
F += ((max1-max2)/150);
mfr[i].f = F;
}
}
if(j >= 2)
{
for(nn=1;nn<j;nn++)
{
qrsT[nn] = QRS[nn+1] - QRS[nn] + 1;
}
if(j < 7)
{
for(jj=7-j;jj<5;jj++)
RR[jj] = qrsT[jj+j-5];
for(jj=0;jj<7-j;jj++)
RR[jj] = qrsT[1];
}
else
{
for(jj=0;jj<5;jj++)
RR[jj] = qrsT[j-5+jj];
}
temp = 0;
for(jj=0;jj<5;jj++)
temp += RR[jj];
// rm = (INT32)((temp*2 + 5)/10);
rm = (INT32)((temp*2 + 5)*51>>9);
// if(i-QRS[j] < (INT32)((rm*4 + 3)/6))
if(i-QRS[j] < (INT32)((rm*4 + 3)*43>>8))
R = 0;
else
if(i-QRS[j] <= rm)
{
// tempr = M*rr/sfreq;
tempr = M/sfreq;
// R = R-tempr*2/7;
R = R-(tempr*37>>7);
}
}
//漏检判断-Algorithm 2---------在以后加上////////////////////////////////////////////////////
if(nn>1)
{
t1 = qrsT[nn-2];
t2 = qrsT[nn-1];
// if((t1 > rm || rm-t1 < 3*rm/10) && abs(t2-2*rm) < 6*rm/10)
if((t1 > rm || rm-t1 < (3*rm*51>>9)) && abs(t2-2*rm) < (6*rm*51>>9))
{
for(kk=QRS[nn-1]+(200*rr+512>>10);kk<=QRS[nn]-(200*rr+512>>10);kk++)
{
min1 = 0x7FFFFFFF;
temp = 0;
for(jj=0;jj<3;jj++)
{
temp = abs(dataxyz[kk][jj] - dataxyz[kk-win10ms][jj]);
min1 = (min1<temp)? min1:temp;
}
temp = 0;
for(jj=0;jj<5;jj++)
temp += MM[jj];
// if(min1 > 20*ZOOM_OUT && st[kk] > temp/15)
if(min1 > 20*ZOOM_OUT && st[kk] > (temp*17>>8))
{
// mfr[kk].mfr_sum = 8*st[kk]/10;
mfr[kk].mfr_sum = (st[kk]*408>>9);
j++;
QRS[j] = QRS[j-1];
QRS[j-1] = kk;
break;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
mfr[i].f = F;
mfr[i].r = R;
// mfr[i].mfr_sum = mfr[i].m + mfr[i].f * modrate + mfr[i].r;
mfr[i].mfr_sum = M + ((INT32)(F * modrate)>>10) + R;
// mfr[i].mfr_sum = M + F * modrate/1024 + R;
if(st[i] >= mfr[i].mfr_sum)
{
j++;
QRS[j] = i;
kk = (datalen < i+(200*rr+512>>10))? datalen:(i+(200*rr+512>>10));
max1 = 0;
for(jj=i;jj<kk;jj++)
max1 = (max1>st[jj])? max1:st[jj];
// newM5 = 3*max1/5;
newM5 = (max1*615)>>10; //此处有可能会溢出
// newM5 = (newM5>15*MM[4]/10)? 11*MM[4]/10:newM5;
newM5 = (newM5>(MM[4]*561)>>9)? ((MM[4]*561)>>9):newM5;
for(jj=0;jj<4;jj++)
MM[jj] = MM[jj+1];
MM[4] = newM5;
temp = 0;
for(jj=0;jj<5;jj++)
temp += MM[jj];
// M = temp/5;
M = temp*205>>10; //此处有可能会溢出
R = 0;
mfr[i].mfr_sum = M + (((INT32)(F * modrate))>>10) + R;
for(jj = i;jj<=kk;jj++)
{
mfr[jj].f = F;
mfr[jj].r = R;
mfr[jj].m = M;
mfr[jj].mfr_sum = mfr[i].mfr_sum;
}
i = kk;
flag = 1;
continue;
}
flag = 0;
i++;
}
/*确定QRS尖端位置*/
/*
i = 1;
j = 0;
while(QRS[i] >= 0)
{
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -