找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 4446|回复: 5

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

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

使用道具 举报

发表于 2009-12-11 13:02:44 | 显示全部楼层
一个I32就是两个I16,你分割下,然后可能要修改I16的程序,输入输出都要考虑进位,改动应该不大。
当然,大家都能找到一个功能版本的解决方案,不过是否高效就不得而知了,你试试看了
回复 顶

使用道具 举报

 楼主| 发表于 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数据的高字节应该都为零,不涉及符号位的问题吧?
回复 顶

使用道具 举报

 楼主| 发表于 2009-12-15 15:15:18 | 显示全部楼层
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-30 06:28 , Processed in 0.034963 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表