TI论坛
直播中

王彬

8年用户 1100经验值
私信 关注
[问答]

求助,使用ads1292采集ecg遇到的疑问求解


  • 我们在使用ads1292采集ecg的过程中,参考了ti提供的 ADS1x9x_ECG_Recorder_FW。其中,在滤波算法中有个地方不明白,麻烦解释下。
    在 void ADS1x9x_Filtered_ECG(void) 这个函数中,有如下语句
    ADS1x9x_ECG_Data_buf[1] = ADS1x9x_ECG_Data_buf[1] >> 4;   //为什么是向右移位4位,出于什么原因?
    ADS1x9x_ECG_Data_buf[2] = ADS1x9x_ECG_Data_buf[2] >> 4;

    ADS1x9x_ECG_Data_buf[1] &= 0xFFFF;
    ADS1x9x_ECG_Data_buf[2] &= 0xFFFF;

    ECGRawData[0] = (short)ADS1x9x_ECG_Data_buf[1];   //该变量存储24位数据,经过上述移位后,有效位变为20。在给滤波算法时,为什么不是给数据前16位,
    ECGRawData[1] = (short)ADS1x9x_ECG_Data_buf[2];   //而是数据中间的16位?
    ECG_ProcessCurrSample_ch0(&ECGRawData[0],&ECGFilteredData[0]);
    ECG_ProcessCurrSample(&ECGRawData[1],&ECGFilteredData[1]);
    QRS_Algorithm_Interface(ECGFilteredData[1]);

回帖(2)

杜喜喜

2024-12-18 10:09:20
   这是滤波的结果在前面的高 16 中. 如果想弄明白为何这样, 得看滤波算法了.
应用上先这样用就可以了, 以后有空去查一下源码
举报

刘桂英

2024-12-18 14:07:41
在这段代码中,向右移位4位的操作是为了降低信号的采样率。在数字信号处理中,移位操作可以用来实现低通滤波器,降低信号的高频成分。向右移位4位意味着将原始信号的每个样本值除以16(2^4),这样可以减少高频噪声的影响,同时保留低频信号成分。

具体来说,这段代码的步骤如下:

1. `ADS1x9x_ECG_Data_buf[1] = ADS1x9x_ECG_Data_buf[1] >> 4;` 和 `ADS1x9x_ECG_Data_buf[2] = ADS1x9x_ECG_Data_buf[2] >> 4;`:这两行代码将ECG数据缓冲区中的两个样本值分别向右移位4位,降低采样率。

2. `ADS1x9x_ECG_Data_buf[1] &= 0xFFFF;` 和 `ADS1x9x_ECG_Data_buf[2] &= 0xFFFF;`:这两行代码将移位后的样本值与0xFFFF进行位与操作,确保结果为16位有符号整数。这是因为在移位操作后,可能会产生高于16位的值,需要将其截断为16位。

3. `ECGRawData[0] = (short)ADS1x9x_ECG_Data_buf[1];`:这行代码将处理后的ECG数据存储到`ECGRawData`数组中,以便后续处理。

总的来说,向右移位4位的操作是为了降低信号的采样率,减少高频噪声的影响,同时保留低频信号成分。这种处理方法在ECG信号采集中是常见的,有助于提高信号质量。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分