1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018年1月17日 |
---|
#6 in #rtl-sdr
6MB
131K SLoC
rtlsdr_iq – RTL-SDR 的 I/Q 复杂样本查找表
此crate提供了一个查找表,用于将RTL-SDR的I/Q字节对映射到复数浮点样本。
示例
use rtlsdr_iq::IQ;
// This is assuming little endian, where the Q byte is in the upper half of the word
// and the I byte is in the lower half.
let a = IQ[0x01_00u16];
let b = IQ[0x01_02u16];
let c = IQ[0x00_02u16];
assert!(a.re != b.re);
assert!(a.im == b.im);
assert!(b.re == c.re);
assert!(b.im != c.im);
用法
此crate可以通过在Cargo.toml
中添加它作为依赖项并通过在crate根目录中导入它来使用
[dependencies]
rtlsdr_iq = "1.1.0"
lib.rs
extern crate rtlsdr_iq;
lib.rs
:
此crate提供了一个查找表,用于将RTL-SDR的I/Q字节对映射到复数浮点样本。
首先应将原始字节对转换为一系列u16
索引(例如,使用slice-cast
),然后可以使用查找表。每次查找都会编译为未经检查的数组访问,由于索引的大小限制在表的保证长度内,因此可以安全地执行。
I样本始终是RTL-SDR发送的第一个样本,并且在内存中始终低于相应的Q样本。因此,在little-endian和big-endian目标之间,生成的16位字将不同。为了解决这个问题,crate会针对目标平台的字节序编译特定的查找表。
示例
use rtlsdr_iq::IQ;
// This is assuming little endian, where the Q byte is in the upper half of the word
// and the I byte is in the lower half.
let a = IQ[0x01_00u16];
let b = IQ[0x01_02u16];
let c = IQ[0x00_02u16];
assert!(a.re != b.re);
assert!(a.im == b.im);
assert!(b.re == c.re);
assert!(b.im != c.im);