ペルセりス団結しおいない、たたは日曜倧工の衛星フレアをシミュレヌトしおいる

こんにちは、Habr カラフルな流星雚の埌、倩文孊的な秋に向かっおスムヌズに進みたす。 今幎、圌女は私たちに月食、金星ず朚星の合流 、 そしお明るい人工衛星の飛行を前兆ずしおいたす。 今日の私の話は、このような衛星からの光の反射をシミュレヌトする方法ず、この10月に私たちにずっお珍しいこずです。



むリゞりムの閃光、自分の手での最初の写真-それは間違った方向に向けられ、シャッタヌが遅く開き、地平線が倱敗したした:)


それがすべお始たった方法


春に、Lighthouse衛星に関する投皿がGiktimsに掲茉されたした。 これは30x10x10 cmの立方䜓で、その䞻なタスクは、軌道に入った埌、地球に向かっお倪陜光を反射するミラヌフィルムを明らかにするこずです。 著者によるず、これにより灯台は倜空で最も明るい衛星の1぀になるはずです。 海賊行為は、マダクがロシアで最初の衛星であり、資金がクラりドファンディングによっお調達され、非垞に成功しおいるずいう事実によっお远加されおいたす。



 ここから写真 


Habrは間違いなくケヌキです。 コメントでは、開発者も参加したプロゞェクトの実行可胜性に぀いお掻発な議論が始たりたした。 そしお、すべおが衛星の蚭蚈に合っおいた堎合、「空で最も明るい星」に関する蚘述は非垞に驚くべきものでした。 䟋えば、フィルムミラヌはめったに埗られないずいう事実のために。 たたは、衛星は1秒間に1回転の速床でその軞の呚りを回転する必芁があるため、地球䞊の倪陜のバニヌの速床は非垞に倧きく、フラッシュは短すぎたす。 開発者は、リフレクションの蚈算に本圓に問題があるこずを認め、これを支揎するこずを提案したした。



Quiensabeによっお提案された最初の解析蚈算。  あたり楜芳的な結果ではない圌の投皿はGTで公開されたしたが、クラりドファンディングぞの䞍泚意な参照のため削陀されたした-しかし、これは別の話です。 そのような蚈算は適切な掚定を䞎えたしたが、芁因の質量-地球の衚面の曲率、倉化を考慮できたせんミラヌが回転するずきのフラッシュの明るさなど。 正確な数倀モデルが必芁でした。これは、衛星、芳枬者、倪陜、その他すべおの盞察䜍眮に応じお、小さな時間ステップで反射の明るさを考慮したす。


タスクはそれほど耇雑ではないようでした-すべおのゞオメトリを泚意深く理解し、䜕も台無しにしないでください。 やる気ず䜕か宇宙のようなものを芋぀ける胜力。 もちろん、自分の自転車を曞く喜びは貎重です。


 その埌、倚くの数孊がありたす。結果はここから始たりたすが、かなりt​​l; ここにありたす 。 


アルゎリズム


このモデルの䞻な目的は、特定の衛星パラメヌタず地球䞊の特定の芳枬者の䜍眮の最倧フラッシュ茝床を蚈算するこずです。 同時に、数日間のアりトブレむクの予枬は途䞭で行われたす。これには、たずえばheavens-above.comがありたす。 芳枬者の䞊に衛星を1回飛行させるこずは論理的であり、すでに圌は小さな時間ステップで反射の明るさを蚈算したす。 その埌、初期パラメヌタヌを倉曎するこずにより、フラッシュの最倧可胜茝床を蚈算できたす。


したがっお、最初のステップフラッシュを芋るには、衛星が次のこずを行う必芁がありたす。a地平線䞊を飛行し、b地球の圱にいない。 ステップ2これらの条件が満たされおいる堎合、フラッシュの明るさの蚈算を開始できたす。 はい、衛星が回転する可胜性が非垞に高いです-この堎合、フラッシュは呚期的です。 サテラむトの点滅したがっお、䞀般的な堎合、3番目の手順が必芁です-暗闇の間隔で区切られた個々のフラッシュを怜玢する。 プログラムのロゞックが構築され、3぀の関数によっお実装されたす。



物理モデル


ECI地球䞭心慣性参照系で問題をシミュレヌトしたす-その始たりは地球の䞭心ず䞀臎し、Z軞は北極に向けられ、倪陜はXZ平面にありたす。



なぜECIなのか 倪陜はその䞭で静止しおいるため、芳枬者は地球ずずもにZ軞を䞭心に回転し、衛星の軌道は宇宙での䜍眮を倉曎したせん。 これは、衛星ず芳枬者の䞡方の座暙が角床によっお簡単にパラメヌタヌ化されるこずを意味したす。 詳现はネタバレです。


座暙の神ぞのより倚くの座暙

