掌桥专利:专业的专利平台
掌桥专利
首页

一种基于FPGA设计的太阳方向矢量确定方法

文献发布时间:2023-06-19 18:37:28


一种基于FPGA设计的太阳方向矢量确定方法

技术领域

本发明属于卫星技术领域,具体涉及一种基于FPGA设计的太阳方向矢量确定方法。

背景技术

太阳敏感器是航天任务中的常用光电姿态传感器之一,可提供太阳方向矢量与卫星上特定轴线间的角度反馈,用于确定太阳相对于卫星的方向和位置,可保护星上敏感设备免受太阳光线的干扰。此外,大多数卫星使用太阳能,因此需要确保太阳能电池阵相对于太阳的方向正确,以获得最有效的辐照度。

目前国内确定太阳方向矢量的方法,大多方法较为复杂,功耗较大。模拟太阳敏感器的方法测量精度不高,而传统的数字太阳敏感器算法大多基于C语言系统,处理速度较慢,且只是粗略确定太阳的指向,通过太阳能电池板的电压变化来进一步确定方位。部分精度高的,算法较为复杂,尺寸体积较大且售价普遍昂贵,大多数无法兼顾体积、视场角、精度、体积大小等多方面因素。目前国内尚无用于微纳卫星的基于FPGA设计的太阳方向矢量确定方法的相关专利。

发明内容

为了解决上述问题,本发明的目的在于提供一种基于FPGA设计的太阳方向矢量确定方法,解决现有的太阳敏感器方向矢量确定方法较为复杂,且不能兼顾体积、精度和功耗等技术问题。

为了达到上面概述的目的,本发明所采用的技术方案如下:

一种基于FPGA设计的太阳方向矢量确定方法,包括以下步骤:

步骤1:FPGA处理板从光学传感器采集到视场内的图像数据,每个像素点的数据用八位灰度值来表示;

步骤2:对步骤1采集到的图像数据进行自适应维纳滤波,以达到降噪效果;

步骤3:将步骤2中得到的滤波后的像素灰度值按照3个阈值150、180、220进行多阈值分割,分为4部分,并重新赋值为0、1、2、4,设图像分割前的图像像素数据为f(x,y),分割后的图像像素数据为k(x,y):

对滤波后图像灰度值大于给定阈值150的像素点数量进行统计,并将统计计数结果输出给质心计算模块,当数量小于设定值时,视为视野内采集到的图像中未出现太阳光斑,并将最终的太阳方向矢量设为0,若数量大于设定值,则认为太阳光斑有效,继续计算;

步骤4:步骤3中重新赋值的图像像素数据为k(x,y),其中x、y分别为该图像像素值对应的像素坐标,利用权值法进行质心计算如下:

其中,M×N是图像分辨率,求得的太阳光斑质心作为为

步骤5:利用光学镜头参数与传感器感光平面的尺寸计算得到的角分辨率θ

