uncttm 发表于 2009-12-11 10:52:30

i32转换为i16数据类型的问题?

问题的由来:
以前用的是16位的AD卡,数据的存储和分析处理模型都是用i16类型做的。换为现在用的是24位的AD卡,由于新卡读出的数据只能用i32的数据类型表示,数据存储和数据分析处理还想沿用以前的程序,所以想把i32转换为i16数据类型,虽然会损失一些精度,但是后期的处理可以不必调整了。
但是如果直接用强制类型转换将丢弃高位;如果用循环移位,符号位又欠考虑。我的采样率76800,所以想寻求一个较为高效的算法完成上述转换,并能使后续算法通用。
请赐教!
感谢回复!

wdyjz 发表于 2009-12-11 11:13:18

为什么不直接采用double?

飞雨天 发表于 2009-12-11 13:02:44

一个I32就是两个I16,你分割下,然后可能要修改I16的程序,输入输出都要考虑进位,改动应该不大。
当然,大家都能找到一个功能版本的解决方案,不过是否高效就不得而知了,你试试看了

uncttm 发表于 2009-12-11 15:29:07

wdyjz :用double类型如何表示24bitAD卡的数据?整数位占多少位?小数点占多少位?
飞雨天 :由于我的数据处理部分的一些门限、阈值等都是经过很久才确定的,所以没有信心对程序进行重新调整。
我试图将i32右移8位后用类型强制转换成16位的。但是符号的问题没有解决。
继续中。。。。。

飞雨天 发表于 2009-12-12 10:40:19

本帖最后由 飞雨天 于 2009-12-12 10:48 编辑

:-),那就只能按你说的那样做了,损失的精度可以接受不?

如果你是想要I32的中间两个字节,你可以使用一些对多字节数据进行split的vi,应该在function pallette 的numeric下面,具体位置你再找找。

另外,如果你采集卡是24位的,那么出来的I32数据的高字节应该都为零,不涉及符号位的问题吧?

uncttm 发表于 2009-12-15 15:15:18

解决了!
页: [1]
查看完整版本: i32转换为i16数据类型的问题?