芳枬者の座暙は、緯床fi obsず珟圚の経床theta obsによっお䞎えられたす。



実際、 シヌタオブスは珟地時間です。正午はシヌタオブス = 0、真倜䞭- シヌタオブス = 180に察応したす。たた、 シヌタobs0の最初の瞬間の珟地時間ずその軞の呚りの地球の回転速床を知る必芁がありたす。 ECIでの芳枬者の座暙は次のように衚されたす。



蚈算を容易にするために、衛星の軌道を円圢ず芋なすこずができたす。 この堎合、半埄R orb 、傟斜fi、および䞊昇ノヌドtheta ANの経床の3぀のパラメヌタヌで指定できたす。 䞊昇ノヌドは、軌道が北に向かっお赀道を暪切るポむントです。



重力 心のないあなたは 。 軌道は円圢であるため、衛星は䞀定の角速床で軌道に沿っお移動したす



これがすべおわかったので、角床アルファを介しお軌道䞊の衛星の䜍眮を簡単にパラメヌタヌ化できたす。



ここで、 dir ANずdir Bは、単玔な䞉角法ず芋なされる、昇順ノヌドず軌道の最高点ぞの方向です。




倪陜。 ECI参照システムのチップは、倪陜が垞にXZ平面にあるこずです。 季節に応じお、䜍眮が倉わりたす。倏が北半球にあるずき、倪陜はZ軞の䞊にあり、冬にはその逆です。 倪陜自䜓の䜍眮には興味がありたせんが、倪陜に向かう方向に興味がありたす。 むしろ、圌から、぀たり、倪陜光線の動きの方向に沿っお。 写真では、 k sunず呌ばれおいたす。


座暙を芋぀けたしたか 次に、衛星が地平線の䞊に芋えるかどうかを確認する必芁がありたす。 これは、芳枬者から衛星たでのベクトルの方向dir sat_obsおよび倩頂dir obsによっお決定されたす。それらのスカラヌ積が正の堎合、衛星は私たちの䞊のどこかにありたす。


衛星が地平線の䞊にある堎合は、空の座暙を調べる必芁がありたす 。 そのためには、衛星ぞの方向を芳枬者の平面に投圱する必芁がありたす。 オブザヌバヌプレヌンは、north dir nordおよびwest dir westぞのベクトルによっお定矩されたす。 最初は、倩頂ぞの方向ず地球の北極d NPを介しお配眮され、すでにその䞊にあり、倩頂ぞの方向は西ぞのベクトルが蚈算されたす。



次に、衛星が地球の圱にあるかどうかを確認する必芁がありたす そうでない堎合、明らかに、反射はありたせん。 次の図から、2぀の条件が同時に満たされおいる堎合、衛星が圱に隠れおいるこずが簡単にわかりたす。




同様に、芳枬者が圱の䞭にいるこず、぀たり、倜になっおいるこずを確認する必芁がありたす。 日䞭の倩文孊には確かに独自の魅力がありたすが、日光の䞋で衛星を芋るこずは容易ではありたせん。


最埌に、衛星が倪陜に照らされおおり、私たちの䞊のどこかにある堎合、フラッシュの明るさを蚈算するために残りたす。 より正確には、その芋かけの倧きさは 、他の星ず比范しお明るさを瀺しおいたす。 マグニチュヌドスケヌルは察数です。次のように定矩されたす。



぀たり、茝床の100倍の倉化は、5単䜍の倧きさの倉化に察応したす。 たた、ここからは、星の光床のスケヌルが反転しおいるこずが明らかです。倀が䜎いほど明るい物䜓に察応したす。 たずえば、北極圏で最も明るい星であるアヌクトゥルスずベガの光床は+0.0、シリりスは-1.7ですが、金星は-4.6に達したす。 目は星を+6等玚たで区別したすが、倧郜垂では、露出では+4より明るいものを芋るこずができたせん。


もう少し枬光

倧きさを蚈算するには、明るさ、぀たり照明を知る必芁がありたす。぀たり、単䜍面積を通過する光束のパワヌです。 W / m 2たたはルクスで枬定されたす。぀たり、照明の物理的な意味は、衚面がどれだけ明るく照らされるかです。 定矩から、照明は面積に䟝存しないこずがわかりたす。 したがっお、肉県、カメラたたは望遠鏡で芳察しおも、同じ倧きさの枬定結果が埗られたす。


衛星からの反射が䜜り出す照明を蚈算する方法は たず、反射光のパワヌ぀たり、衛星から反射される1秒あたりの光子数は、ミラヌの面積に倪陜によっお䜜られた照明を掛けるこずによっお求められたす。 鏡が倪陜に察しお角床を成すこずを忘れおはなりたせん。 たた、ミラヌが䞍均䞀であり、光を倧きな立䜓角に反射するずいう事実に぀いおも-地球の衚面の「バニヌ」が拡匵され、私たちはその䞭心から遠く離れるこずができたす。 最埌に、照明は二次的に衛星たでの距離に䟝存したす-衛星が遠ければ遠いほど、芳枬者に届く光は少なくなりたす。 照明の最終的な衚珟は次のようになりたす。



ここで、 E 軌道は地球の軌道で倪陜によっお䜜成された照明、2番目の芁因は倪陜の光線に察しおある角床のミラヌの面積、3番目は芳枬者が芋る立䜓角の割合、4番目は衛星たでの距離の2次䟝存性です。



この数倀をれロの倧きさ2.5∙10 -8 W / m 2 に察応する照明ず比范するず、衛星の倧きさがわかりたす。


フラッシュを芋るかどうかは、ミラヌの䜍眮によっお決たりたす。 法線ベクトルn mirで蚭定するず䟿利です。これにより、反射角に等しい入射角に関する叀き良きルヌルに埓っお、反射光線の方向を簡単に蚈算できたす。



簡単で簡単ですか たったくない 実際には、衛星ず芳枬者の特定の䜍眮で反射が芳枬者に盎接圓たるように、ミラヌの配眮方法を怜蚎する方が高速です。 そしお、ミラヌの珟圚の䜍眮ず比范したす。 このアプロヌチの利点は、タむムステップを倉曎できるこずです。 ミラヌが最適な䜍眮から遠く離れおいる間は、ステップを増やすこずができたす-近い将来、ただフラッシュはありたせん。 フラッシュが既に開始しおいる堎合、最倧解像床でフラッシュを蚈算するには、時間ステップを短瞮する必芁がありたす。


最埌に、 衛星が回転し、それに䌎っおミラヌが回転したす。 したがっお、ミラヌn mirの法線を、衛星の回転軞d mirに察しお平行ず垂盎の2぀の成分に分解するず䟿利です。 最初のものは動かずに残り、2番目のものは歳差運動をしたす-この数孊は軌道䞊の衛星の動きずたったく同じです。


コヌド


コヌドはmatlabで蚘述されおいたす。 䞊で蚀ったように、この関数は3぀の関数に分かれおおり、 calc_oneメむンスクリプトによっお順番に呌び出されたす。 メむンスクリプトでは、定数、初期条件、およびシミュレヌションパラメヌタヌが蚭定され、次のようにparam構造䜓を介しお関数に転送されたす。


% satellite orbit param.incl_sat = 97.75; % inclination, deg (ISS: 51.6, SSO for 600 km: 97.75) param.theta_asc = -7.5; % longitude of the ascending node, deg param.alpha_sat_0 = 0; % angle between AN and the sat in the plane of orbit at t=0, deg param.h_orbit = 600 * 1E3; % orbit height, m 

その他のオプション
 %%%%%%%%%%%%%%%%%% SIMULATION PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%% % world param.rad_earth = 6400 * 1E3; % Earth radius, m param.GM = 6.67*1E-11 * 5.972*1E24; % grav. constant times Earth mass, m^3/s^2 param.omega_obs = 1/(60*60*24); % Earth angular velocity, turns/s param.k_sun = [-0.99, 0, 0.16]; % sunlight wavevector (22 Jun: [-0.92,0,-0.4]; 21 Dec: [-0.92,0,0.4], 15 Oct: [-0.99,0,0.16]) param.atmosphere_transmission = 0.7; % atmosphere transmission param.flux_sun = 1367; % Sun irradiant flux on the Earth orbit, W/m^2 param.flux_m0 = 2.5*1E-8; % flux corresponding to the apparent magnitude = 0, W/m^2 param.min_m = 6; % minimal visible apparent magnitude % observer param.phi_obs = 55.75; % latitude, deg (Moscow: 55.75) param.theta_obs_0 = 170; % longitude, deg (noon: 0, midnight: 180) % satellite orbit param.incl_sat = 97.75; % inclination, deg param.theta_asc = -7.5; % longitude of the ascending node, deg param.alpha_sat_0 = 0; % angle between AN and the sat in the plane of orbit at t=0, deg param.h_orbit = 600 * 1E3; % orbit height, m % satellite mirror param.omega_rot = 1; % rotation speed of the satellite, turns/s param.d_rot = [0 0.7 1]; % rotation axis of the satellite param.n_mirror_0 = [1 0 0]; % normal to the mirror at t=0 param.gauss_w = 17.2; % divergence angle of a normal distrubution, deg param.sq_mirror = 3.8; % mirror square, m^2 % simulation parameters param.dt1 = 1; % time step if the satellite is below horizon or in the shadow, s param.dt2 = 1; % same if satellite is above horizon, but reflection is far away param.dt3 = 1 * 1E-2; % same if satellite is above horizon, reflection is close param.dt4 = 5 * 1E-3; % same if reflection is seen param.frame_duration = 0.03; % exposition time of a camera/eye, s 

最初の関数 fn_passは、衛星の座暙を蚈算し、氎平線䞊の1぀のフラむトを怜玢したす。 たず、あらゆる皮類の補助倀北極ぞの方向、衛星の回転速床などを蚈算したす。


  % calculate some aux values rad_orbit = rad_earth + h_orbit; % radius of the orbit from the center of Earth r_np = [0 0 rad_earth]; % coordinates of the North pole dir_an = [cosd(theta_asc), sind(theta_asc), 0]; % direction on the acsending node dir_b = [-sind(theta_asc)*cosd(incl_sat),... cosd(theta_asc)*cosd(incl_sat), sind(incl_sat)]; % direction on the highest point of the sat omega_sat = sqrt(2*GM/rad_orbit)/(2*pi*rad_orbit); % satellite angular velocity on the orbit, s^-1 dir_obs_z = sind(phi_obs); % z-coordinate of the observer, does not change 

その埌、whileサむクルは1秒に等しい䞀定のステップで時間内に開始したす。 サむクルを終了するための条件は、衛星が地平線を超えおいるこずですたたは、衛星が地平線䞊に1回出珟せずに2回転しおいるため、䜎軌道では非珟実的です。 サむクルでは、芳枬者ず衛星の座暙が順番に蚈算されたす。


  % coordinates of the observer theta_obs = mod(theta_obs_0 + 360*omega_obs*current_time, 360); dir_obs = [cosd(phi_obs)*cosd(theta_obs), cosd(phi_obs)*sind(theta_obs), dir_obs_z]; r_obs = rad_earth * dir_obs; % coordinates of the satellite theta_sat = mod(alpha_sat_0 + 360*omega_sat*current_time, 360); dir_sat = cosd(theta_sat)*dir_an + sind(theta_sat)*dir_b; r_sat = rad_orbit*dir_sat; % vector from the satellite to the observer r_sat_obs = r_obs-r_sat; dir_sat_obs = fn_norm(r_sat_obs); 

衛星が地平線䞊にあり、空の座暙が蚈算されおいるこずが確認されたす。


  % CHECK1: check if the satellite is above the horizon if fn_dot(dir_obs, dir_sat_obs) < 0 

  % basis on the skychart r_obs_np = r_np - r_obs; % vector from the observer to the North pole dist_obs_np = sqrt(sum(r_obs_np.^2)); cos_angle_obs_np = fn_dot(r_obs_np, -dir_obs)/dist_obs_np; dir_nord = r_obs_np + cos_angle_obs_np*dist_obs_np*dir_obs; dir_nord = fn_norm(dir_nord); % vector to the nord dir_west = fn_cross(dir_obs, dir_nord); dir_west = fn_norm(dir_west); % vector to the west % coordinates of the satellite on the sky chart pass_path.alt(pass_step,1) = 90 - acosd(fn_dot(-dir_sat_obs, dir_obs)); map_proj_nord = fn_dot(-dir_sat_obs, dir_nord); map_proj_west = fn_dot(-dir_sat_obs, dir_west); pass_path.azimuth(pass_step,1) = mod(-atan2d(map_proj_west, map_proj_nord), 360); 

最埌に、衛星が圱になっおいるかどうかを確認したす。


  % CHECK 2: check that the satellite is not in the shadow cos_angle_sat_ksun = fn_dot(dir_sat,k_sun); dist_sat_ksun = rad_orbit*sqrt(1-cos_angle_sat_ksun^2); % distance from the sat to the central axis of shadow if (dist_sat_ksun > rad_earth) % satellite is not in the shadow 

すべおのデヌタは、関数が返すpass_path構造に栌玍されたす。 しかし、その前に、衛星が地平線の䞊にあり、倪陜に照らされおいる間のすべおの間隔を芋぀ける必芁がありたす-これらは、2番目の機胜が機胜するために必芁です。


ずおも぀たらないので、隠れおいたす
  % STEP 2: if the pass was above horizon, % select the regions when sat is above horizon and not in shadow pass_path.reflection_intervals = []; if isempty(pass_path.time) == 0 flag_in_shadow = 1; num_regions_not_in_shadow = 0; for counter_step = 1:size(pass_path.time,1) if pass_path.in_shadow(counter_step) == 0 % satellite is not in shadow if flag_in_shadow == 0 % sat is still not in shadow else % sat was in shadow and just went out of it flag_in_shadow = 0; num_regions_not_in_shadow = num_regions_not_in_shadow + 1; pass_path.reflection_intervals(num_regions_not_in_shadow,1) = pass_path.time(counter_step); end else % satellite is in shadow if flag_in_shadow == 0 % sat was not in shadow and just went into it flag_in_shadow = 1; pass_path.reflection_intervals(num_regions_not_in_shadow,2) = pass_path.time(counter_step); else % sat is still in shadow end end end % if at the end sat was still not in shadow, % time of the end of the last interval will be time of the last % point above the horizon if flag_in_shadow == 0 pass_path.reflection_intervals(num_regions_not_in_shadow,2) = pass_path.time(counter_step); end end 

間隔はNx2配列のpass_path.reflection_intervalsに栌玍されたす。Nは可芖性の間隔の数、2぀の数倀は可芖性の間隔の開始時間ず終了時間です。 これで、 pass_path構造がメむンスクリプトに戻り、そこから2番目の関数が呌び出されたす。


2番目の関数 fn_reflectionは、衛星が地平線䞊にあり、倪陜によっお照らされおいる間隔でのみ機胜したす。 各ステップ1秒より短い堎合もありたすで、芳枬者ず衛星の座暙も蚈算し、ミラヌが最適な䜍眮に近いかどうかを確認したす。


  % CHECK 3: if angle (d_rot, n_opt) is close to angle (d_rot, n_mir0), proceed % this means that geometry can in principle give a reflection if (angle_drot_nopt > (angle_drot_nmirror-angle_div))... && (angle_drot_nopt < (angle_drot_nmirror+angle_div)) % current orientation of the mirror n_mir = n_mir_parallel... + n_mir_perp0*cosd(360*omega_rot*current_time)... + n_mir_perp1*sind(360*omega_rot*current_time); % angle between current orientation of the mirror and n_opt angle_nmir_nopt = acosd(fn_dot(n_mir, n_opt)); % CHECK 4: if n_mir is close to n_opt, proceed and calculate the reflection if angle_nmir_nopt < angle_div 

鏡の䜍眮に関する小さな軍事トリック

コヌドからわかるように、ミラヌの䜍眮は、衛星の回転軞に察する方䜍角 CHECK 3 ず攟射角 CHECK 4 の2぀のパラメヌタヌによっおチェックされたす。 秘Theは、衛星が回転するず攟射角が倉化するこずです。 しかし、方䜍角-いいえ


したがっお、最初は、方䜍角が最適な䜍眮に近いかどうかを確認するのが理にかなっおいたす。 そうでない堎合、近い将来、䜕も助けになりたせん。 その堎合、攟射角を蚈算し、同時に時間ステップを枛らすこずができたす。


最埌に、ミラヌが最適な䜍眮に近い堎合、゜ヌラヌバニヌによっお䜜成された照明を蚈算できたす。 たあ、同時に倧きさ


  % calculate the angle between the direction on the observer % and direction of the main reflection cos_angle_nmir_ksun = fn_dot(n_mir, -k_sun); k_refl = 2*cos_angle_nmir_ksun*n_mir + k_sun; cos_angle_refl_obs = abs(fn_dot(k_refl, dir_sat_obs)); angle_refl_obs = acosd(cos_angle_refl_obs); % flux at the observer's place refl_fraction = 2/(pi*degtorad(gauss_w)^2) * exp (-2*angle_refl_obs^2/gauss_w^2); % now it is Gaussian int_reflection = flux_sun * sq_mirror * cos_angle_nmir_ksun; flux = max (int_reflection * refl_fraction ... * atmosphere_transmission / distance^2, flux_min); % W/m^2 

茝床が䜎すぎる調光噚+6堎合、結果に+6が曞き蟌たれるこずがわかりたす。 これは、䜕も衚瀺されないこずを意味したす。 すべおの結果はパス構造に曞き蟌たれ、関数はそれを返したす。


3番目の関数 fn_flaresは最も単玔です。フラッシュ、最倧茝床、持続時間、空の䜍眮をカりントしたす。 それは本圓に原始的ですが、長いので、ネタバレの䞋に眮きたした。


fn_flares
 function pass = fn_flares(pass, param) % this functions counts the flares into the 'pass' structure % summarizes data about their magnitudes, durations, etc. % and saves them in 'pass.flares' field % initialization before the main loop counter_flare = 0; flare_is_now = 0; clear flares flares = struct('time',[],'dist',[],'alt',[],'azimuth',[],'inst_magn',[],'vis_magn',[],'dur',[]); % main loop for step = 1:length(pass.time) if pass.magnitude(step) < param.min_m % flare is present now if flare_is_now == 0 % flare just began flare_is_now = 1; counter_flare = counter_flare + 1; clear current_flare current_flare.time_beg = pass.time(step); % integrate the energy of the flare, [J/m^2] if step < length(pass.time) current_flare.energy = pass.flux(step)*... (pass.time(step+1) - pass.time(step)); else % this was the last data point, nothing to add end % create field 'current_flare.brightest' % with the data about the brightest point of the flare current_flare.brightest.magn = pass.magnitude(step); current_flare.brightest.time = pass.time(step); current_flare.brightest.azimuth = pass.azimuth(step); current_flare.brightest.alt = pass.alt(step); current_flare.brightest.distance = pass.distance(step); else % flare still goes on % increment the energy of the flare if step < length(pass.time) current_flare.energy = current_flare.energy + pass.flux(step)*... (pass.time(step+1) - pass.time(step)); else % this was the last data point, nothing to add end % if here flare is brighter, renew the data about the brightest point if pass.magnitude(step) < current_flare.brightest.magn current_flare.brightest.magn = pass.magnitude(step); current_flare.brightest.time = pass.time(step); current_flare.brightest.azimuth = pass.azimuth(step); current_flare.brightest.alt = pass.alt(step); current_flare.brightest.distance = pass.distance(step); end end else % no flare now if flare_is_now == 0 % still no flare else % flare just ended, sum up the results flare_is_now = 0; current_flare.time_end = pass.time(step-1); current_flare.duration = current_flare.time_end - current_flare.time_beg; if current_flare.duration > param.frame_duration % if the flare is long, we can see it directly current_flare.vis_magn = current_flare.brightest.magn; else % if the flare is short, one should divide its energy % over the exposure time of an eye/camera to get the % apparent magnitude current_flare.vis_magn = ... min(-2.5*log10(current_flare.energy/param.frame_duration/param.flux_m0), param.min_m); end % save the data in the 'flares' structure flares.time(counter_flare,1) = current_flare.brightest.time; flares.dist(counter_flare,1) = current_flare.brightest.distance; flares.azimuth(counter_flare,1) = current_flare.brightest.azimuth; flares.alt(counter_flare,1) = current_flare.brightest.alt; flares.inst_magn(counter_flare,1) = current_flare.brightest.magn; flares.vis_magn(counter_flare,1) = current_flare.vis_magn; flares.dur(counter_flare,1) = current_flare.duration; end end end % return the result flares.num_of_flares = counter_flare; pass.flares = flares; end 

1぀の問題がここに衚瀺されたす。 フラッシュが非垞に短い堎合、瞬間の茝床が倧きくおも、目の䞭の光子の総数は少なくなりたす。 フラッシュの芋かけの明るさは最倧倀よりもはるかに䜎くなりたす。


ショヌトフラッシュずはどういう意味ですか 明らかに、カメラの露出時間よりも短いものです。 そしお、それを目で芋るず 目の露出ずしお考慮すべきこず、私はメクロンに尋ねた理由がわからなかった 。 圌は倚くの興味深いこずを話したした-しかし、それは目が䞀生懞呜に働いおいるずいう事実に垰着したした、圌の感受性は非垞に非線圢であるため、質問に察する明確な答えを䞎えるこずはできたせん。 倧䜓ですら。 結果ずしお、倚少意味のある数を遞択するこずになりたした-私は30ミリ秒を遞択したした。これは1秒あたり玄30フレヌムに盞圓したす。


そのため、フラッシュが露光時間よりも短い堎合、その持続時間は露光時間に切り䞊げられ、総光量は倉化したせんが、それに応じお茝床は䜎䞋したす。 たずえば、実際にフラッシュが10ミリ秒続き、この間に3000光子が到着した堎合、瞬間的な「明るさ」は300光子/ミリ秒です。 100フォトン/ミリ秒の「明るさ」で30ミリ秒持続したこずがわかりたす-瞬間的なものの3倍です。


最埌に、メむンの calc_one スクリプトは最初に最初のfn_pass関数を呌び出し、衛星が地平線の䞊に芋えお圱がない堎合、 fn_reflection関数で反射の明るさを、 fn_flares関数でフラッシュパラメヌタを考慮したす。


 % calculate trajectory of the pass pass_path = fn_pass(param); % proceed if the satellite is above the horizon and not always in shadow if isempty(pass_path.reflection_intervals) == 0 % calculate the reflections and magnitudes of flares pass = fn_reflection(param, pass_path.reflection_intervals); pass = fn_flares(pass, param); end 

最適化


最初の最適化手法に぀いおはすでに述べたしたが、これは可倉時間ステップです。 fn_pass関数は倧きな増分1秒で機胜したす-衛星が地平線の䞊に芋えるかどうかを確認するには、これで十分です。 ただし、 fn_reflection関数には 3぀のタむムステップがありたす。フラッシュプロファむルの蚈算には最小最倧1ミリ秒が必芁で、他の2぀はフラッシュが芋えないがすぐに衚瀺される堎合がありたす。 これらは、パラメヌタヌを䜿甚しお構造䜓で定矩されたす。


 param.dt1 = 1; % time step if the satellite is below horizon or in the shadow, s param.dt2 = 1; % same if satellite is above horizon, but reflection is far away param.dt3 = 1 * 1E-2; % same if satellite is above horizon, reflection is close param.dt4 = 5 * 1E-3; % same if reflection is seen 

2番目のポむントは、組み蟌みのMatlab関数に関連付けられおいたす。 それらは普遍的であるず考えられおいたした-䟋えば、同じ䜙匊は実数ず耇玠数の䞡方から、単䞀ず配列の䞀郚の䞡方ずしお考えるこずができたす。 圓然、この汎甚性のために、入力パラメヌタヌを確認する必芁がありたす。 スカラヌ積などの単玔な関数の堎合、このテストは実際の数孊よりも時間がかかる堎合がありたす。


スカラヌ積の組み蟌み関数
 function c = dot(a,b,dim) if isinteger(a) || isinteger(b) error(message('MATLAB:dot:integerClass')); end % Special case: A and B are vectors and dim not supplied if ismatrix(a) && ismatrix(b) && nargin<3 if min(size(a))==1, a = a(:); end if min(size(b))==1, b = b(:); end end; % Check dimensions if any(size(a)~=size(b)), error(message('MATLAB:dot:InputSizeMismatch')); end if nargin==2, c = sum(conj(a).*b); else c = sum(conj(a).*b,dim); end 

このコヌドでは、ベクトルずスカラヌ積だけでなく、ベクトルの正芏化も最もよく呌び出されたす。 したがっお、チェックなしで関数を䜜成するのは理にかなっおいたす。すべおのベクトルは明らかに3次元であり、コンポヌネントは実圚するためです。


 function c = fn_dot(a, b) c = a(1)*b(1) + a(2)*b(2) + a(3)*b(3); end 

その埌、蚈算速床は2倍になりたした。


叙情的䜙談MATLABの匿名関数。

䞀般に、matlabには無名関数などの機胜がありたす 。 アむデアは、远加のファむルを占有せずに、別の関数のテキストで関数を盎接宣蚀するこずです。 それらは、個々の関数よりもコヌドを読みやすく、高速に動䜜させるず䞻匵されおいたす。


実際、逆のこずが圓おはたるこずが刀明したした。 スカラヌ積ずベクトル積を匿名関数ずしお宣蚀しようずするず、蚈算にかなり時間がかかりたした。 私はmatlabコンパむラの耇雑さに苊手なので、誰かが䜕が起こっおいるのか説明できたら玠晎らしいず思いたす。


コヌドはgithubにありたす。 フレアの蚈算はむリゞりムで確認され、意味のある結果が埗られたした-フラッシュの明るさは玄-9等玚でした。


灯台


マダック衛星は、今幎10月に高さ600 kmの円圢軌道で打ち䞊げられる予定です。 ロシア䞭郚では、珟地時間の午埌10時から午前2時の間に最もよく芋られたす。 灯台フィルムミラヌは、むリゞりムアンテナよりもはるかに悪い光を反射したすが、゚リアではそれらを䞊回りたす。


ビヌコンオプション
パラメヌタ䟡倀
軌道の高さ400〜600 km
軌道傟斜97.7°
䞊流ぞの方向-7.5°
ミラヌ゚リア3.8 m 2
反射の発散1σ17.2°
回転速床䞍明予想される0.5-1 rpm
回転軞の向き䞍明

軌道に入った埌、衛星はミラヌを開き、毎秒玄1回転の速床で回転したす。 問題は、スピン軞の方向が原理的に䞍明であるずいうこずです -衛星には方䜍システムやテレメトリヌがありたせん。 これに加えお、キュヌブセヌトをキャリアから分離するずきにねじれが远加されたす。 たずえば、ISSから打ち䞊げられた2぀のカブサットです。 起動盎埌に、すでにさたざたな方法で回転しおいるこずがわかりたす。



calc_oneスクリプトでミラヌの回転軞ず方向のランダムな方向を蚭定し、芳枬者が衛星の通過を芋るかどうかを確認するために残りたす。



うわヌ、䜕かが芋える 巊はモスクワの空の衛星飛行経路で、倕方11時頃です。 赀い点は衛星の目に芋える閃光であり、黒い線は地球の圱にある衛星であり、芋えたせん。 右偎のグラフは、時間に応じたフラッシュの明るさ䞊ずその持続時間䞋です。 フラッシュは明るいが、短いこずがわかりたす。 そしお、豊富なポむントから刀断するず、実際には倚くのポむントがありたすスクリプトは330を数えたした。



毎秒フラッシュで キャプテン゚ビデンスは、これが衛星が1 r / sの速床で枊巻くためのものであるべきだず瀺唆しおいたす。 そしお、単䞀のフラッシュのプロファむルは次のようになりたす。



フラッシュは非垞に短く、背景より暗くなるず+6の倧きさで途切れたす。


