#lookup-tables #complex #samples #rtl-sdr #sample #iq

rtlsdr_iq

RTL-SDR 的 I/Q 复杂样本查找表

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018年1月17日

#6 in #rtl-sdr

MIT 许可证

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);

依赖关系