# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
# -----------------------------
# Received power calculation (Free-space)
# -----------------------------
def received_power(distance_m, frequency_hz, tx_power_dbm=20):
c = 3.0e8 # speed of light [m/s]
wavelength = c / frequency_hz
fspl_db = 20 * np.log10(4 * np.pi * distance_m / wavelength)
rx_power_dbm = tx_power_dbm - fspl_db
return rx_power_dbm
# -----------------------------
# Settings
# -----------------------------
distances = np.linspace(1, 200, 200) # distance [m]
tx_power_dbm = 20 # transmit power [dBm]
rx_24 = received_power(distances, 2.4e9, tx_power_dbm)
rx_5 = received_power(distances, 5.0e9, tx_power_dbm)
# -----------------------------
# Plot
# -----------------------------
plt.figure(figsize=(8,5))
plt.plot(distances, rx_24, label="2.4 GHz", color="green", linewidth=2)
plt.plot(distances, rx_5, label="5 GHz", color="blue", linestyle="--", linewidth=2)
plt.title("Received Power vs Distance (Free Space)")
plt.xlabel("Distance [m]")
plt.ylabel("Received Power [dBm]")
plt.grid(True, linestyle="--", alpha=0.7)
plt.legend()
plt.tight_layout()
plt.show()
# your code goes here
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZWNlaXZlZCBwb3dlciBjYWxjdWxhdGlvbiAoRnJlZS1zcGFjZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkZWYgcmVjZWl2ZWRfcG93ZXIoZGlzdGFuY2VfbSwgZnJlcXVlbmN5X2h6LCB0eF9wb3dlcl9kYm09MjApOgogICAgYyA9IDMuMGU4ICAjIHNwZWVkIG9mIGxpZ2h0IFttL3NdCiAgICB3YXZlbGVuZ3RoID0gYyAvIGZyZXF1ZW5jeV9oegogICAgZnNwbF9kYiA9IDIwICogbnAubG9nMTAoNCAqIG5wLnBpICogZGlzdGFuY2VfbSAvIHdhdmVsZW5ndGgpCiAgICByeF9wb3dlcl9kYm0gPSB0eF9wb3dlcl9kYm0gLSBmc3BsX2RiCiAgICByZXR1cm4gcnhfcG93ZXJfZGJtCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2V0dGluZ3MKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaXN0YW5jZXMgPSBucC5saW5zcGFjZSgxLCAyMDAsIDIwMCkgICMgZGlzdGFuY2UgW21dCnR4X3Bvd2VyX2RibSA9IDIwICAgICAgICAgICAgICAgICAgICAgIyB0cmFuc21pdCBwb3dlciBbZEJtXQoKcnhfMjQgPSByZWNlaXZlZF9wb3dlcihkaXN0YW5jZXMsIDIuNGU5LCB0eF9wb3dlcl9kYm0pCnJ4XzUgID0gcmVjZWl2ZWRfcG93ZXIoZGlzdGFuY2VzLCA1LjBlOSwgdHhfcG93ZXJfZGJtKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBsb3QKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSkpCnBsdC5wbG90KGRpc3RhbmNlcywgcnhfMjQsIGxhYmVsPSIyLjQgR0h6IiwgY29sb3I9ImdyZWVuIiwgbGluZXdpZHRoPTIpCnBsdC5wbG90KGRpc3RhbmNlcywgcnhfNSwgIGxhYmVsPSI1IEdIeiIsICBjb2xvcj0iYmx1ZSIsIGxpbmVzdHlsZT0iLS0iLCBsaW5ld2lkdGg9MikKCnBsdC50aXRsZSgiUmVjZWl2ZWQgUG93ZXIgdnMgRGlzdGFuY2UgKEZyZWUgU3BhY2UpIikKcGx0LnhsYWJlbCgiRGlzdGFuY2UgW21dIikKcGx0LnlsYWJlbCgiUmVjZWl2ZWQgUG93ZXIgW2RCbV0iKQpwbHQuZ3JpZChUcnVlLCBsaW5lc3R5bGU9Ii0tIiwgYWxwaGE9MC43KQpwbHQubGVnZW5kKCkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zaG93KCkKIyB5b3VyIGNvZGUgZ29lcyBoZXJl