11 个版本

0.1.0-beta.102024年7月1日
0.1.0-beta.72024年6月14日
0.1.0-beta.42024年4月2日
0.1.0-beta.12024年3月30日
0.1.0-alpha.52024年1月29日

#191 in 科学


rdr 中使用

自定义许可

3.5MB
2K SLoC

ccsds

CCSDS 航天器数据流解码

该项目提供了解码符合CCSDS推荐规范(蓝皮书)的航天器下传遥测流的工具TM 同步和信道编码空间数据包协议

支持

  • 帧结构
    • 流同步
    • 伪噪声消除
    • 里德-所罗门FEC
  • 空间数据包解码
    • 遥测数据包,即类型为0的数据包
    • 排序
    • 数据包组
  • 对二级头部时间码的支持有限
    • CCSDS 日分段时间码
    • 用于Aqua和Terra航天器的NASA EOS时间码
    • 提供但不直接使用

示例

以下示例演示了如何解码Suomi-NPP航天器的CADU未同步字节流。此示例代码应适用于符合CCSDS TM 同步和信道编码空间数据包协议文件的任何航天器数据流。

use std::fs::File;
use std::io::BufReader;
use ccsds::{ASM, FrameDecoderBuilder, Synchronizer, decode_framed_packets, collect_packet_groups, PacketGroup};

// 1. Synchronize stream and extract blocks (CADUs w/o ASM)
let file = BufReader::new(File::open("snpp.dat")
    .expect("failed to open data file"));
let blocks = Synchronizer::new(file, &ASM.to_vec(), 1020)
    .into_iter()
    .filter_map(Result::ok);

// 2. Decode those blocks into Frames
let frames = FrameDecoderBuilder::default()
    .reed_solomon_interleave(4)
    .build(blocks);

// 3. Extract packets from Frames
// Suomi-NPP has 0 length izone and trailer
let packets = decode_framed_packets(157, frames, 0, 0);

参考文献

许可

GNU 通用公共许可证 v3.0

依赖

~4–5MB
~101K SLoC