📄 pwtt_aigorithm.c
字号:
}
int* find_Rpeak(double *ecg,int num2) /*find_Rpeak子函数代码!*/
{
int z=num2/sf;
,int i,j,k;
double *der_2,*der_2_min,*threshold2; /*find_Rpeak算法所需指针变量的声明与定义!*/
int *dfr_position;
double *dfr_tenpoint_max;
der_2=(double*)malloc(sizeof(double)*num2);
der_2_min=(double*)malloc(sizeof(double)*z);
threshold2=(double*)malloc(sizeof(double)*z);
/*dfr_position=(int*)malloc(sizeof(int)*z); */
dfr_tenpoint_max=(double*)malloc(sizeof(double)*z);
dfr_position=(int*)malloc(sizeof(int)*z);
,
for(i=0;i<z;i++)
{
der_2_min[i]=0; /*初始化每一子区间的二阶导数的最小值*/
/* der_2[i*sf+0]=?; */ /*初始化每一子区间的0点的二阶导数*/
/* der_2[i*sf+1]=?; */ /*初始化每一子区间的1点的二阶导数*/
for(j=2;j<sf;j++) /*此约定每一子区间的二阶导数从2点开始*/
{
der_2[i*sf+j]=ecg[i*sf+j]-2*ecg[i*sf+j+1]+ecg[i*sf+j+2]; /*求解每一子区间所有点的二阶导数! 验证方法:令i=0,j=2扫描求导表达式,求导表达式系数:(1,-2,1) */
if(der_2_min[i]>der_2[i*sf+j])
der_2_min[i]=der_2[i*sf+j];
}
threshold2[i]=0.6*der_2_min[i]; /*设置threshold2[i]作为探测阈值!*/
}
for(i=0;i<z;i++)
{
for(j=0;j<sf;j++)
{
if(der_2[i*sf+j]>threshold2[i]&&der_2[i*sf+j+1]>threshold2[i]&&threshold2[i]>=der_2[i*sf+j+2]&&threshold2[i]>=der_2[i*sf+j+3])
{
dfr_position[i]=i*sf+j; /*记录阈值周围特定四点中第一个值的位置 dfr_position[i]!*/
for(k=0;k<10;k++) /*求解以位置dfr_position为中心的前后连续十点中所对应函数的最大值!*/
if(dfr_tenpoint_max[i]<ecg[dfr_position[i]+k-5])
{
,,, dfr_tenpoint_max[i]=ecg[dfr_position[i]+k-5]; /*求解以位置dfr_position为中心的前后连续十点中所对应函数的最大值!*/
dfr_position[i]=dfr_position[i]+k-5; /*实时跟踪记录位置 dfr_position[i]的最终有效值!*/
,, }
}
}
}
free(der_2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -