最近忙于一个RF产品的量产程序开发,测试平台选用advantest V93K SMT8,使用WSRF板卡(最高支持6Gbps)做LTE RX/TX的RF测试。大部分RF测试项都是大家耳熟能详的,比如RX/TX gain,LO IPN,RX flatness,RX/TX IQ imbalance,RX/TX IMRR, RX/TX IIP2/IIP3/OIP3, RX ACP, RX/TX EVM....。
RX测试简介
WSRF板卡提供single tone(LO+IF),dual tone(LO+ IF1+IF2)或者调制波(LO+I/Q波形文件),DUT demix RF signal并解调为模拟I/Q IF信号,通过ADC转换为数字I/Q IF信号,V93K数字板卡捕获数字I/Q信号,调用V93K提供的DSP函数处理时域的I/Q信号计算各种RF指标。
TX测试简介
single tone, dual tone或者I/Q调制波以数字I/Q的方式给DUT的DAC,转化为模拟I/Q IF信号,DUT的LO mix后输出RF信号;V93K WSRF捕获RF信号,demix+ADC decimation之后分析IF信号计算各种RF指标。
该项目要求ATE测试一些频点数据,然后调用matlab的脚本,通过这些测试数据来计算拟合最佳的register设置。V93K默认安装了matlab runtime library(/opt/hp93000rt/el7/x86_64/mcr_7.17)但不可能安装收费的matlab,因此最佳的解决方案如下:
- 将windowns开发的matlab脚本编译成jar
matlab的官方教程介绍了如何用matlab library compiler将*m文件打包成*.jar
Generate a Java Package and Build a Java Applicationwww.mathworks.com同时在matlab的安装目录下也有很多例子可以帮助我们理解如何打包,打包的java class如何调用。以matlab2012为例,范例在下列目录:
C:Program FilesMATLABR2012atoolboxjavabuilderExamples
- V93K eclipse调用 编译好的jar和V93K的matlab runtime库提供的Javabuilder.jar,
需要注意V93K SMT8的默认安装的matlab runtime library版本是7.17,最好使用对应版本的matlab2012a去打包jar。
MATLAB Runtime - MATLAB Compilerww2.mathworks.cn- 在testmethod中调用matlab封装的class,实现数据计算和拟合,返回结果。
在这里需要考虑matlab脚本打包成java class之后,其输入和输出接口如何使用。
以qrdecomp.m(matlab自带范例)为例子,其有一个输入矩阵A,两个输出矩阵Q和R;
对应java class调用的方式如下所示,qrdecomp(2, a)的‘2’表示有两个返回值,可以通过result[0]和result[1]来得到两个返回值;
- int[] dims = {n, n};
- a = MWNumericArray.newInstance(dims,MWClassID.DOUBLE, MWComplexity.REAL);
- /* Set matrix values */
- int[] index = {1, 1};
- for (index[0] = 1; index[0] <= dims[0]; index[0]++)
- {
- for (index[1] = 1; index[1] <= dims[1]; index[1]++)
- {
- if (index[1] == index[0]) {
- a.set(index, 2.0);
- } else if (index[1] == index[0]+1 || index[1] == index[0]-1) {
- a.set(index, -1.0);
- }
- }
- }
- theFactor = new factor(); // java class converted from matlab
- result = theFactor.qrdecomp(2, a);
- System.out.println("QR factorization:");
- System.out.println("Q matrix:");
- System.out.println(result[0]);
- System.out.println("R matrix:");
- System.out.println(result[1]);
在实现过程中遇到的问题汇总如下,希望大家避免走弯路。
- windows matlab版本太高和SMT8不兼容
V93K的matlab runtime library版本是7.17,该版本太老。Windowns的matlab是2018b,打包编译的jar文件默认调用runtime version 9.5。
在V93K安装matlab runtime library v9.5,然后安装advantest提供的方式做了相应的patch(比如设置和修改环境变量LD_PRELOAD),SMT8的eclipse界面无法启动;
使用各种方法还是报各种底层gcc library不兼容,无法继续。
- 使用SMT8自带的runtime library 7.17, 需要设置LD_LIBRARY_PATH
在启动smarttest之前,需要设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/hp93000rt/el7/x86_64/mcr_7.17/runtime/glnxa64
目前没找到如何在eclipse设置该path,按照有些资料说的添加native library location不工作。
如果设置LD_LIBRARY_PATH,可以在 eclipse init中看到如下
只有该path被成功加入之后,testmethod可以调用MWARRAY class创建矩阵,作为matlab class需要的输入输出参数;否则就会报library libmwmclmcrrt.so找不到一类的异常;