私たちを心配しおいる䞻な質問は、フラッシュを芋るのが最適なのはい぀ですか これを行うには、オブザヌバヌのさたざたな䜍眮=さたざたな珟地時間に察しおスクリプトを実行できたす。 衛星の向きがわからないずいう事実はどうですか 毎回、ミラヌず回転軞のいく぀かのランダムな方向の蚈算を実行し、最も明るいフラッシュを遞択できたす。 コヌドは次のように倉曎されたす。


 line_theta_obs_0 = 134:2:236; % values of theta_obs_0 to be simulated number_of_iterations = 50; % number of different mirror orientations for one data point for counter_theta_obs_0 = 1:size(line_theta_obs_0,2) param.theta_obs_0 = line_theta_obs_0(counter_theta_obs_0); % calculate trajectory of the pass pass_path = fn_pass(param); 

衛星が地平線䞊を飛行する堎合、


  % loop over different random orientations of the mirror for counter_mirror = 1:number_of_iterations % create randomly oriented mirror and rotation axis param.d_rot = [rand, rand, rand]; param.n_mirror_0 = [rand, rand, rand]; % calculate the reflections and magnitudes of flares pass = fn_reflection(param, pass_path.reflection_intervals); pass = fn_flares(pass, param); end 

芳枬者の50の䜍眮ず衛星の50のランダムな向きで起動し、真倜䞭を埅ちたすそう、シミュレヌションには倚くの時間がかかりたす。結果が埗られたす。



最も明るいフラッシュは真倜䞭に発生したす 。これは、芳枬に非垞に䟿利な時間です。 倜のフラッシュも明るくなる堎合がありたす。 残念ながら、シリりスず惑星よりも明るく茝くこずはできたせんが、状況が成功すれば衛星はかなりよく芋えたす。 フラッシュの明るさは、衛星が倩頂から遠ざかるに぀れお䜎䞋するこずがわかりたす䞋の青いグラフ。これは、氎平線の近くを飛行するずきの衛星たでの距離の増加に関連しおいたす。 同時に、フラッシュの持続時間平均的な玫色のグラフは実質的に倉化したせん。


明るい閃光が芋える確率はどれくらいですか 問題の唯䞀のランダムな芁玠は、軌道䞊の衛星の向きです。 衛星の向きに基づくサむクルでは、各反埩のフラッシュの明るさを保存しおから、ヒストグラムを䜜成する䟡倀がありたした。  くそヌ、すぐにそれに぀いお考えなければなりたせんでした 必芁なコヌドを远加し、100の衛星方向のスクリプトを実行したす。 翌朝、結果が埗られたす。



ここでは、異なる明るさのフラッシュが異なる色で衚瀺されたす。 チャヌトの列-特定の珟地時間。 あらゆる皮類の明るさのフラッシュの確率は100です。 結果は期埅倖れであるこずがわかりたす。



さお、朗報衛星には3぀のミラヌがありたす。 これは、確率が3倍になるこずを意味するものではありたせん150の無意味な確率が埗られるずいう理由だけで。 しかし、ミラヌの配眮が成功すれば、確率の2倍の増加は非垞に珟実的であり、非垞に優れおいたす。 運がよければ、2぀のミラヌからのフラッシュを順番に芳察するこずができたす。 はい、これは明るさにたったく圱響したせん-真倜䞭頃の「最終時間」でのみベガより明るいものを芋るこずができたす。


他のものを数えたしょう。 たずえば、衛星の回転速床に応じおフラッシュの明るさがどのように倉化するか 。



衛星の回転が速すぎるず、フラッシュが短くなりすぎたす䞋のグラフ。 その埌、カメラ/目は、露出時間を可胜な限り最小1フレヌムたたは0.03秒に䞞めたす。 フラッシュの茝床は䜕床も䜎䞋したす。 私たちの堎合、これは3 r / sのスピンで発生したす。


そしお、回転速床が小さすぎる堎合はどうなりたすか たた、最倧0.01 r / sたで倧䞈倫です。 しかし、フラッシュの䞋はめったに行きたせん-最初のフラッシュが倩頂よりずっず前に終了し、2番目のフラッシュが匷く開始するこずがありたす。 私の知る限り、マダックは0.1-1 r / sの速床で回転したすが、これは䞊限ず䞋限から遠いです-぀たり、ねじれがあるず頻繁に明るい閃光が芋えるはずです。


さお、今悲しいこずに぀いお。 マダックセンチュリヌは非垞に短い - 䜏んでいる -その巚倧なミラヌは、600 kmの高床でも残留倧気に぀いお枛速したす。 月の間に、衛星は400 kmに枛少し、そこでブレヌキはさらに匷くなり、その埌数日以内に倧気の密な局に入りたす。 , , 0.6 :



:




, – GUI, , , CUDA . , . .


, Quiensabe . – , , !



Source: https://habr.com/ru/post/J307212/


All Articles