ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

rtl_433 的 I/Q 文件格式完全指南:从 I/Q 采样数据到解调脉冲数据的读写与转换

rtl_433 的 I/Q 文件格式完全指南:从 I/Q 采样数据到解调脉冲数据的读写与转换 物联网【免费下载链接】rtl_433Program to decode radio transmissions from devices on the ISM bands (and other frequencies)项目地址https://gitcode.com/gh_mirrors/rt/rtl_433点击查看免费下载导读rtl_433 是用于解码 ISM 频段及其他频率无线设备射频信号的开源工具而 I/Q 格式In-phase / Quadrature同相/正交是软件无线电SDR接收机与发射机之间交换、存储原始采样的核心载体。本文以仓库文档 docs/IQ_FORMATS.md 为主体结合 src/fileformat.c、include/fileformat.h 等源码实现系统讲解 I/Q 原始采样格式、解调脉冲数据格式、文件名元数据约定以及rtl_433 -w / -r读写与转换命令的实战用法。读完本文你将能够读懂 SDR 采样文件的扩展名含义、正确构造携带中心频率与采样率信息的文件名并熟练地在不同格式之间进行转换与可视化。I/Q 采样数据格式软件无线电的“原始底片”什么是 I/Q 数据I/Q 代表“In-phase / Quadrature”同相 / 正交是 SDR 接收机和发射机使用的原始数据格式。一个采样由 I 值和 Q 值两部分组成每个值通常为 8、12 或 16 位。I 与 Q 两个分量按顺序交替存放这种排列方式在音视频数据领域被称为“interleaved”交织。从信号处理角度看I/Q 数据可以类比为双声道音频信号来处理只是采样率要高得多。I/Q 采样的本质特性决定了它能够利用等于采样率的带宽——对于纯实数信号奈奎斯特-香农采样定理只允许使用采样率一半的带宽而 I/Q 复信号天然支持从负频率到正频率的完整频带因此能承载更宽的频谱信息。:::tip RTL-SDR 接收机常见的采样率为250 kHz和1024 kHz也有 1 MHz即 1000 kHz。 :::无头文件元数据必须“另附”或“写进文件名”I/Q 原始数据格式一般没有文件头也不携带元数据。所使用的中心频率center frequency和采样率sample rate必须通过其他途径单独传递或者编码在文件名中见后文“文件名元数据”一节。格式全览位宽 × 数值类型不同格式的差异在于采样位宽度与数值位格式。rtl_433 涉及的位宽有 4、8、12、16、32、64 位数值格式有无符号整数unsigned integer、有符号整数signed integer和浮点数float。每种格式由一个“每值位数”和一个“每采样位数”的扩展名标识扩展名含义每值位数每采样位数.cu4复数 I/Q无符号整数4 bit8 bit每采样.cs4复数 I/Q有符号整数4 bit8 bit每采样.cu8.data、.complex16u复数 I/Q无符号整数8 bit16 bit每采样.cs8.complex16s复数 I/Q有符号整数8 bit16 bit每采样.cu12复数 I/Q无符号整数12 bit24 bit每采样.cs12复数 I/Q有符号整数12 bit24 bit每采样.cu16复数 I/Q无符号整数16 bit32 bit每采样.cs16复数 I/Q有符号整数16 bit32 bit每采样.cu32复数 I/Q无符号整数32 bit64 bit每采样.cs32复数 I/Q有符号整数32 bit64 bit每采样.cu64复数 I/Q无符号整数64 bit128 bit每采样.cs64复数 I/Q有符号整数64 bit128 bit每采样.cf32.cfile、.complex复数 I/Q浮点数32 bit64 bit每采样.cf64复数 I/Q双精度浮点64 bit128 bit每采样此外还存在包含 I/Q 数据的音频文件但支持较少.wav以及广播波形格式.bwfBroadcast Wave Format。原生格式与选型建议RTL-SDR 接收机的“原生”格式是.cu8每分量 8 位无符号整数。其他多数接收机的原生格式通常是.cs16每分量 16 位有符号整数。大多数接收机内部实际只以每通道 12 位采样因此使用.cs12会更紧凑尽管其广泛支持程度不如.cu8/.cs16。rtl_433 的读写与转换rtl_433 支持上述大部分格式并允许读取、写入或互相转换典型用法如下# 将接收到的数据写入采样文件实时采集 rtl_433 -w FILE.cu8 # 将采样文件从一个格式转换为另一个格式 rtl_433 -w FILE.cu8 FILE.cs16从源码看include/fileformat.h 用一个位掩码整数统一描述文件类型低 16 位中的F_UNSIGNED/F_SIGNED0 位、F_INT/F_FLOAT1 位、F_1CH/F_2CH4 位以及F_W4/F_W8/F_W12/F_W16/F_W32/F_W648 位组合出单通道/双通道、整数/浮点的原始格式高 16 位则标识内容类型F_I/F_Q/F_AM/F_FM/F_LOGIC/F_VCD/F_OOK从而派生出CU8_IQ、CS16_IQ、CF32_IQ、S16_AM、S16_FM等复合类型。需要注意并非所有列出的格式都能双向读写。src/fileformat.c 中的file_info_check_read()只接受cu8、cs8、cs16、cf32、am.s16和脉冲 OOK 文本作为输入file_info_check_write()则允许cu8、cs8、am.s16、fm.s16、cs16、cf32、am.f32、fm.f32、i.f32、q.f32、logic.u8、vcd作为输出。如果传入不支持的格式程序会向 stderr 打印File type not supported as input/output (...)并退出。解调后的脉冲数据格式.ook / .fsk / .psk / .vcd / rfraw文本格式 .ook/.fsk/.psk解调后的数据可以存储为可读的文本格式扩展名为.ook也可以是.fsk或.psk。文件头部包含关于解调方式的元数据如 2-ASK / ook、2-FSK / fsk 等而扩展名仅起信息提示作用——实际解调类型由文件头内容决定。文件中的每一行常规数据包含两个数字脉冲持续时间和间隙持续时间。对于 FSK 或 PSK 解调这两个数字分别表示mark标记与space空号的持续时间。从 src/pulse_data.c 的实现看pulse_data_print_pulse_header()会先写出;pulse data、;version 1、;timescale 1us、;created ...等头行随后pulse_data_dump()依据是否检测到 FSK 双频data-fsk_f2_est写出;fsk N pulses/;freq1/;freq2或;ook N pulses/;freq1并记录;centerfreq、;samplerate、;sampledepth、;range、;rssi、;snr、;noise等信号质量参数。数据主体部分每行输出pulse_us gap_us单位由timescale 1us决定即以微秒计最后以;end收尾;pulse data ;version 1 ;timescale 1us ;created ... ;received ... ;ook 12 pulses ;freq1 433920000 ;centerfreq 433920000 Hz ;samplerate 250000 Hz ;sampledepth 8 bits ... 350 1800 350 1800 ... ;end.vcd 格式.vcdValue Change Dump格式可以承载同样的脉冲信息适合与传统的信号数据软件配合使用。它可选地支持编码多于两个状态例如 4-FSK不过 rtl_433 目前并未使用这一扩展能力。src/pulse_data.c 提供了pulse_data_print_vcd_header()与pulse_data_print_vcd()用于按通道写出 VCD 数据。rfraw极致紧凑的单行格式rfraw:是一种非常紧凑的格式通常只有一行代码。它用十六进制编码量化后的脉冲/间隙持续时间最多支持八种不同的持续时间。从 src/rfraw.c 的rfraw_check()看该格式要求以0xaa 0xb0或0xaa 0xb1开头作为格式标识后续数据以字节/半字节为单位编码脉冲时长序列。这种格式常用于嵌入网络报文或精简存储场景。解调后的“原始”幅值/频率格式还存在用于保存解调后但未进一步处理的“原始”幅值或频率数据的格式例如.am.s16、.fm.s16——它们与前述 I/Q 格式类似但只有一个“通道”即仅保存解调后的幅值或瞬时频率不含正交分量。SigRok .sr 格式与 PulseviewSigRok.sr格式是一个 Zip 压缩包把多个文件组合在一起便于用SigRok Pulseview直接查看。:::tip 安装 SigRok Pulseview 后写入 SigRok 文件时使用覆盖选项大写-W会自动打开 Pulseview查看结果。 :::从实时数据或采样文件生成脉冲文件rtl_433 可以从实时数据或采样文件生成上述全部脉冲格式# 将接收到的数据写入 ook 脉冲文件实时采集 rtl_433 -w FILE.ook # 将采样文件转换为 ook 脉冲文件 rtl_433 -w FILE.ook FILE.cu8命令行读写选项详解-r / -w / -W结合 src/rtl_433.c 中help_read()与help_write()的帮助文本读写选项的完整语义如下[-r filename]从输入文件读取数据而不是从接收机读取。参数中心频率、采样率、格式会从完整路径、文件名和扩展名中自动检测。[-w filename]保存数据流到输出文件-表示把采样数据 dump 到标准输出stdout。[-W filename]保存数据流到输出文件但覆盖已存在的文件同时具备“打开 Pulseview”的副作用见上节 SigRok 提示。-r读取支持的参数检测规则中心频率以M、Hz、kHz、MHz或GHz为后缀的可带小数数字采样率以k、sps、ksps、Msps或Gsps为后缀的数字文件内容与格式cu8、cs16、cf32隐含 IQ、am.s16等参数之间用非字母数字字符分隔且大小写不敏感支持用冒号:前缀强制覆盖检测结果从管道pipe读取时同样支持格式选项例如读取复数 32 位浮点CU32:-。-w写入支持的格式包括cu8、cs8、cs16、cf32隐含 IQ、am.s16、am.f32、fm.s16、fm.f32、i.f32、q.f32、logic.u8、ook、vcd。# 示例默认按扩展名检测 rtl_433 -w path/filename.am.s16 # 示例强制覆盖格式/内容am 内容、s16 位宽 rtl_433 -w am:s16:path/filename.ext另外-S sigmf前缀可将抓取输出切换为 SigMF 容器格式详见下一节抓取模式可指定all、unknown、known、undecoded。文件名元数据把频率和采样率写进文件名除了文件扩展名关于中心频率和采样率的元数据还会编码在文件名中433.92M带M后缀的十进制数字表示中心频率单位为 MHz433.92M 即 433.92 MHz1000k带k后缀的十进制数字表示采样率单位为 kHz1000k 即 1000 kHz。文件名中的每一部分必须用下划线_分隔。即使频率很低或采样率很高后缀也是固定的:::warning433920k不是合法的频率规格1M也不是合法的采样率规格——频率必须带MMHz类后缀采样率必须带kkHz类后缀且不能把数值直接堆在一起充当另一类参数。 :::合法的命名示例如g001_433.92M_1000k.cu8433.92 MHz 中心频率、1000 kHz 采样率的 I/Q 文件。这一解析逻辑在 src/fileformat.c 的file_type()中有完整实现程序从左到右扫描文件名遇到数字[.小数]字母形态的 token 时按首字母k/K×10³、M/m×10⁶、G/g×10⁹换算M/Hz/kHz/MHz/GHz归入center_frequencyk/sps/ksps/Msps/Gsps归入sample_rate字母 token 则匹配cu8、cs8、cs16、cs32、cf32、u8、s8、u16、s16、u32、s32、f32、vcd、ook、iq、i、q、am、fm、logic以及兼容旧名data→cu8、complex16u→cu8、complex16s→cs8、cfile/complex→cf32。file_info_parse_filename()src/fileformat.c随后调用file_type_guess_auto_format()把裸格式补全为复合类型如F_IQ→CU8_IQ、F_AM→S16_AM。冒号强制覆盖语法文件名中最后一个冒号之前的字符串会被解析为强制覆盖override前缀并在解析后被移除。也就是说am:s16:path/filename.ext会强制把文件内容解释为am幅值、位宽为s16而路径部分从冒号后开始。兼容但不推荐的写法还包括am-s16:path/filename.ext、am.s16:path/filename.ext、path/filename.am_s16等推荐统一使用点号连接的默认检测形式如filename.am.s16或标准的冒号覆盖形式。SigMF带元数据的容器格式支持除纯无头格式外rtl_433 还支持SigMFSignal Metadata Format容器。从 include/fileformat.h 看容器类型分为FILEFMT_RAW原生裸数据与FILEFMT_SIGMF两种src/fileformat.c 提供了 SigMF 数据类型字符串与内部格式的互相映射例如cu8↔F_CU8、ci8↔F_CS8、ci16_le↔F_CS16、cf32_le↔F_CF32、cf64_le↔F_CF64等输出扩展名为.sigmf。命令行可通过-S sigmf all等组合启用见 src/rtl_433.c此时程序会创建 SigMF 抓取器samp_grab_create(SIGNAL_GRABBER_BUFFER, 1)。格式检测的单元测试佐证文件格式解析逻辑自带单元测试_TEST宏启用见 src/fileformat.c测试覆盖了cu8:、cs16:、cf32:、complex16u:、complex16s:、complex:等强制覆盖前缀以及.cu8、.cs16、.cf32、.am.s16、.am-s16、.am_s16、.fm.s16、.fm-s16、.s16.fm等各种分隔写法验证了“参数必须以非字母数字分隔、大小写不敏感”的解析规则。开发者可借此确认任何新格式扩展名都能被正确识别。文件查看与可视化所有原始 I/Q 采样数据格式以及大部分解调后的脉冲数据格式都可以用triq I/Q Spectrogram and Pulsedata viewer即 triq.org 的 PDV 工具进行可视化。使用流程建议先用rtl_433 -w FILE.cu8或-w FILE.ook生成数据文件再用 PDV 打开查看频谱与脉冲波形若安装了 SigRok Pulseview配合-W写入.sr文件即可自动弹出波形查看器。小结I/Q 格式是 SDR 数据交换与存档的基石.cu8是 RTL-SDR 的原生格式.cs16/.cf32常见于其他接收机与软件链.ook/.fsk/.vcd/rfraw:则保存解调后的脉冲序列供离线分析、协议逆向与复现解码使用。rtl_433 通过-r/-w/-W与“文件名即元数据”的设计在无头文件的前提下实现了频率、采样率、格式信息的自描述传递配合冒号覆盖语法可以精确控制读写格式是进行 ISM 频段信号采集、分析与格式转换的实用工具。赞分享物联网【免费下载链接】rtl_433Program to decode radio transmissions from devices on the ISM bands (and other frequencies)项目地址https://gitcode.com/gh_mirrors/rt/rtl_433点击查看免费下载相关推荐PyOpenMS 文件读写与数据格式实战指南从 mzML 到 idXML 的完整 I/O 方案PyOpenMS 文件读写与数据格式实战指南从 mzML 到 idXML 的完整 I/O 方案 导读 在 PyOpenMS 中进行蛋白质组学与代谢组学分析第AI 技能科研生物信息学数据科学Daft I/O 全指南从内存、文件、数据湖到数据目录的读写 API 详解Daft I/O 全指南从内存、文件、数据湖到数据目录的读写 API 详解 Daft 作为面向 AI 与多模态负载的高性能数据引擎其 I/O 层覆盖了从内存大数据数据分析数据工程AI 应用如何高效处理科学数据xarray数据I/O操作完全解析从文件读取到数据导出终极指南如何高效处理科学数据xarray数据I/O操作完全解析从文件读取到数据导出终极指南 xarray是Python中用于处理N D标记数组和数据集的强大工具它上一篇gh_mirrors/er/errors性能测试报告长期运行的稳定性下一篇B站视频下载神器Bilidown一键保存8K超清视频的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表