tag 标签: matlab

相关帖子
相关博文
  • 热度 7
    2022-9-8 11:20
    972 次阅读|
    0 个评论
    Tips: 现阶段模型开发大部分采用Simulink,为了验证模型实现了相关功能,需要对模型进行测试。模型测试(MiL)有单元测试和集成测试之分。单元测试中模型复杂度低,信号参数数量少,测试用例数量少,用例时间短,通常为开环测试,测试用例运行总时长在可接受范围内。但是集成测试不同,由于模型结构复杂,信号参数数量庞大,加之测试用例时间长,导致需要处理大量信号数据(很多情况包含被控对象),测试运行总时间往往很长。 最近,有小伙伴向我们反馈,集成测试由于模型复杂度高,测试用例多,导致执行耗时非常长,TPT有没有加速测试的方法。 当然有了,有需求就会有解决方案。接下来向大家介绍TPT中加速运行的方法。 TPT结合Simulink自带的加速测试功能 1)TPT调用Simulink “Accelerator”或“Rapid Accelerator”模式 在TPT18中,可以指定Simulink的运行模式,分别为“Normal”、“Accelerator”和“Rapid Accelerator”,我们可以选择“Accelerator”或“Rapid Accelerator”模式,加速运行。 使用 Simulink 自带的demo集成模型进行演示,运行相同的用例,并统计不同模式的运行时间。 在TPT中选择运行模式。 以上结果可知,选择“Accelerator”或“Rapid Accelerator”模式后,运行速度有一定程度的提升。 2)TPT调用Simulink “Fast Restart” 我们也可以勾选“Fast restart”来提高运行速度。需要注意的是,“Rapid accelerator”模式不支持“Fast restart”。 Tips: Fast restart:即快速重启,可避免再次编译。当以迭代方式仿真模型时,开启“Fast restart”后无需每次迭代时编译模型,提高测试速度。 Rapid Accelerator:Rapid Accelerator模式会根据被测模型创建可执行文件,使用external mode与Simulink进行通讯。 TPT多核运行模式 默认情况下,TPT运行时只会选择一个CPU内核进行测试。当测试用例较多时,可以选择多核模式,开启多个MATLAB运行测试。 在运行配置中点击“Use one core”。 填写想要使用的数量,比如2核。 我们可以看到,同时有2条测试用例在执行。 可用核数取决于电脑配置,可以在设备管理器中的处理器查看。 合并报告 在集成测试时,测试用例执行总时间很长。当遇到某条测试用例出现问题时,为了获取完整的测试报告,修改测试用例之后还需运行全部的测试用例。这样做的时间成本很高,还有没有其他的方式呢?答案是肯定的。 在TPT中,支持合并报告,如下进行说明。 首次运行工程后,存在未通过测试用例。 修改“Test_Case_002”测试用例,并运行。 选择所有测试用例,在“Run”处点击“Generate overview report”即可生成包含所有测试用例的报告。 最后,可以看到,测试报告包含全部测试用例。 通过以上方法,TPT能够使得测试提速,减少时间成本。TPT提速测试并不局限于上述内容,如果着眼于整个测试过程,状态机测试用例的可视化、功能需求与测试用例和评估的双向追溯关系、适用于全局的评估等都能够加速测试。此外,TPT能够集成Jenkins部署CICT,实现自动化的测试流程。 PikeTec公司 是全球知名的基于模型的嵌入式系统测试工具TPT的软件供应商,总部位于德国柏林。北汇信息作为PikeTec在中国的独家合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。目前,TPT已被众多国内知名主机厂和零部件企业认可,在新能源(VCU/BMS/MCU)以及ADAS等领域中被广泛应用。
  • 热度 5
    2021-3-15 12:11
    104141 次阅读|
    3 个评论
    需要将某一目录下的某一类型的数据文件进行批量处理,可以编写一个递归调用的函数。 function getdata(dirname) %dirname 为主目录名,字符串 d = dir(dirname) %使用dir 方法,获取dirname目录下所有的目录和文件信息 for i = 3:length(d) %目录文件信息包含有 . .. 当前目录和上级目录,所以从3号开始处理 if(d(i).isdir) %判断如果是属于目录 subdirname = strcat(dirname,'\',d(i).name); %生成新的目录信息 getdata(subdirname); %递归调用getdata函数 else f = strcat(dirname,'\'); %如果是需要处理的文件 dataprocess(f,d(i).name) %生成目录信息和文件信息,调用自定义的数据处理函数进行处理。 end end 这样只要指定主目录就能一次性处理完成 dirname = uigetdir('Pick a Dir'); getdata(dirname)
  • 热度 5
    2020-9-8 09:10
    2926 次阅读|
    0 个评论
    matlab 生成 测温电阻  Rt表
    由 B 值可以推导出不同温度 t 下的电阻值 R = R0 * exp(B*(1/t - 1/T0)); 其中 R 为温度 t 下的电阻值 R0 为 25 度时的电阻值 T0 为 25 度 注:上述温度值都应是开氏温度,也就是说,需要加上绝对零度值 273.15 下面是从 0~100 度,间隔 0.1 度生成的 Rt 表, B 值,上拉电阻值可以修改成所需要的。 K = 273.15; B = 3950; T0 = K + 25; R0 = 10000; % 25 度时的阻值 Ru = 5000; % 上拉电阻 i = 0:1023; outstr = sprintf(' /* B const %d */ \n const Rt = {'; %outstr = ; t = i / 10 + K; R = R0 * exp(B*(1./t - 1/T0)); Vo = 3.3 * R./(Ru+R) Rt = round( Vo / 3.3 * 4096); for j = 1:length(Rt) if mod(j,16) == 0 outstr = ; else outstr = ; end end outstr = plot(i/10,Rt) outstr = sprintf('B %d Rpu %d ',B,Ru); Title(outstr) /* B const 3950 Rpu 5000 */ const Rt[] = { 3566, 3563, 3561, 3558, 3556, 3553, 3551, 3548, 3546, 3543, 3541, 3538, 3536, 3533, 3531, 3528, 3526, 3523, 3520, 3518, 3515, 3513, 3510, 3507, 3505, 3502, 3500, 3497, 3494, 3492, 3489, 3486, 3484, 3481, 3478, 3475, 3473, 3470, 3467, 3464, 3462, 3459, 3456, 3453, 3451, 3448, 3445, 3442, 3439, 3437, 3434, 3431, 3428, 3425, 3422, 3419, 3417, 3414, 3411, 3408, 3405, 3402, 3399, 3396, 3393, 3390, 3387, 3384, 3381, 3378, 3376, 3373, 3370, 3367, 3363, 3360, 3357, 3354, 3351, 3348, 3345, 3342, 3339, 3336, 3333, 3330, 3327, 3324, 3320, 3317, 3314, 3311, 3308, 3305, 3302, 3298, 3295, 3292, 3289, 3286, 3282, 3279, 3276, 3273, 3270, 3266, 3263, 3260, 3257, 3253, 3250, 3247, 3243, 3240, 3237, 3233, 3230, 3227, 3224, 3220, 3217, 3213, 3210, 3207, 3203, 3200, 3197, 3193, 3190, 3186, 3183, 3179, 3176, 3173, 3169, 3166, 3162, 3159, 3155, 3152, 3148, 3145, 3141, 3138, 3134, 3131, 3127, 3124, 3120, 3117, 3113, 3110, 3106, 3102, 3099, 3095, 3092, 3088, 3085, 3081, 3077, 3074, 3070, 3066, 3063, 3059, 3055, 3052, 3048, 3045, 3041, 3037, 3033, 3030, 3026, 3022, 3019, 3015, 3011, 3008, 3004, 3000, 2996, 2993, 2989, 2985, 2981, 2978, 2974, 2970, 2966, 2962, 2959, 2955, 2951, 2947, 2943, 2940, 2936, 2932, 2928, 2924, 2920, 2917, 2913, 2909, 2905, 2901, 2897, 2893, 2889, 2886, 2882, 2878, 2874, 2870, 2866, 2862, 2858, 2854, 2850, 2846, 2843, 2839, 2835, 2831, 2827, 2823, 2819, 2815, 2811, 2807, 2803, 2799, 2795, 2791, 2787, 2783, 2779, 2775, 2771, 2767, 2763, 2759, 2755, 2751, 2747, 2743, 2739, 2735, 2731, 2727, 2723, 2719, 2714, 2710, 2706, 2702, 2698, 2694, 2690, 2686, 2682, 2678, 2674, 2670, 2666, 2661, 2657, 2653, 2649, 2645, 2641, 2637, 2633, 2629, 2625, 2620, 2616, 2612, 2608, 2604, 2600, 2596, 2591, 2587, 2583, 2579, 2575, 2571, 2567, 2563, 2558, 2554, 2550, 2546, 2542, 2538, 2533, 2529, 2525, 2521, 2517, 2513, 2508, 2504, 2500, 2496, 2492, 2488, 2483, 2479, 2475, 2471, 2467, 2463, 2458, 2454, 2450, 2446, 2442, 2437, 2433, 2429, 2425, 2421, 2417, 2412, 2408, 2404, 2400, 2396, 2391, 2387, 2383, 2379, 2375, 2370, 2366, 2362, 2358, 2354, 2349, 2345, 2341, 2337, 2333, 2329, 2324, 2320, 2316, 2312, 2308, 2303, 2299, 2295, 2291, 2287, 2283, 2278, 2274, 2270, 2266, 2262, 2257, 2253, 2249, 2245, 2241, 2237, 2232, 2228, 2224, 2220, 2216, 2212, 2207, 2203, 2199, 2195, 2191, 2187, 2182, 2178, 2174, 2170, 2166, 2162, 2158, 2153, 2149, 2145, 2141, 2137, 2133, 2129, 2124, 2120, 2116, 2112, 2108, 2104, 2100, 2096, 2091, 2087, 2083, 2079, 2075, 2071, 2067, 2063, 2059, 2055, 2050, 2046, 2042, 2038, 2034, 2030, 2026, 2022, 2018, 2014, 2010, 2006, 2002, 1998, 1993, 1989, 1985, 1981, 1977, 1973, 1969, 1965, 1961, 1957, 1953, 1949, 1945, 1941, 1937, 1933, 1929, 1925, 1921, 1917, 1913, 1909, 1905, 1901, 1897, 1893, 1889, 1885, 1881, 1877, 1873, 1870, 1866, 1862, 1858, 1854, 1850, 1846, 1842, 1838, 1834, 1830, 1826, 1823, 1819, 1815, 1811, 1807, 1803, 1799, 1795, 1791, 1788, 1784, 1780, 1776, 1772, 1768, 1765, 1761, 1757, 1753, 1749, 1745, 1742, 1738, 1734, 1730, 1726, 1723, 1719, 1715, 1711, 1708, 1704, 1700, 1696, 1693, 1689, 1685, 1681, 1678, 1674, 1670, 1666, 1663, 1659, 1655, 1652, 1648, 1644, 1641, 1637, 1633, 1630, 1626, 1622, 1619, 1615, 1611, 1608, 1604, 1600, 1597, 1593, 1590, 1586, 1582, 1579, 1575, 1572, 1568, 1565, 1561, 1557, 1554, 1550, 1547, 1543, 1540, 1536, 1533, 1529, 1526, 1522, 1519, 1515, 1512, 1508, 1505, 1501, 1498, 1494, 1491, 1487, 1484, 1480, 1477, 1474, 1470, 1467, 1463, 1460, 1456, 1453, 1450, 1446, 1443, 1440, 1436, 1433, 1429, 1426, 1423, 1419, 1416, 1413, 1409, 1406, 1403, 1400, 1396, 1393, 1390, 1386, 1383, 1380, 1377, 1373, 1370, 1367, 1364, 1360, 1357, 1354, 1351, 1347, 1344, 1341, 1338, 1335, 1331, 1328, 1325, 1322, 1319, 1316, 1312, 1309, 1306, 1303, 1300, 1297, 1294, 1291, 1287, 1284, 1281, 1278, 1275, 1272, 1269, 1266, 1263, 1260, 1257, 1254, 1251, 1248, 1245, 1242, 1239, 1236, 1233, 1230, 1227, 1224, 1221, 1218, 1215, 1212, 1209, 1206, 1203, 1200, 1197, 1194, 1191, 1188, 1186, 1183, 1180, 1177, 1174, 1171, 1168, 1165, 1163, 1160, 1157, 1154, 1151, 1148, 1146, 1143, 1140, 1137, 1134, 1132, 1129, 1126, 1123, 1120, 1118, 1115, 1112, 1109, 1107, 1104, 1101, 1099, 1096, 1093, 1090, 1088, 1085, 1082, 1080, 1077, 1074, 1072, 1069, 1066, 1064, 1061, 1058, 1056, 1053, 1051, 1048, 1045, 1043, 1040, 1038, 1035, 1032, 1030, 1027, 1025, 1022, 1020, 1017, 1015, 1012, 1010, 1007, 1005, 1002, 999, 997, 995, 992, 990, 987, 985, 982, 980, 977, 975, 972, 970, 968, 965, 963, 960, 958, 955, 953, 951, 948, 946, 944, 941, 939, 936, 934, 932, 929, 927, 925, 922, 920, 918, 916, 913, 911, 909, 906, 904, 902, 900, 897, 895, 893, 891, 888, 886, 884, 882, 879, 877, 875, 873, 871, 868, 866, 864, 862, 860, 858, 855, 853, 851, 849, 847, 845, 842, 840, 838, 836, 834, 832, 830, 828, 826, 824, 821, 819, 817, 815, 813, 811, 809, 807, 805, 803, 801, 799, 797, 795, 793, 791, 789, 787, 785, 783, 781, 779, 777, 775, 773, 771, 769, 767, 765, 763, 761, 760, 758, 756, 754, 752, 750, 748, 746, 744, 742, 741, 739, 737, 735, 733, 731, 729, 728, 726, 724, 722, 720, 718, 717, 715, 713, 711, 709, 708, 706, 704, 702, 700, 699, 697, 695, 693, 692, 690, 688, 686, 685, 683, 681, 680, 678, 676, 674, 673, 671, 669, 668, 666, 664, 663, 661, 659, 658, 656, 654, 653, 651, 649, 648, 646, 644, 643, 641, 640, 638, 636, 635, 633, 632, 630, 628, 627, 625, 624, 622, 621, 619, 617, 616, 614, 613, 611, 610, 608, 607, 605, 604, 602, 601, 599, 598, 596, 595, 593, 592, 590, 589, 587, 586, 584, 583, 581, 580, 578, 577, 575, 574, 573, 571, 570, 568, 567, 565, 564, 563, 561, 560, 558, 557, 556, 554, 553, 551, 550, 549, 547, 546, 545, 543, 542, 540, 539, 538, 536, 535, 534, 532, 531, 530, 528, 527, 526, 524, 523, 522, 521, 519, 518, 517, 515, 514, 513, 512, 510, 509, 508, 506, 505, 504, 503, 501, 500, 499, 498, 496, 495, 494, 493, 492, 490, 489, 488, 487, 486, 484, 483, 482, 481, 480, 478, 477, 476, 475, 474, };
  • 热度 5
    2018-5-3 22:11
    3685 次阅读|
    1 个评论
    【博客大赛】使用MATLAB一键制作mif文件
    这里讲解实现一个16384(2^14)点的14位正弦波数据mif格式文件的生成,使用此文件,我们便可以在FPGA上基于直接数字合成(DDS)原理生成标准的正弦波,即实现信号发生器的功能。关于DDS原理的相关内容,请参考由北航出版社出版的《FPGA自学笔记——设计与验证》一书第六章第6.2节—— “双通道幅频相可调DDS信号发生器” 一节的内容。   在很早之前,我曾编写过一个生成1024点16位正弦波mif文件的方法,不过那时候我的matlab技术还特别特别菜(现在也很菜),只是在matlab中简单的实现了正弦波数据的生成,关于四舍五入取整以及mif文件的最终生成,我用了excel和quartus两个软件经过了复杂的操作才最终完成。如今,自己都对那种方法没有了耐心,刚好新做的一个双通道14位高速DAC模块在做DDS实验时需要用到14位的mif数据,因此今天对matlab的脚本文件重新编写了下,实现了仅通过Matlab就可以一键生成mif文件的功能。 Script。在该文件中输入以下内容: F1=1;%信号的频率 Fs=2^14;%采样频率 P1=0;%信号初始相位 N=2^14;%采样点数为N t= ;%采样时刻 ADC=2^13 - 1;%直流分量 A=2^13;%信号幅度 s=A*sin(2*pi*F1*t +pi*P1/180) + ADC;%生成信号 plot(s);%绘制图形 fild =fopen('d:/sin14bit_16384.mif','wt');%创建mif文件 %写入mif文件文件头 fprintf(fild,'%s\n','WIDTH=14;');%位宽 fprintf(fild,'%s\n\n','DEPTH=16384;');%深度 fprintf(fild,'%s\n','ADDRESS_RADIX=UNS;');%地址格式 fprintf(fild,'%s\n\n','DATA_RADIX=HEX;');%数据格式 fprintf(fild,'%s\t','CONTENT');%地址 fprintf(fild,'%s\n','BEGIN');% fori= 1:N s2(i) =round(s(i));%对小数四舍五入以取整 ifs2(i) <0%强制将负1置0, s2(i) = 0 end % addr : data; fprintf(fild,'\t%g\t',i-1);%地址,从0开始编码 fprintf(fild,'%s\t',':'); fprintf(fild,'%x',s2(i)); fprintf(fild,'%s\n',';'); end 用户如果想自己生成其他深度和位宽的数据,只需要对应修改采样频率(Fs)、采样点数(N)、直流分量(ADC)和信号幅度(A)即可。   保存文件,点击运行按钮,即可生成我们所需要的正弦波数据,并在电脑的D盘根目录生成一个名为“sin14bit_16384 .mif”的文件。 随后,会弹出如下图1所示的界面,该界面便是以我们生产的数据为值,t为时间轴绘制出来的波形,从波形可知为标准的正弦波,你也可以通过放大缩小来具体查看几个顶点的值,以确定数据是否在自己预期的范围内。这里,我们直接关掉该界面即可。 下图2为使用该文件设计的DDS信号发生器系统,输出频率为3.448Mhz(随机设置的一个值),通过示波器的FFT功能可以看到,谐波量并不大。
  • 热度 5
    2013-6-20 18:43
    2550 次阅读|
    3 个评论
      在进行算法验证的时候,Matlab无疑是一把利器,如果将用C写的代码, 在用Matlab实现一遍,确实很浪费时间。当对于Matlab不是特别熟悉的时候, 尤其麻烦。 关于Matlab调用C的方式,已经固定了,介绍也很多。 但是有一个地方,还没有见到有很多介绍。 如何在C中方便地使用Matlab传递过来的变量?   由于Matlab中常使用double型变量,而C中最常使用的是int型变量,当使用mexFunction函数将变量以mxArray格式传递到C文件中的时候, 如果在C文件中使用的不是double型,都要 要进行数据转换。double型的计算精度要高于int型及其他类型,如果使用double型进行计算,可能结果会优于实际情况。如果强行使用指针进行转换,因为double型和int型占用的内存空间不一样,势必会出现问题。   想了一些方法后,发现最简单的是,开辟一个元素个数相同的数组或者矩阵。将prhs中的元素都进行强制类型转换,复制到新的数组或者矩阵中,然后对于这个新的数组或者矩阵进行操作。   在返回时,将开辟的数组或者矩阵中的元素再进行强制转换,复制到plhs中。回到Matlab的double类型。   当然这样做一个不好的地方就是,占用了不少内存。   注: void mexFunction(int nlhs, mxArray *plhs ) {      uint32_t i;      uint32_t count;      uint32_t m;      uint32_t n;      double   *in;      double   *out;      uint32_t *handle;      if(prhs == NULL)           return;      in = (double*)mxGetPr(prhs );      m = mxGetM(prhs );      n = mxGetN(prhs );      plhs = (double*)mxCreateDoubleMatrix(m, n, mxREAL);      out = (double*)mxGetPr(plhs );      handle = (uint32_t *)malloc(m*n*sizeof(uint32_t ));      count = m* n;      mexPrintf("the count:%d\n", count);      for(i = 0; i count; i++)      {           handle = (uint32_t)in ; //          mexPrintf("the data: %u, d: %lf\n", handle , in );      }      for(i = 0; i count; i++)      {           DataProcess(handle );          }      for(i = 0; i count; i++)      {           out = (double)handle ;           mexPrintf("the i: %d the data: %u, d: %lf\n", i, handle , out );      }          nlhs = count;      mexPrintf("the nlhs: %d\n", nlhs); }
相关资源