#astronomy #radio-astronomy #parser #parser-serializer #pulsars

sigproc_filterbank

用于 SIGPROC 脉冲星滤波器文件的解析器和序列化器

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 次下载

Apache-2.0 OR MIT

51KB
1K SLoC

sigproc_filterbank

license docs rustc build status Codecov

此包提供了一个简单、快速且健壮的接口,用于访问 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-APACHELICENSE-MIT

依赖关系

~1.2–1.9MB
~38K SLoC