matlab opnet,OPNET中设计网络 MATLAB

启动matlab引擎的代码:

if(op_intrpt_type() == OPC_INTRPT_BEGSIM)

{

if(!(ep = engOpen("\0"))) //the "0" == "\0" == "NULL"

{

op_sim_end("system can not start MATLAB engine","","","");

}

}

else if(op_intrpt_type() == OPC_INTRPT_ENDSIM)

{

engClose(ep);

}

计算和画图的一下小代码:

#include "engine.h"

#include "opnet.h"

#include "stdio.h"

#include

#define round(x) (floor(x + 0.5))

void mdltn_cmd(char*, char*, int, int, double);

extern Engine *ep;

void

matlab_err(Packet* pkptr)

{

mxArray *result;

double *num_errs, pklen, snr, ecc_thresh, symbol_rate, elap_time;

OpT_Packet_Size seg_size;

int prev_num_errs;

Objid rx_id, rx_ch_id;

char modulation[100];

char cmd[2000];

mxArray *T=NULL;

double time[10]={0,1,2,3,4,5,6,7,8,9};

mxArray *sun=NULL;

double *num_err;

char suncmd[200]="a=1;b=30;c=a+b;";

FIN (matlab_err(pkptr));

op_prg_odb_bkpt("sun");

prev_num_errs = op_td_get_int(pkptr, OPC_TDA_RA_NUM_ERRORS);

if(prev_num_errs > 0)

{

ecc_thresh = op_td_get_dbl(pkptr, OPC_TDA_RA_ECC_THRESH);

pklen = (double)op_pk_total_size_get(pkptr);

if((double)prev_num_errs / pklen > ecc_thresh)

{

FOUT;

}

}

else

{

pklen = -1.0;

}

rx_id = op_td_get_int(pkptr, OPC_TDA_RA_RX_OBJID);

op_ima_obj_attr_get(rx_id, "modulation", modulation);

snr = op_td_get_dbl(pkptr, OPC_TDA_RA_SNR);

elap_time = op_sim_time() - op_td_get_dbl(pkptr, OPC_TDA_RA_SNR_CALC_TIME);

rx_ch_id = op_td_get_int(pkptr, OPC_TDA_RA_TX_CH_OBJID);

op_ima_obj_attr_get(rx_ch_id, "data rate", &symbol_rate);

seg_size = (OpT_uInt64)round(elap_time * symbol_rate);

if(seg_size != 0)

{

mdltn_cmd(modulation, cmd, 2000, (int)seg_size, snr);

engEvalString(ep, cmd);

if((result = engGetVariable(ep, "nErrors")) == NULL)

{

op_sim_end("'t Get nErrors Result", "", "", "");

}

else

{

num_errs = mxGetPr(result);

}

mxDestroyArray(result);

op_td_set_int(pkptr, OPC_TDA_RA_NUM_ERRORS,(int)((*num_errs) + prev_num_errs));

op_td_set_dbl(pkptr,OPC_TDA_RA_ACTUAL_BER, (*num_errs) / seg_size);

}

T=mxCreateDoubleMatrix(1,10,mxREAL);

memcpy((char*)mxGetPr(T),(char*)time,10*sizeof(double));

engPutVariable(ep,"T",T);

engEvalString(ep,"D=.5*(-9.8).*T.^2;");

engEvalString(ep,"plot(T,D);");

engEvalString(ep,"title('position vs. time for a falling object');");

engEvalString(ep,"xlabel('tiem(seconds)');");

engEvalString(ep,"ylabel('position(meters)');");

engEvalString(ep,suncmd);

if((sun=engGetVariable(ep,"c"))==NULL)

{

op_sim_end("'t get the variable","","","");

}

else

{

num_err = mxGetPr(sun);

}

printf("the number is: %d",(int) *num_err);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值