📄 pwtt_aigorithm.c
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define num 2000 /* 宏定义采样点总数num为500! */
#define sf 1000 /* 宏定义采样频率sf为250赫兹,sf=sampling frequency! */
int* find_Qtrough(double *ppg,int num1) /* find_Qtrough子函数代码!*/
{
int z=num1/sf;
int i,j,k;
double *der_1,*der_1_max,*threshold1; /* find_Qtrough算法所需指针变量的声明与定义!*/
int *dfq_position;
double *dfq_tenpoint_max;
der_1=(double*)malloc(sizeof(double)*num1);
der_1_max=(double*)malloc(sizeof(double)*z);
threshold1=(double*)malloc(sizeof(double)*z);
/*dfq_position=(int*)malloc(sizeof(int)*z); */
dfq_tenpoint_max=(double*)malloc(sizeof(double)*z);
dfq_position=(int*)malloc(sizeof(int)*z);
for(i=0;i<z;i++)
{
der_1_max[i]=0;
/* der_1[i*sf+0]=?; */ /* 初始化每一子区间的0点的一阶导数! */
for(j=1;j<sf;j++) /* 此约定每一子区间的一阶导数从1点开始! */
{
der_1[i*sf+j]=ppg[i*sf+j+1]-ppg[i*sf+j]; /* 求解每一子区间所有点的一阶导数!*/
if(der_1_max[i]<der_1[i*sf+j]) /* 求解每一子区间一阶导数的最大值!*/
der_1_max[i]=der_1[i*sf+j];
}
threshold1[i]=0.6*der_1_max[i]; /*设置threshold1[i]作为探测阈值!*/
}
for(i=0;i<z;i++)
{
for(j=1;j<sf;j++)
{
if(der_1[i*sf+j]>threshold1[i]&&der_1[i*sf+j+1]>threshold1[i]&&threshold1[i]>=der_1[i*sf+j+2]&&threshold1[i]>=der_1[i*sf+j+3])
{
dfq_position[i]=i*sf+j; /*记录阈值周围特定四点中第一个值的位置 dfq_position[i]!*/
for(k=0;k<10;k++) /*求解以位置dfq_position为中心的前后连续十点中所对应函数的最大值!*/
if(dfq_tenpoint_max[i]<ppg[dfq_position[i]+k-5])
{
dfq_tenpoint_max[i]=ppg[dfq_position[i]+k-5]; /*求解以位置dfq_position为中心的前后连续十点中所对应函数的最大值!*/
dfq_position[i]=dfq_position[i]+k-5; /*实时跟踪记录位置 dfq_position[i]的最终有效值!*/
}
}
}
}
return dfq_position;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -