mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
a list of all spatial streams Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
126 lines
3.1 KiB
Python
126 lines
3.1 KiB
Python
#!/usr/bin/python3
|
|
"""
|
|
NAME: lf_tx_power_dbm_tool.py
|
|
|
|
PURPOSE:
|
|
calcuate the combined spatial stream power.
|
|
|
|
EXAMPLE:
|
|
|
|
|
|
LICENSE:
|
|
Free to distribute and modify. LANforge systems must be licensed.
|
|
Copyright 2022 Candela Technologies Inc
|
|
|
|
|
|
INCLUDE_IN_README
|
|
|
|
NOTE: To convert the per spatial stream dBm to combined dBm
|
|
convert dBm to watts (power) for each spatial stream, add the power values then convert back to dBm
|
|
https://www.rapidtables.com/convert/power/dBm_to_Watt.html
|
|
https://www.rapidtables.com/convert/power/Watt_to_dBm.html
|
|
|
|
Thank-you to:
|
|
https://www.thepacketologist.com/2021/10/power-conversion-in-python/
|
|
|
|
"""
|
|
|
|
import argparse
|
|
import math
|
|
import importlib
|
|
|
|
# TODO set up with logger
|
|
lf_logger_config = importlib.import_module("py-scripts.lf_logger_config")
|
|
|
|
def convert_input():
|
|
value = input("Whate is the numberical value of teh unit of power?:").lower()
|
|
unit = ""
|
|
while unit == "":
|
|
unit = input("What unit would you like to convert this too? (dBm/mW): ").lower()
|
|
if unit == "dbm" or unit =="mw":
|
|
unit = unit
|
|
else:
|
|
unit = ""
|
|
return value, unit
|
|
|
|
def convert_dbm_to_mw(value):
|
|
# P(mW) = 1W * 10(P(dBm) / 10)
|
|
dbm = int(value)
|
|
mw = 1 * 10 ** (dbm/10)
|
|
print(f"{dbm} dBm = {round(mw, 10)} mW")
|
|
return mw
|
|
|
|
def convert_mw_to_dbm(value):
|
|
# P(dBm) = 10 * log10( P(mW) / 1mW)
|
|
mw = value
|
|
dbm = 10 * math.log10(mw/1)
|
|
print(f"{mw} mW = {round(dbm, 2)} dBm")
|
|
return dbm
|
|
|
|
def convert_per_ss_dbm_to_combined(ss_list):
|
|
total_mw = 0.0
|
|
for value in ss_list:
|
|
value = int(value)
|
|
print("dbm value {value}".format(value=value))
|
|
mw = convert_dbm_to_mw(value)
|
|
print("mw: {mw}".format(mw=mw))
|
|
total_mw += mw
|
|
|
|
print("total_mw: {total_mw}".format(total_mw=total_mw))
|
|
|
|
combined_dbm = convert_mw_to_dbm(total_mw)
|
|
print("combined_dbm = {combined_dbm}".format(combined_dbm=combined_dbm))
|
|
|
|
return combined_dbm
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Convert power values from dBm to mW or mW to dBm"
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--dbm",
|
|
"--dbm2mw",
|
|
dest="dbm2mw",
|
|
help="Converts value from dBm to mW",
|
|
metavar="10",
|
|
type=int,
|
|
)
|
|
parser.add_argument(
|
|
"--ss_dbm",
|
|
"--ss_list_dbm",
|
|
dest="ss_list_dbm",
|
|
help="pass in a spatial stream list --ss_dbm '-55 -53 -60 -22",
|
|
type=str,
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--mw",
|
|
"--mw2dbm",
|
|
dest="mw2dbm",
|
|
help="Converts value from mW to dBm.",
|
|
metavar="50",
|
|
type=float,
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
if args.dbm2mw is not None or args.mw2dbm is not None or args.ss_list_dbm:
|
|
if args.dbm2mw:
|
|
convert_dbm_to_mw(args.dbm2mw)
|
|
elif args.mw2dbm:
|
|
convert_mw_to_dbm(args.mw2dbm)
|
|
else:
|
|
convert_per_ss_dbm_to_combined(args.ss_list_dbm.split())
|
|
else:
|
|
value, unit = convert_input()
|
|
if unit == "mw":
|
|
convert_dbm_to_mw(value)
|
|
elif unit == "dbm":
|
|
convert_mw_to_dbm(value)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
|