6 个版本 (3 个重大更改)
0.4.0 | 2024年4月5日 |
---|---|
0.3.0 | 2023年2月26日 |
0.2.1 | 2022年8月12日 |
0.1.1 | 2022年8月11日 |
#818 in 解析器实现
每月 26 次下载
51KB
1K SLoC
sigproc_filterbank
此包提供了一个简单、快速且健壮的接口,用于访问 SIGPROC 滤波器二进制格式。该格式包含动态光谱,在射电天文学中的脉冲星和射电瞬态科学中常用。此实现为纯 Rust,依赖项很少,并且不包含任何不安全代码。
描述
有两个主要的接口用于滤波器文件:读取和写入。这些接口作为独立的数据结构存在,因为您与之交互的方式在本质上不同。
读取
要从滤波器文件中读取,您只需要一个字节数组切片。这可以来自内存映射文件、传入流等。然后,有用于获取头数据的getter方法,以及用于访问动态光谱中的点的单个 get
方法。每个滤波器都会返回 f32,因为格式支持的最大整数值(u16)可以无损地适应 f32。 get
索引为 IF 通道、样本数、频率通道。
use std::{fs::File, io::Read};
use sigproc_filterbank::read::ReadFilterbank;
let mut file = File::open("tests/small.fil").unwrap();
let mut bytes = vec![];
file.read_to_end(&mut bytes).unwrap();
let fb = ReadFilterbank::from_bytes(&bytes).unwrap();
let my_spec_val = fb.get(0,0,0);
写入
要构建一个滤波器文件,您需要推送时间序列数据,就像您会在实时望远镜中接收它们一样。您必须声明 IF 的数量和通道的数量,然后样本数由您写入的数据量隐式确定。此外,滤波器位数由您推送的数据类型隐式确定。如果您尝试推送不同的类型,则会收到编译错误。对于小于 8 位的数
然后,要写入文件,您只需将字节转储并写入文件、流等。
use sigproc_filterbank::write::WriteFilterbank;
// Two frequency channels, one IF
let mut fb = WriteFilterbank::new(2, 1);
fb.push(&[1u8, 2u8]);
fb.push(&[3u8, 4u8]);
// Serialize to bytes
let bytes = fb.bytes();
许可证
sigproc_filterbank
在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖关系
~1.2–1.9MB
~38K SLoC