You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Added :ref:`downlinkHandling` with a validated configuration interface (setters/getters), finite-value guards, and bounded outputs to prevent non-physical downlink rates.
2
+
- Added :ref:`DownlinkHandlingMsgPayload` diagnostics and dedicated unit-test coverage for equation parity, receiver-path selection, storage-limited behavior, and invalid-input handling.
3
+
- Improved storage-target selection robustness across connected storage status messages and aligned module documentation with implemented behavior and validation interface.
Copy file name to clipboardExpand all lines: src/simulation/communication/downlinkHandling/downlinkHandling.rst
+57-12Lines changed: 57 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -67,7 +67,7 @@ The module extends ``DataNodeBase`` and runs once per simulation step.
67
67
The per-step sequence is:
68
68
69
69
1. Read ``LinkBudgetMsgPayload`` and all connected storage status messages.
70
-
2. Select one storage partition (largest currently available data in the most recently connected storage unit).
70
+
2. Select one storage target (largest finite partition across all connected storage units; use ``storageLevel`` only when a message has no partition vector).
71
71
3. Select receiver path (forced receiver index or auto mode).
72
72
4. Convert selected CNR and overlap bandwidth into :math:`C/N_0`.
73
73
5. Convert :math:`C/N_0` and requested bit rate into :math:`E_b/N_0`.
3. :ref:`downlinkHandling` converts link quality to effective data transfer and storage removal.
253
283
4. Storage modules consume ``nodeDataOutMsg`` and reduce onboard buffered data.
254
284
285
+
.. warning::
286
+
287
+
Also important integration note:
288
+
Do not run ``spaceToGroundTransmitter`` and ``downlinkHandling`` as competing downlink removers
289
+
on the same storage partitions. Pick one downlink path.
290
+
255
291
This separation is useful for fault modeling: upstream RF degradation (pointing, frequency mismatch,
256
292
atmospheric attenuation, receive-state changes) naturally propagates into BER/PER and delivered data.
257
293
@@ -263,7 +299,9 @@ Assumptions and Current Limits
263
299
- Any bit error fails the packet.
264
300
- ARQ is expectation-based, not packet-by-packet Monte Carlo.
265
301
- No explicit ACK latency, coding gain, framing overhead, or adaptive coding/modulation.
266
-
- Storage partition selection currently targets the largest partition in the latest connected storage unit.
302
+
- ``REMOVE_DELIVERED_ONLY`` preserves dropped/undelivered bits onboard, but the module still uses an expected-rate ARQ model instead of explicit packet ACK/NACK timelines.
303
+
- Storage target selection prioritizes per-partition values. ``storageLevel`` is only used as fallback for messages that do not provide ``storedData`` entries.
304
+
- ``nodeDataOutMsg`` identifies storage by ``dataName`` only. If multiple linked storage units reuse the selected partition name, downlinkHandling forces removal to zero for that step to avoid ambiguous multi-unit draining. For multi-storage use, keep partition names globally unique across linked storage units.
267
305
268
306
Unit Test Coverage
269
307
------------------
@@ -276,22 +314,29 @@ The tests verify:
276
314
- equation parity versus a Python-equivalent BER/PER/ARQ model
277
315
- zero-flow behavior for invalid link inputs
278
316
- retry-cap effects on drop probability and removal/delivery behavior
317
+
- removal-policy behavior (``REMOVE_ATTEMPTED`` vs ``REMOVE_DELIVERED_ONLY``)
279
318
- storage-limited rate capping and drain behavior
280
319
- automatic receiver selection from antenna RX states and CNR values
320
+
- duplicate-storage input rejection
321
+
- storage-target selection across multiple storage status messages
322
+
- ambiguous duplicate partition-name behavior across multiple storage status messages
323
+
324
+
User Guide
325
+
----------
281
326
282
-
Usage Snippet
283
-
-------------
327
+
Basic setup example:
284
328
285
329
.. code-block:: python
286
330
287
331
from Basilisk.simulation import downlinkHandling, simpleStorageUnit
288
332
289
333
dlh = downlinkHandling.DownlinkHandling()
290
-
dlh.bitRateRequest =1.0e5# bit/s
291
-
dlh.packetSizeBits =1024.0# bit
292
-
dlh.maxRetransmissions =8
293
-
dlh.receiverAntenna =0# auto-select valid RX path with highest CNR
294
-
dlh.requireFullPacket =True
334
+
dlh.setBitRateRequest(1.0e5) # [bit/s]
335
+
dlh.setPacketSizeBits(1024.0) # [bit]
336
+
dlh.setMaxRetransmissions(8) # [-]
337
+
dlh.setReceiverAntenna(0) # [-] auto-select valid RX path with highest CNR
0 commit comments