89 lines
2.7 KiB
C
89 lines
2.7 KiB
C
/*
|
||
* @Description:
|
||
* @Version: 1.0
|
||
* @Author: lzc
|
||
* @Date: 2023-07-24 09:32:01
|
||
* @LastEditors: lzc
|
||
* @LastEditTime: 2023-07-24 09:54:10
|
||
*/
|
||
|
||
#include <math.h>
|
||
#include <stdio.h>
|
||
#include "cwt.h"
|
||
|
||
#define N 24000 /* Signal length */
|
||
#define step 0.009775171065493637f
|
||
|
||
int demo(int argc, char *argv[])
|
||
{
|
||
FILE *fh;
|
||
float temp;
|
||
int n = 400; // 每次计算数据长度为400(8s)
|
||
double s[N - 1000]; // 滤波后的测试数据
|
||
double xf_hr[n]; // 心率滤波数据
|
||
double xf_rr[n]; // 呼吸率滤波数据
|
||
float max_sum; // 求最大幅值
|
||
float sum_amp_hr[45]; // 心率幅值求和
|
||
float amp_hr[45][n]; // 小波心率幅值输出
|
||
float sum_amp_rr[12]; // 呼吸率幅值求和
|
||
float amp_rr[12][n]; // 小波呼吸率幅值输出
|
||
fh = fopen("1-24000(孔).txt", "r");
|
||
if (!fh)
|
||
{
|
||
printf("can't open file %s\n", argv[1]);
|
||
return 1;
|
||
}
|
||
for (int i = 0; i < N; i++)
|
||
{
|
||
fscanf(fh, "%f", &temp);
|
||
if (i >= 1000 && i < N)
|
||
{
|
||
s[i - 1000] = temp;
|
||
}
|
||
}
|
||
fclose(fh);
|
||
for (int k = 0; k < (floor((N - 1000) / 200) - 1); k++) // 每400个数据(8s)做一次小波变换
|
||
{
|
||
for (int j = 0; j < n; j++)
|
||
{
|
||
xf_hr[j] = s[(k * 200 + j)];
|
||
}
|
||
/*======================================================================HR*/
|
||
cwt_hr(xf_hr, n, amp_hr); // 心率小波
|
||
int i_max_hr = 0; // 幅值最大值所在行(对应心率频率)
|
||
max_sum = sum_amp_hr[0];
|
||
for (int i = 0; i < 45; i++) // 对每行幅值数据求和
|
||
{
|
||
sum_amp_hr[i] = 0;
|
||
for (int j = 0; j < n; j++)
|
||
{
|
||
sum_amp_hr[i] += amp_hr[i][j];
|
||
}
|
||
if (max_sum < sum_amp_hr[i])
|
||
{
|
||
max_sum = sum_amp_hr[i];
|
||
i_max_hr = i;
|
||
}
|
||
}
|
||
printf("i_max: %d %.6f %.6f\r\n", 4 * (k + 1), (2.294921 - (i_max_hr + 13) * 0.024414), max_sum);
|
||
/*======================================================================RR*/
|
||
cwt_rr(xf_hr, n, amp_rr); // 呼吸率小波
|
||
int i_max_rr = 0; // 幅值最大值所在行(对应呼吸率频率)
|
||
max_sum = sum_amp_rr[0];
|
||
for (int i = 0; i < 12; i++) // 对每行幅值数据求和
|
||
{
|
||
sum_amp_rr[i] = 0;
|
||
for (int j = 0; j < n; j++)
|
||
{
|
||
sum_amp_rr[i] += amp_rr[i][j];
|
||
}
|
||
if (max_sum < sum_amp_rr[i])
|
||
{
|
||
max_sum = sum_amp_rr[i];
|
||
i_max_rr = i;
|
||
}
|
||
}
|
||
}
|
||
return 0;
|
||
}
|