12 位 ADC 存成 uint16,容量按 12bit 还是 16bit
存储预算按实际文件布局计算。12位转换结果放进uint16时通常占2byte,应填16bit;只有明确实现位打包并核对格式后,才可按压缩后的布局预算。
本文以公开公式与合成输入分析工程决策,由器赋开物编辑整理,AI 辅助撰写,未用真实硬件完成下述测试。数值用于复算,现场验收应另填测量记录。
这次要解决什么问题?
1000Hz单通道记录60秒,使用16位字段时载荷为120000byte。若简单按12/8得到90000byte,就漏掉每样本未打包的4bit容器空间。
先把输入和单位列清楚
打开采样数据存储与带宽计算器,可先用工具默认值熟悉字段,再按下表改为本文场景。
| 输入项目 | 教学输入 | 单位 |
|---|---|---|
| 每通道采样率 | 1000 | Hz |
| 每帧通道数 | 1 | 个 |
| 每通道实际存储位宽 | 16 | bit |
| 每帧时间戳等开销 | 0 | byte |
| 持续记录时间 | 60 | s |
这里的数值是明确设定的数学样例,不代表任何具体板卡、仪器或客户项目的实测数据。参数若来自你的设备,应同时记录料号、工作模式与取得方式。
按公式复算,可以得到什么?
帧字节 = 通道数 × 存储位宽/8 + 帧开销;总字节 = 帧字节 × 采样率 × 时间
| 计算项目 | 模型输出 | 单位 |
|---|---|---|
| 一帧存储长度 | 2 | byte |
| 连续写入字节率 | 2000 | byte/s |
| 记录总长度 | 120000 | byte |
| 二进制容量 | 0.11444091797 | MiB |
下载本场景输入、公式与结果 JSON。附件保留未四舍五入的模型数值,并以空的实测栏区分预测与测量;上表只为便于阅读作显示舍入。
怎样一步步核对?
检查写文件的实际类型和序列化方式,明确大小端、对齐和是否有帧头。生成固定样本数的测试文件,直接核对长度与样本数乘字段宽度。若后续改为位打包,新增跨字节边界、末尾不足整字节及解包往返验证。
哪些误读会让结论失效?
C结构体的sizeof可能包含填充,直接写结构体不一定等于字段宽度简单相加。工具按明确连续帧布局计算,不自动模拟编译器对齐,也不支持非整字节打包。
达到什么条件才算核验完成?
文件长度与格式说明一致,解包后原始码逐项还原。容量表区分ADC分辨率和实际存储位宽,不能因变量名带12就用12bit估算文件大小。
模型覆盖到哪里?
不包含文件系统元数据、磨损均衡、压缩、文本编码与突发缓存需求。存储位宽必须整字节,位打包格式需另建模型。持续写入速度不代表SD卡每次写入延迟都有界。
公式与参数定义参考乐鑫 ADC 连续采样驱动与数据格式;本页的场景设计和合成算例用于帮助复查,不能由模型输出反推硬件已经合格。若当前设备或SDK版本与来源不同,应先核对对应手册。
继续解决相关问题
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。
- 乐鑫 ADC 连续采样驱动与数据格式 ↗
docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/adc/adc_continuous.html