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