Part Number:ADS1292RECG-FEOther Parts Discussed in Thread:ADS1292R, ADS1292
我在移植官方给的ADS1292R例程库的时候,有个地方一直不明白。望有人给解答一下。
例程中将9个字节的原始数据读回来之后,做了合并处理,将没3个字节合成一个32位的数据存放在ADS1x9x_ECG_Data_buf中。ADS1x9x_ECG_Data_buf[1]存放的是ch1的数据,ADS1x9x_ECG_Data_buf[2]存放的是ch2的数据。
代码如下:这段代码没有问题,可以理解。
for (ECG_Chan_num = 0; ECG_Chan_num < 3; ECG_Chan_num++)
{
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = (signed long)SPI_Rx_buf[3*ECG_Chan_num];
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = ADS1x9x_ECG_Data_buf[ECG_Chan_num] << 8;
ADS1x9x_ECG_Data_buf[ECG_Chan_num] |= SPI_Rx_buf[3*ECG_Chan_num+1];
ADS1x9x_ECG_Data_buf[ECG_Chan_num] = ADS1x9x_ECG_Data_buf[ECG_Chan_num] << 8;
ADS1x9x_ECG_Data_buf[ECG_Chan_num] |= SPI_Rx_buf[3*ECG_Chan_num+2];
}
可是后面在滤波 之前又做了处理,代码如下:
ADS1x9x_ECG_Data_buf[1] = ADS1x9x_ECG_Data_buf[1];
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];
ECGRawData[1] = (short)ADS1x9x_ECG_Data_buf[2];
ECGRawData[0-1]是需要进行滤波的原始数据,为什么又24bit数据变成了16bit的,重点是标红出的代码怎么理解。
后面将两个16bit的数据带入了滤波函数中。代码如下:
Resp_ProcessCurrSample(&ECGRawData[0],&ECGFilteredData[0]);
ECG_ProcessCurrSample(&ECGRawData[1],&ECGFilteredData[1]);
望有大神解答一下。谢谢
Amy Luo:
您好,
我需要再具体看下,您是从下面链接下载的ADS1X92XEVM-SW 例程吗?
https://www.ti.com.cn/tool/cn/ADS1292RECG-FE
,
chao li:
您好,感谢您关注这个问题。
对的。文件夹是ADS1x9x_ECG_Recorder_FW。
具体是在文件ADS1x9x_ECG_Processing.c里面。函数名是:ADS1x9x_Filtered_ECG。
麻烦您看一下。谢谢~~
,
Amy Luo:
这里应该就是使用16位数据进行所有ECG信号滤波和后处理,我再去确认下为什么将采集的24bits数据变成16bits进行滤波和后处理
,
chao li:
谢谢~~
,
Amy Luo:
您好,我询问了TI资深工程师,他说:示例代码仅用作参考,不用于终端设备产品,客户不必仅使用16位数据进行后期信号处理,这取决于其实际实施的系统应用要求。ADS1292将输出24位分辨率的原始数据,无需任何截断。
,
chao li:
谢谢,我再看看。
,
Amy Luo:
好的,我先将这个帖子关上了,如有问题请发新帖,谢谢!