mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-04 04:38:02 +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()
 | 
						|
 | 
						|
 |