92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
"""0.fix import problem"""
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# 获取项目根目录(自动适配 Windows/Linux/Mac)
|
||
sys.path.append(str(Path(__file__).parent.parent))
|
||
|
||
|
||
"""1.import libs"""
|
||
import numpy as np
|
||
import matplotlib
|
||
matplotlib.use('Agg')
|
||
# Agg 是非交互式后端,不需要 display,图片可通过 plt.savefig() 保存为文件。现在可以恢复 matplotlib import 并正常调试了。
|
||
import matplotlib.pyplot as plt
|
||
# uv pip install construct
|
||
from construct import *
|
||
# uv pip install scipy
|
||
import scipy.signal
|
||
|
||
import Tianwen.ccsds as ccsds
|
||
import Tianwen.tianwen1_tm as tianwen1_tm
|
||
|
||
import struct
|
||
import collections
|
||
|
||
|
||
"""2.define some functions"""
|
||
def get_packet(p):
|
||
return p[0] if type(p) is tuple else p
|
||
|
||
def packets_asarray(packets):
|
||
return np.array([np.frombuffer(get_packet(p)[ccsds.SpacePacketPrimaryHeader.sizeof():], 'uint8')
|
||
for p in packets])
|
||
|
||
def plot_apids(apids, sc, vc):
|
||
for apid in sorted(apids.keys()):
|
||
plt.figure(figsize = (16,16), facecolor = 'w')
|
||
ps = packets_asarray(apids[apid])
|
||
plt.imshow(ps, aspect = ps.shape[1]/ps.shape[0])
|
||
plt.title(f'APID {apid} Spacecraft {sc} Virtual channel {vc}')
|
||
|
||
def get_timestamps(aos):
|
||
return np.array([tianwen1_tm.parse_timestamp_datetime64(a.insert_zone.timestamp) for a in aos])
|
||
|
||
def get_packet_timestamps(packets):
|
||
return np.array([tianwen1_tm.parse_timestamp_datetime64(p[1]) for p in packets])
|
||
|
||
|
||
"""3.set some frame vars"""
|
||
frame_size = 220
|
||
frames = np.fromfile('/home/zjz/CCSDS_study/Tianwen/tianwen1_frames_20200730.u8', dtype = 'uint8')
|
||
frames = frames[:frames.size//frame_size*frame_size].reshape((-1, frame_size))
|
||
print("frames.shape[0]: ", frames.shape[0])
|
||
print("\n")
|
||
|
||
|
||
"""4.AOS header"""
|
||
aos = [ccsds.AOSFrame.parse(f) for f in frames]
|
||
|
||
collections.Counter([a.primary_header.transfer_frame_version_number for a in aos])
|
||
|
||
collections.Counter([a.primary_header.spacecraft_id for a in aos])
|
||
|
||
collections.Counter([a.primary_header.virtual_channel_id for a in aos
|
||
if a.primary_header.spacecraft_id == 245])
|
||
|
||
collections.Counter([a.primary_header.virtual_channel_id for a in aos
|
||
if a.primary_header.spacecraft_id == 82])
|
||
|
||
print([(a.primary_header.spacecraft_id, a.primary_header.virtual_channel_id) for a in aos[:20]])
|
||
|
||
|
||
"""5.Spacecraft 82 Virtual channel 1"""
|
||
print([a.primary_header for a in aos if a.primary_header.spacecraft_id == 82][:10])
|
||
|
||
|
||
|
||
"""for test"""
|
||
# def main():
|
||
# frame_size = 220
|
||
# frames = np.fromfile('/home/zjz/CCSDS_study/Tianwen/tianwen1_frames_20200730.u8', dtype = 'uint8')
|
||
# frames = frames[:frames.size//frame_size*frame_size].reshape((-1, frame_size))
|
||
# print("frames.shape[0]: ", frames.shape[0])
|
||
# print("\n")
|
||
|
||
|
||
# if __name__ == "__main__":
|
||
# print("hello world!")
|
||
# main()
|
||
|
||
|