/* * @Description: * @Version: 1.0 * @Author: lzc * @Date: 2023-07-24 09:32:01 * @LastEditors: lzc * @LastEditTime: 2023-07-24 09:54:10 */ #include #include #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; }