matlab double转int_V93K SMT8如何调用Matlab的coding

最近忙于一个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指标。

cd4544a10983af3f55ba9027e1422b80.png

该项目要求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 Application​www.mathworks.com
641f7d1ce2c8b20f0a89d0d1afbbf7ac.png
使用Java程序调用Matlab_matlab_luoying_1993的专栏-CSDN博客​blog.csdn.net
81573d8ed95ba83ecc1f463049fead81.png

同时在matlab的安装目录下也有很多例子可以帮助我们理解如何打包,打包的java class如何调用。以matlab2012为例,范例在下列目录:

C:Program FilesMATLABR2012atoolboxjavabuilderExamples

  • V93K eclipse调用 编译好的jar和V93K的matlab runtime库提供的Javabuilder.jar,

96e05e3cdadafa45dc593054a3763187.png

需要注意V93K SMT8的默认安装的matlab runtime library版本是7.17,最好使用对应版本的matlab2012a去打包jar。

MATLAB Runtime - MATLAB Compiler​ww2.mathworks.cn
  • 在testmethod中调用matlab封装的class,实现数据计算和拟合,返回结果。

在这里需要考虑matlab脚本打包成java class之后,其输入和输出接口如何使用。

以qrdecomp.m(matlab自带范例)为例子,其有一个输入矩阵A,两个输出矩阵Q和R;

d1d3b200aa7cebcc1201e35d5f667092.png

对应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不工作。

209478caf312c7323ce4381d1f23e18d.png

如果设置LD_LIBRARY_PATH,可以在 eclipse init中看到如下

11c22c0de5c2b9cf27a34e60c3475ddc.png

只有该path被成功加入之后,testmethod可以调用MWARRAY class创建矩阵,作为matlab class需要的输入输出参数;否则就会报library libmwmclmcrrt.so找不到一类的异常;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值