2020电赛A题(心电波形,lcd显示,心率计算,iir滤波处理)

STM32心电波形显示 心率计算

1.硬件部分
心率信号收集的硬件部分采用了ADS1292模块(淘宝就有卖),这个芯片也是TI的要求使用芯片。

除了ADS1292的另外一块芯片的作用是电源隔离
购买模块的时候 商家会给ADS1292收集心电信号的例程,在这个基础上改写

2.心电仪产生的心电信号收集与显示

520520520
这是心电仪信号(不是人体信号)并且尚未进行滤波处理的显示

3.IIR滤波处理 与 简单平滑处理的效果展示

IIR效果在这里插入图片描述
IIR代码实现

假如有一个500点的数组 那么直接 for(i=0;i<500;i++) 滤波后的数据[i]=filterloop(滤波钱的数据[i]);

float filterloop(float baroOffset);
float xv[NZEROS+1], yv[NPOLES+1];
float filterloop(float baroOffset)
{       xv[0] = xv[1]; 
       xv[1] = xv[2]; 
        xv[2] = baroOffset/ 0.3513235 ;
        yv[0] = yv[1]; yv[1] = yv[2]; 
        yv[2] =   ( -1 * xv[0] + xv[2]) + ( -0.29735293* yv[0]) + (  +1.288421 * yv[1]);
       return yv[2]; 
}

系数是要自己设计的 根据需要的截止频率
请看这个https://blog.csdn.net/tap880507/article/details/78930469
这是别人写的

简单平滑滤波处理

在心电仪信号的情况下看样子和IIR差不多。但是如果是人体心电信号的话,这个简单的平滑就不行了
在这里插入图片描述
简单平滑处理代码实现

和IIR函数一样输入 需要处理的一组数据,返回值是得到处理过后的结果

u16 baroAlt=0;
u16 filter(u16 baroOffset)
{   u16 baro; 
    baro = 0.8 * baroOffset  + (1.0f - 0.8) * baroAlt;
    baroAlt = baro;
    return baro;  
}

4.LCD显示函数

不知道大家用STM32做实时显示波形的时候是什么方法。我最开始是描点画图然后清屏,但是太闪了。所以后来用了下面这种方法。将之前的波形用底色重新画一遍,达到清屏效果。

void DrawOscillogram(void)//画波形图
{ 
   u16 i = 0;
 POINT_COLOR=RED;
  for(i=50;i<430;i++)
 {
  LCD_DrawLine(i,data[i],i+1,data[i+1]);
 }
}
void DrawOscillogram_Clear(void)//用底色画之前的波形图达到清屏效果
{
 u16 i = 0;
 POINT_COLOR = BLACK;
 
 for(i =50;i <449;i++)
 {
    LCD_Fast_DrawPoint(i,(data1[i]),BLACK);
  
 }
  for(i=50;i<449;i++)
 {
  LCD_DrawLine(i,data1[i],i+1,data1[i+1]);
 }
}

//在主函数中的位置关系 data[i]是每次要更新的图像 储存在data1[i]中进行下一次的清屏
 DrawOscillogram_Clear();
         
 for(i=0;i<500;i++)
 data1[i]=data[i];
         
 DrawOscillogram(); 

5.测量心率的函数

核心技术 随缘更新

  • 27
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个简单的C程序,可以对同一信号进行FIR和IIR滤波,并且可以通过CCS编译仿真,在Graph窗口中将原始信号波形、原始信号频谱、FIR滤波后信号波形、FIR滤波后信号频谱、IIR滤波后信号波形IIR滤波后信号波形显示出来。 ```c #include <stdio.h> #include <math.h> #define N 1000 // 原始信号长度 #define M 51 // FIR和IIR滤波器长度 int main() { int i, j; float x[N], y_fir[N], y_iir[N], h_fir[M], a_iir[M], b_iir[M]; float X_f[N], Y_f_fir[N], Y_f_iir[N], X_m_fir[N], X_m_iir[N], Y_m_fir[N], Y_m_iir[N]; // 生成原始信号 for (i = 0; i < N; i++) { x[i] = sin(2 * M_PI * i / 100); } // 生成FIR滤波器系数 for (i = 0; i < M; i++) { h_fir[i] = 1.0 / M; } // 生成IIR滤波器系数 for (i = 0; i < M; i++) { a_iir[i] = 0.1; b_iir[i] = 0.1; } a_iir[0] = 1.0; // FIR滤波 for (i = 0; i < N; i++) { y_fir[i] = 0; for (j = 0; j < M; j++) { if (i-j >= 0) { y_fir[i] += h_fir[j] * x[i-j]; } } } // IIR滤波 for (i = 0; i < N; i++) { y_iir[i] = 0; for (j = 0; j < M; j++) { if (i-j >= 0) { y_iir[i] += b_iir[j] * x[i-j]; } if (i-j-1 >= 0) { y_iir[i] -= a_iir[j+1] * y_iir[i-j-1]; } } y_iir[i] /= a_iir[0]; } // 计算原始信号频谱 for (i = 0; i < N; i++) { X_f[i] = i * 1.0 / N; Y_f_fir[i] = 20 * log10(fabs(1.0 / N * cabs(fft(x, N)[i]))); Y_f_iir[i] = 20 * log10(fabs(1.0 / N * cabs(fft(x, N)[i]))); } // 计算FIR滤波后信号频谱 for (i = 0; i < N; i++) { X_m_fir[i] = i * 1.0 / N; Y_m_fir[i] = 20 * log10(fabs(1.0 / N * cabs(fft(y_fir, N)[i]))); } // 计算IIR滤波后信号频谱 for (i = 0; i < N; i++) { X_m_iir[i] = i * 1.0 / N; Y_m_iir[i] = 20 * log10(fabs(1.0 / N * cabs(fft(y_iir, N)[i]))); } // 在Graph窗口中绘制信号波形和频谱 graph_init(); graph_set_title("Signal Processing"); graph_set_xlabel("Time"); graph_set_ylabel("Amplitude"); graph_set_xrange(0, N); graph_set_yrange(-1.2, 1.2); graph_draw_line(x, N, BLUE); graph_draw_line(y_fir, N, RED); graph_draw_line(y_iir, N, GREEN); graph_show(); graph_init(); graph_set_title("Signal Spectrum"); graph_set_xlabel("Frequency"); graph_set_ylabel("Magnitude (dB)"); graph_set_xrange(0, 0.5); graph_set_yrange(-100, 50); graph_draw_line(X_f, Y_f_fir, N, BLUE); graph_draw_line(X_m_fir, Y_m_fir, N, RED); graph_draw_line(X_m_iir, Y_m_iir, N, GREEN); graph_show(); return 0; } ``` 需要注意的是,这个程序使用了一个名为`graph`的库来绘制波形和频谱。在编译和运行之前,需要先下载并安装这个库,并将其添加到CCS的库路径中。可以在以下网址下载`graph`库: https://github.com/andrewjkramer/graph 下载之后,可以将其解压到一个目录中,然后将该目录添加到CCS的库路径中。在CCS中打开项目属性对话框,选择`Build->MSP430 Compiler->Include Options`,然后将解压后的`graph`目录添加到`Include options (-I)`中。 然后编译运行该程序,在Graph窗口中就可以看到原始信号波形、原始信号频谱、FIR滤波后信号波形、FIR滤波后信号频谱、IIR滤波后信号波形IIR滤波后信号波形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值