α=(u-u

β=(v-v

其中,α是太阳方向矢量的偏航角,β是太阳方向矢量的俯仰角。

进一步地,所述步骤2具体为:采用维纳滤波模块进行自适应维纳滤波,维纳滤波模块由三部分功能模块组成,包括生成3×3的窗口的line_buffer模块、对3×3的窗口依次滤波的filter3by3模块以及进行噪声方差统计的variance_statistics模块,实现自适应维纳滤波的具体步骤如下:

步骤2.1:line_bufer模块将整个图像依次生成3×3的窗口,逐个遍历图像中所有像素点,选择通过4个单端口随机存储器RAM来实现3×3矩阵,依次命名为ram0、ram1、ram2、ram3;

对line_bufer模块的输入图像数据,分别进行写入RAM的行、列计数,并根据写入数据的行计数器的末两位区分为四种情况:00、01、10、11选择写入的RAM;

当第四行像素数据开始写入ram3时,开始从ram0、ram1、ram2中同时读取数据,同样,根据写入数据的行计数器的末两位分为四种情况,选择读取的RAM,读取数据的同时,进行读出数据的行、列计数,用于选择3×3窗口的数据,连续三个时钟同时读取三个RAM的数据,得到一个3×3的窗口中九个像素点的像素数据,line_buffer模块同时将这九个像素数据输出给filter3by3模块;

步骤.22:九个像素数据分别为a1到a9,filter3by3模块计算以a4为中心的3×3窗口内的像素灰度均值μ,计算公式如下:

FPGA转化为乘法与移位处理,将其修正为下式:

filer3by3模块根据均值μ,计算每个窗口的像素方差σ

步骤2.3:遍历整个图像后,filer3by3模块将所有的像素方差输出variance_statistics模块,variance_statistics模块对每一帧图像的所有像素方差进行统计后求平均值,若图像的帧数少于10帧,则每一帧的像素方差平均值,即作为当前的噪声方差δ2,若帧数大于等于10帧,则用连续十帧图像的像素方差平均值再求平均值,作为维纳滤波的噪声方差,并不断更新;

步骤2.4:将噪声方差给filer3by3模块,进行维纳滤波处理,得到滤波后的像素灰度值为b

本发明与现有技术相比,其显著优点在于:

(1)具有算法简单可靠、功耗小等特点,适合微纳卫星有限的星上资源的情况;

(2)基于FPGA的设计方案,实现图像数据的并行处理,大大减小了图像数据一帧一帧处理的存取时间,提高了系统的运行速度;

(3)采用自适应的维纳滤波方法去噪,可以实时更新噪声方差,有效的抑制噪声干扰,并且可以保护图像的高频细节,对模糊图像复原效果较好;

(4)采用多阈值分割方法,对图像关键特征的保留更加完整,也减小了杂散光对质心确定的干扰;

(5)采用阈值分割后的像素值作为权值法的权值,进行质心确定,不仅算法简单运算量小,还可减少大部分背景杂光的影响;

(6)基于光学传感器角分辨率的太阳方向矢量计算方法,算法简单,大大减少了运算量,减少对FPGA资源的占用,提高运行速率,且精度高,达到0.01°;

附图说明

图1是本发明基于FPGA设计的太阳方向矢量确定方法流程图。

图2是维纳滤波模块的层次结构图。

图3是维纳滤波模块内部子模块连接关系图。

图4是维纳滤波3×3窗口示意图。

图5是太阳方向矢量计算示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施方式,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

以下结合具体实施方式对本发明的实现进行详细的描述。

如图1所示,本发明的基于FPGA设计的太阳方向矢量确定方法,主要包括以下步骤:

1)由于太阳光线直射会损毁光学传感器,因此需要在光学镜头前端安装中性衰减片,在保证不影响处理结果的基础上起保护传感器的作用。光线透过光学镜头落在光学传感器上,通过串行外设接口方式SPI(Serial Peripheral Interface)控制,FPGA处理板从光学传感器采集到视场内的图像数据,每个像素点的数据用八位灰度值表示;

2)对采集到图像数据进行自适应维纳滤波,以达到较好的去噪效果,图2是维纳滤波模块的层次结构图,维纳滤波模块由三部分功能模块组成,包括生成3×3的窗口的line_buffer模块、对3×3的窗口依次滤波的filter3by3模块以及进行噪声方差统计的variance_statistics模块,图3是维纳滤波模块内部子模块连接关系图。

实现自适应维纳滤波的具体步骤如下:

a)line_bufer模块将整个图像依次生成3×3的窗口,逐个遍历图像中所有像素点。由于维纳滤波模块的计算较为复杂,且需统计每个窗口及每一帧的噪声方差,因此为保证可靠性选择通过4个单端口随机存储器RAM(Simple Dual Port Ram)来实现3×3矩阵,依次命名为ram0、ram1、ram2、ram3。

对该模块的输入图像数据,如图3中的image_y[7:0],分别进行写入RAM的行、列计数,并根据写入数据的行计数器的末两位区分为四种情况:00、01、10、11选择写入的RAM。

当第四行像素数据开始写入ram3时,开始从ram0、ram1、ram2中同时读取数据,同样,根据写入数据的行计数器的末两位分为四种情况,选择读取的RAM。读取数据的同时,进行读出数据的行、列计数,用于选择3×3窗口的数据。连续三个时钟同时读取三个RAM的数据,便可得到一个3×3的窗口中九个像素点的像素数据,如图3中的9个img_out[7:0],line_buffer模块同时将这九个有效数据输出给filter3by3模块。

b)图4是维纳滤波3×3窗口示意图,9个像素数据img_out[7:0]分别为a1到a9,filter3by3模块计算以a4为中心的3×3窗口内的像素灰度均值μ,计算公式如下

由于FPGA直接进行除法计算会占用较多资源,通常转化为乘法与移位处理,将其修正为下式

filer3by3模块根据均值μ,计算每个窗口的像素方差σ

c)遍历整个图像后,filer3by3模块将所有的像素方差输出variance_statistics模块,variance_statistics模块对每一帧图像的所有像素方差进行统计后求平均值,若图像的帧数少于10帧,则每一帧的像素方差平均值,即作为当前的噪声方差δ

d)最后再将噪声方差给filer3by3模块,进行维纳滤波处理,得到滤波后的像素灰度值为b

3)将维纳滤波后的图像数据wienerfilt_img_done[7:0]作为阈值分割模块的输入,输出为阈值分割后重新赋值的图像数据。多阈值分割方法是对单阈值的扩展,将图像修改为确定的几个数值,在降低数据复杂度的基础上,尽可能的减小图像分割对后续算法处理结果的影响,且算法实现的难度较低,从而降低对硬件处理电路部分的要求。

将0~255的灰度值按照3个阈值150、180、220划分为几个不同的亮度区域,可更好地区分太阳光斑区域与背景区域,且越靠近太阳质心的区域权值越高。3个阈值的选取可以根据不同传感器的光电转换效率以及中灰滤镜的衰减率而改变,设图像分割前的图像像素数据为f(x,y),分割后的图像像素数据为昘(x,y):

在拍摄到的太阳光斑图像中,位置越靠近太阳质心的亮度越大,对应像素点的像素值就越大,在阈值分割的过程中赋予的权值也越大。由于太空环境中,拍摄到的其他星点杂光会对太阳光斑质心的确定产生干扰,因此在阈值分割过程中,要尽可能消除这些干扰,由于星点亮度远小于太阳的亮度,因此将其权值设置为0,可以减少后续质心计算的计算量。在太阳光斑的边缘,由于太阳杂散光会使图像的边界不清晰,在阈值分割的过程中将其划分为两部分,这样处理过后的太阳光斑中心收敛性变强,也减小了杂散光对质心确定的干扰,同时也可提高后续计算的准确性。

同时对滤波后图像灰度值大于给定阈值150的像素点数量进行统计,并将计数结果输出给质心计算模块,当数量小于设定值时,视为视野内采集到的图像中未出现太阳光斑,并将最终的太阳方向矢量设为0,若数量大于设定值,则认为太阳光斑有效,继续计算;

4)将重新赋值的0、1、2、4作为新的图像像素数据,设为f(x,y),其中x、y分别为该像素值对应的像素坐标,利用权值法进行质心计算。

权值法的计算方法较为简单,没有复杂的运算过程,相较于其他算法更适合FPGA实现。其基本思想是太阳图像的每个像素点的灰度值作为该像素点的权值,再将每个像素点的权值(即灰度值)与该像素点的坐标相乘,从左至右,从上至下,遍历整张图片,将每个像素点的计算结果相累加后求均值,最终结果作为太阳质心的坐标。计算表达式如下:

其中,M×N是图像分辨率,求得的太阳光斑质心作为为

5)目前国内最常见的计算方法是根据几何关系通过反三角函数计算的,反三角函数的几何方法原理简单,但是由于FPGA的计算能力有限,对于三角函数、反三角函数等计算较难实现,且会占用较多资源,导致功耗增加。

本发明利用角分辨率来计算太阳矢量的偏航角与俯仰角。角分辨率即传感器平面上每个像素点相对感光面中心的角度偏移量。本发明的太阳方向矢量计算示意图如图5所示,太阳方向矢量的偏航角与俯仰角分别表示为α、β,计算表达式为

α=(u-u

β=(v-v

其中,θpixal为角分辨率,根据实验所用镜头参数与传感器感光平面的尺寸计算;u、v为计算的太阳光斑质心在传感器平面的坐标,u0、b0分别是传感器平面的中心位置的坐标。

由于角分辨率为浮点数,且计算结果为有符号的浮点数,因此在计算时需转换为定点数,分步进行计算。首先计算u-u0与v-v0,设置11位中间寄存器u_u0_0[10:0]与v_v0_0[10:0],包含1位符号位与9位整数,最高位为符号位。先判断u与u0的大小确定符号位,再进行u-u0与v-v0计算。根据镜头焦距确定角分辨率大小,根据角分辨率确定移位,本发明设置移位12位。

将计算结果作为最终结果的数值,其中包含3位整数位与12位小数位,中间寄存器u_u0_0[10:0]与v_v0_0[10:0]的最高位作为最终结果的符号位,即:

偏航角alpha_0[15:0]={u_u0_0[10],alpha_cal[14:0]}

俯仰角beta_0[15:0]={v_v0_0[10],beta_cal[14:0]}

其中,alpha_0[15]、beta_0[15]为符号位,alpha_0[14:12]、beta_0[14:12]为整数部分,alpha_0[11:0]、beta_0[11:0]为小数部分,对该方法进行行为级仿真和实验测试,验证质心定位的准确性,最终结果的精度可达到0.01°。

以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

技术分类

06120115635781