軟件版本: STK 11.6/ MATALB R2018b
使用connect命令用MATLAB在STK中自動搭建LEO衛星星座系統,參考了https://zhuanlan.zhihu.com/p/68385977?utm_source=wechat_session
代碼都是逐句嘗試,進度超慢,而且使用connect命令來讀取STK里的信息很麻煩,之后會嘗試加上COM方法。
stkInit;
conid = stkOpen(stkDefaultHost);
% 設置場景大氣模型(雨衰)
stkConnect(conid,'Environment','*','SetValue PropagationChannel.UseRainModel true');
stkConnect(conid,'Environment','*','SetValue PropagationChannel.RainModel ITU-R_P618-5');
stkConnect(conid,'Environment','*','SetValue PropagationChannel.RainModel.SurfaceTemperature 78.6 degC');
stkConnect(conid,'Environment','*','SetValue RainOutagePercent 0.03');
% 新建地面站
stkNewObj('/*','Facility','ChengDu');
stkConnect(conid,'SetPosition','*/Facility/ChengDu Geodetic', '30 104 0.0 MSL');
stkConnect(conid,'SetConstraint','*/Facility/ChengDu ElevationRate','Min 40');
stkNewObj('/*','Facility','Alaska');
stkConnect(conid,'SetPosition','*/Facility/Alaska Geodetic', '64.86 -147.85 0.0 MSL');
stkConnect(conid,'SetConstraint','*/Facility/Alaska ElevationRate','Min 40');
% 添加地面傳感器并設置傳感器參數
stkNewObj('*/Facility/ChengDu','Sensor','CHDU_Sen');
stkNewObj('*/Facility/Alaska','Sensor','Alaska_Sen');
stkConnect(conid,'Define','*/Facility/ChengDu/Sensor/CHDU_Sen','SimpleCone 20');
stkConnect(conid,'Define','*/Facility/Alaska/Sensor/Alaska_Sen','SimpleCone 20');
% 地面站發射機(Complex_Transmitter_Model/Phased_Array)
strSetTrans =[ 'SetValue Model Complex_Transmitter_Model'];
stkNewObj('*/Facility/ChengDu/Sensor/CHDU_Sen','Transmitter','ULXmtr_ChengDu');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu',strSetTrans);
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','SetValue Model.AntennaControl.Antenna Phased_Array');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','SetValue Model.Frequency 28.5 GHz');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','SetValue Model.Power 18.12 dBW');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','SetValue Model.UseFilter true');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','Setvalue Model.Filter.LowerBandwidthLimit -0.25 GHz');
stkConnect(conid,'Transmitter','*/Facility/ChengDu/Sensor/CHDU_Sen/Transmitter/ULXmtr_ChengDu','Setvalue Model.Filter.UpperBandwidthLimit 0.25 GHz');stkNewObj('*/Facility/Alaska/Sensor/Alaska_Sen','Transmitter','ULXmtr_Alaska');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska',strSetTrans);
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','SetValue Model.AntennaControl.Antenna Phased_Array');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','SetValue Model.Frequency 28.5 GHz');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','SetValue Model.Power 18.12 dBW');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','SetValue Model.UseFilter true');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','Setvalue Model.Filter.LowerBandwidthLimit -0.25 GHz');
stkConnect(conid,'Transmitter','*/Facility/Alaska/Sensor/Alaska_Sen/Transmitter/ULXmtr_Alaska','Setvalue Model.Filter.UpperBandwidthLimit 0.25 GHz');
% 新建衛星
% stkConnect(conid,'ImportTLEFile','*','"C:\Users\l\Documents\STK 11 (x64)\SpaceX_tle.tle" SSCNumber 44235 Autopropagate On'); % TLE文件導入
stkNewObj('/*','Satellite','SeedSat');
t_start=0; t_stop=24*3600; orbitEpoch=t_start; dt=60;
a=6928.137*1000; e=0.0; i=53.0*pi/180;
w=0*pi/180; Raan=160*pi/180; M=0*pi/180;
stkSetPropClassical('*/Satellite/SeedSat','J4Perturbation','J2000',t_start,t_stop,dt,orbitEpoch,a,e,i,w,Raan,M);
% 添加衛星傳感器并設置傳感器參數
stkNewObj('*/Satellite/SeedSat','Sensor','Sen');
strSetSensor = 'Conical 0 44.85 AngularRes 360.0';
stkConnect(conid,'Define','*/Satellite/SeedSat/Sensor/Sen',strSetSensor);
% 衛星接收機(Complex_Receiver_Model/Phased_Array)
stkNewObj('/*/Satellite/SeedSat/Sensor/Sen','Receiver','ULRcvr');
stkConnect(conid,'Receiver','*/Satellite/SeedSat/Sensor/Sen/Receiver/ULRcvr','SetValue Model Complex_Receiver_Model');
stkConnect(conid,'Receiver','*/Satellite/SeedSat/Sensor/Sen/Receiver/ULRcvr','SetValue Model.AntennaControl.Antenna Phased_Array');
% 衛星數字轉發器(Multibeam_Transmitter_Model/Phased_Array)
stkNewObj('*/Satellite/SeedSat/Sensor/Sen','Transmitter','DLXmtr');
stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','SetValue Model Multibeam_Transmitter_Model');
stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','SetValue Model.Frequency 13.5 GHz');
stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','SetValue Model.UseFilter true');
stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','Setvalue Model.Filter.LowerBandwidthLimit -0.125 GHz');
stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','Setvalue Model.Filter.UpperBandwidthLimit 0.125 GHz');
NumBeams = 2; % 3 beams
for k = 0:NumBeamsstkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr','AddItem Model.AntennaSystem.AntennaBeams');
end
for k = 0:NumBeamsstrNumBeams = int2str(k);stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].Power 10 dBW']);stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].Frequency 13500000000 Hz']);stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.AzimuthAngle ' int2str(i*30) ' deg']);stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.ElevationAngle ' int2str(40+i*20) ' deg']); % ElevationAngle的取值為-90°~90°stkConnect(conid,'Transmitter','*/Satellite/SeedSat/Sensor/Sen/Transmitter/DLXmtr',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.AboutBoresight Hold']);
end
% 用戶接收機(MultiBeam)
stkNewObj('*','Place','User1');
stkConnect(conid,'SetPosition','*/Place/User1 Geodetic', '40 120 0.0 MSL');
stkNewObj('*/Place/User1','Sensor','user1_Sen');
stkNewObj('/*/Place/User1/Sensor/user1_Sen','Receiver','DLRcvr_User1');
stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1','SetValue Model Multibeam_Receiver_Model');
stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1','AddItem Model.AntennaSystem.AntennaBeams');
stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1','AddItem Model.AntennaSystem.AntennaBeams'); % 3 beams
for k = 0:NumBeamsstrNumBeams = int2str(k);stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].Frequency 13500000000 Hz']);stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.AzimuthAngle ' int2str(i*25) ' deg']);stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.ElevationAngle ' int2str(40+i*20) ' deg']); % ElevationAngle的取值為-90°~90°stkConnect(conid,'Receiver','*/Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1',['Setvalue Model.AntennaSystem.AntennaBeams[' int2str(i) '].AntennaControl.Orientation.AboutBoresight Hold']);
end
% 生成walker星座
disp('生成walker星座');
nPlan = 5; %平面數
nPerPlan = 8; % 每個平面衛星數
nRANNSpreed = 1;
% STK生成的衛星名稱為strSeedSat_**##,**代表平面數,##代表平面內衛星數
strSeedSat = 'SeedSat';
nFormatPlan = 1;
nFormatPerPlan = 1;
strFormatPlan = ['%0' int2str(nFormatPlan) 'd'];
strFormatPerPlan = ['%0' int2str(nFormatPerPlan) 'd'];
% 創建星座,命名為MyConst
strWalkerSet = ['Delta ' int2str(nPlan) ' ' int2str(nPerPlan) ' ' int2str(nRANNSpreed) ' 360.0 Yes ConstellationName MyConst'];
stkConnect(conid,'Walker', ['*/Satellite/' strSeedSat],strWalkerSet);
stkConnect(conid,'New','/ */Constellation','Cons2'); % 衛星接收機組成星座Cons2
stkConnect(conid,'New','/ */Constellation','Cons3'); % 衛星發射機組成星座Cons3
stkConnect(conid,'New','/ */Constellation','SatSen_Cons'); % 衛星發射機組成星座SatSen_Cons
for i = 1:nPlanfor j = 1:nPerPlanstrStarName = [strSeedSat num2str(i,strFormatPlan) num2str(j,strFormatPerPlan)];strSatReceiveCommand = ['*/Constellation/Cons2 Add Satellite/' strStarName '/Sensor/Sen/Receiver/ULRcvr'];stkConnect(conid,'Chains',strSatReceiveCommand);strSatTransmitterCommand = ['*/Constellation/Cons3 Add Satellite/' strStarName '/Sensor/Sen/Transmitter/DLXmtr'];stkConnect(conid,'Chains',strSatTransmitterCommand);strSatSensorCommand = ['*/Constellation/SatSen_Cons Add Satellite/' strStarName '/Sensor/Sen'];stkConnect(conid,'Chains',strSatSensorCommand);end
end
stkConnect(conid,'Point','*/Facility/ChengDu/Sensor/CHDU_Sen','Targeted Tracking Constellation/Cons2');
stkConnect(conid,'Chains','*/Constellation/Cons4','Add Place/User1/Sensor/user1_Sen/Receiver/DLRcvr_User1');
stkClose(conid);
總結
以上是生活随笔為你收集整理的MATLAB与STK互联搭建LEO卫星星座(connect方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。