WiFi_CE_占用带宽自动化测试_基于 Python + 罗德频谱仪(SCPI指令)

2.4G_WiFi_CE_占用带宽测试标准请参考下面博客

2.4G_WiFi_CE_占用带宽测试_频谱分析仪测试2.4g-CSDN博客https://blog.csdn.net/weixin_57515011/article/details/146164656?spm=1001.2014.3001.5502

测试组网图:

WiFi_CE_占用带宽自动化测试_基于 Python + 罗德频谱仪(SCPI指令)_第1张图片

下面代码示例,只是基于罗德频谱仪测试OBW的基础操作,如有疑问,欢迎留言沟通

import time

from visa_information import VisaCommunication  # 请查看之前文章,关于仪表visa控制
# 基于罗德频谱仪的SCPI指令写的代码。


class OccupiedBandwidthTest:
    """
    此方法只是基于频谱仪获取到OBW的测试结果,
    并不包含测试截图,测试数据保存,频谱仪更细节的操作
    """
    def __init__(self, ip, bandwidth, test_freq):
        """
        占用带宽测试
        :param ip:仪表的IP
        :param bandwidth:带宽
        :param test_freq:测试频点
        """
        self.spectrum = VisaCommunication(ip)  # 仪表通讯
        self.bandwidth = bandwidth
        self.test_freq = test_freq
        self.spectrum.send("SYST:PRES")  # 恢复出厂设置

    def test(self, reference_level, loss, point, count):
        """
        OBW测试
        :param reference_level:参考电平,一般情况会参考法规限值当依据进行设置
        :param loss: 线损 + 天线增益 + 定向增益
        :param point: 扫描点数,一般情况为>1001
        :param count:直到波形稳定,对于WiFi扫描6次以上就差不多
        :return:
        """
        rbw, vbw = self.get_rbw_vbw(self.bandwidth)
        self.spectrum.send(f":INITiate:CONTinuous OFF")
        self.spectrum.send(f"DISP:TRAC:MODE MAXHold")
        self.spectrum.send(f"SENSe:DETector:FUNCtion RMS")
        self.spectrum.send(f"SENSe:BANDwidth:RESolution {rbw}")
        self.spectrum.send(f"SENSe:BANDwidth:VIDeo {vbw}")
        self.spectrum.send(f"DISPlay:WINDow:TRACe:Y:SCALe:RLEVel {reference_level}")
        self.spectrum.send(f"DISPlat:WINDow:TRACe:Y:SCALe:RLEVel:OFFSet {loss}")
        centerfreq = float(self.test_freq) * 1e6
        self.spectrum.send(f"FREQuency:CENTer {centerfreq}")
        span = float(self.bandwidth * 2) * 1e6
        self.spectrum.send(f'FREQ:SPAN {span}')
        self.spectrum.send(f"SWE:POIN {point}")
        self.spectrum.send(":SENSe:SWEep:TIME:AUTO OFF")
        self.spectrum.send(f":SENSe:SWEep:TIME:1s")
        self.spectrum.send(f"SWE:COUN {count}")
        time.sleep(int(count) * 1.2)  # 这个可以做成一个检查上面操作是否完成,完成基执行上面操作,没有就等1s
        # 获取结果
        self.spectrum.send("CALC:MARK:FUNC:POW:SEL OBW")
        self.spectrum.send(f"SENS:POW:BWID 99PCT"),
        self.spectrum.send(f"SENS:POW:ACH:BWID {self.bandwidth}MHz")
        result = self.spectrum.query("CACL:MARK:FUNC:POW:RES? OBW")
        ret = round(float(result) / 1e6, 4)
        return ret

    def get_rbw_vbw(self, bandwidth):
        """
        获取频谱仪的RBW/VBW
        由于CE中要求RBW不低于Span的1 %"
        所以可以按照这个标准定义,主要是有些频谱仪RBW/VBW设置会出现一定量的偏差(打不到需要设置的值)
        :param bandwidth:
        :return:
        """
        if int(bandwidth) == 20:
            obw_rbw = 300
            obw_vbw = 800
        elif int(bandwidth) == 40:
            obw_rbw = 500
            obw_vbw = 2000
        elif int(bandwidth) == 80:
            obw_rbw = 1000
            obw_vbw = 3000
        elif int(bandwidth) == 160:
            obw_rbw = 2000
            obw_vbw = 6000
        else:  # 320M
            obw_rbw = 5000
            obw_vbw = 20000
        return obw_rbw, obw_vbw

你可能感兴趣的:(自动化测试_Python,python,测试工具)