From 34547227edb3ef151f5a038d248362303fd1f426 Mon Sep 17 00:00:00 2001 From: KOSASIH Date: Tue, 30 Jul 2024 08:16:01 +0700 Subject: [PATCH] Create communication_system_simulator.py --- .../communication_system_simulator.py | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 core/aerospace/communication_system_simulator.py diff --git a/core/aerospace/communication_system_simulator.py b/core/aerospace/communication_system_simulator.py new file mode 100644 index 0000000..36c5bd9 --- /dev/null +++ b/core/aerospace/communication_system_simulator.py @@ -0,0 +1,82 @@ +import numpy as np + +class CommunicationSystemsSimulator: + def __init__(self, spacecraft, groundStation): + self.spacecraft = spacecraft + self.groundStation = groundStation + + def simulateCommunication(self): + # Calculate signal strength + signalStrength = self.calculateSignalStrength() + + # Calculate data rate + dataRate = self.calculateDataRate() + + # Update spacecraft and ground station communication status + self.spacecraft.updateCommunicationStatus(signalStrength, dataRate) + self.groundStation.updateCommunicationStatus(signalStrength, dataRate) + + def calculateSignalStrength(self): + # Calculate signal strength using free space path loss equation + frequency = self.spacecraft.getFrequency() + distance = self.spacecraft.getDistanceToGroundStation() + transmitterPower = self.spacecraft.getTransmitterPower() + antennaGain = self.spacecraft.getAntennaGain() + wavelength = self.spacecraft.getWavelength() + + signalStrength = transmitterPower * antennaGain * wavelength**2 / ((4 * np.pi * distance)**2) + + return signalStrength + + def calculateDataRate(self): + # Calculate data rate using Shannon-Hartley theorem + bandwidth = self.spacecraft.getBandwidth() + signalToNoiseRatio = self.spacecraft.getSignalToNoiseRatio() + + dataRate = bandwidth * np.log2(1 + signalToNoiseRatio) + + return dataRate + +class Spacecraft: + def __init__(self, frequency, distanceToGroundStation, transmitterPower, antennaGain, wavelength, bandwidth, signalToNoiseRatio): + self.frequency = frequency + self.distanceToGroundStation = distanceToGroundStation + self.transmitterPower = transmitterPower + self.antennaGain = antennaGain + self.wavelength = wavelength + self.bandwidth = bandwidth + self.signalToNoiseRatio = signalToNoiseRatio + self.communicationStatus = {"signalStrength": 0, "dataRate": 0} + + def getFrequency(self): + return self.frequency + + def getDistanceToGroundStation(self): + return self.distanceToGroundStation + + def getTransmitterPower(self): + return self.transmitterPower + + def getAntennaGain(self): + return self.antennaGain + + def getWavelength(self): + return self.wavelength + + def getBandwidth(self): + return self.bandwidth + + def getSignalToNoiseRatio(self): + return self.signalToNoiseRatio + + def updateCommunicationStatus(self, signalStrength, dataRate): + self.communicationStatus["signalStrength"] = signalStrength + self.communicationStatus["dataRate"] = dataRate + +class GroundStation: + def __init__(self): + self.communicationStatus = {"signalStrength": 0, "dataRate": 0} + + def updateCommunicationStatus(self, signalStrength, dataRate): + self.communicationStatus["signalStrength"] = signalStrength + self.communicationStatus["dataRate"] = dataRate