望远镜框架中卫星的检测

问题描述

我有望远镜图像中心的天体坐标,望远镜的视野(以秒为单位),拍照的开始时间(完整日期)和曝光时间(以秒为单位)。我想知道有多少 Starlink 卫星可以进入图像帧。 我无法弄清楚如何正确计算。我不太了解天体坐标。 我尝试使用 Skyfield api、地心坐标并假设望远镜朝上。 但是它太长了并且不能正常工作...

这是我目前尝试做的。

import skyfield.timelib
from skyfield.api import Topos,load
from datetime import timedelta

def satnum(start_time,exposition,eq_cords,field_of_view):
    """Counts number of satellites

    Arguments
    ---------
    :param start_time: skyfield.timelib.Time object
    :param exposition: int
    :param eq_cords: list of floats
    :param field_of_view: int

    Returns
    -------
    :return: int


    Examples
    --------
    import satnum
    start_time = [2020,12,14,18,00,00]
    exposition = 15
    eq_cords = [4741.1,-2257.7,4505.7]
    field_of_view = 45
    satnum.satnum(start_time,field_of_view)
    0
    """

    url = "https://celestrak.com/NORAD/elements/starlink.txt"
    satellites = load.tle_file(url)
    sat_counter = 0
    ts = load.timescale()
    eq_cords = Topos(*eq_cords)

    for satellite in satellites:

        difference = satellite - eq_cords

        for n in range(exposition):
            time = ts.utc(start_time.utc_datetime() + timedelta(seconds=n))
            topocentric = difference.at(time)
            altaz = topocentric.altaz()
            if altaz[0].degrees >= 90 - (field_of_view/2)/60:
                sat_counter += 1
                break

    return sat_counter

如果有任何想法,我将不胜感激。

解决方法

一个简单的解决方案(如果我正确理解你的目标),就是简单地计算星链卫星的表面数密度,然后乘以望远镜的面积,这会给你期望的卫星数量随时在视野中寻找。然后在该视场中找到卫星的概率将根据泊松分布确定(假设卫星的位置和望远镜的指向是完全随机的,这并不完全正确,但会给出一个很好的顺序量级估计)。

因此,如果“#”是星链卫星的总数,“A”是您的望远镜视野面积(以球面度为单位),并且天空的总面积为 4*pi 球面度:

随机指向中星链的平均数“n”:

n = A * #/(4*pi)

在给定指向中找到“k”颗卫星的概率“P”:

P(k) = n^k * e^-n / k!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...