From 48f2935c646b204b2b03e7153ef1390b4d77699f Mon Sep 17 00:00:00 2001 From: pjago Date: Mon, 15 Apr 2019 04:57:33 -0300 Subject: [PATCH] first --- .gitignore | 10 + LICENSE | 21 + basic_set.m | 38 + centroid_area.m | 27 + degrau.slx | Bin 0 -> 18644 bytes fuzzy/fan/README.txt | 14 + fuzzy/fan/no_model.fig | Bin 0 -> 101139 bytes fuzzy/fan/no_model.jpg | Bin 0 -> 73830 bytes fuzzy/fan/with_model.fig | Bin 0 -> 106323 bytes fuzzy/fan/with_model.jpg | Bin 0 -> 75281 bytes fuzzy/fan1/README.txt | 14 + fuzzy/fan1/no_model.fig | Bin 0 -> 106950 bytes fuzzy/fan1/no_model.jpg | Bin 0 -> 60159 bytes fuzzy/fan1/with_model.fig | Bin 0 -> 96522 bytes fuzzy/fan1/with_model.jpg | Bin 0 -> 55785 bytes fuzzy/membership/fan/de.json | 14 + fuzzy/membership/fan/e.json | 14 + fuzzy/membership/fan/u.json | 22 + fuzzy/membership/fan1/de.json | 14 + fuzzy/membership/fan1/e.json | 14 + fuzzy/membership/fan1/u.json | 22 + fuzzy_fan.m | 116 +++ fuzzy_tanque.m | 119 +++ jsonlab-1.5/AUTHORS.txt | 53 ++ jsonlab-1.5/ChangeLog.txt | 106 +++ jsonlab-1.5/LICENSE_BSD.txt | 25 + jsonlab-1.5/README.txt | 431 +++++++++ jsonlab-1.5/examples/demo_jsonlab_basic.m | 181 ++++ jsonlab-1.5/examples/demo_ubjson_basic.m | 180 ++++ jsonlab-1.5/examples/example1.json | 23 + jsonlab-1.5/examples/example2.json | 22 + jsonlab-1.5/examples/example3.json | 11 + jsonlab-1.5/examples/example4.json | 35 + jsonlab-1.5/examples/jsonlab_basictest.matlab | 671 ++++++++++++++ jsonlab-1.5/examples/jsonlab_selftest.m | 27 + jsonlab-1.5/examples/jsonlab_selftest.matlab | 154 ++++ jsonlab-1.5/examples/jsonlab_speedtest.m | 21 + jsonlab-1.5/jsonopt.m | 35 + jsonlab-1.5/loadjson.m | 503 +++++++++++ jsonlab-1.5/loadubjson.m | 457 ++++++++++ jsonlab-1.5/mergestruct.m | 33 + jsonlab-1.5/savejson.m | 552 ++++++++++++ jsonlab-1.5/saveubjson.m | 562 ++++++++++++ jsonlab-1.5/struct2jdata.m | 96 ++ jsonlab-1.5/varargin2struct.m | 40 + membership.m | 24 + src/RealTime_Pacer/README.txt | 18 + src/RealTime_Pacer/license.txt | 27 + src/RealTime_Pacer/msfun_realtime_elapsed.m | 61 ++ src/RealTime_Pacer/msfun_realtime_pacer.m | 115 +++ src/RealTime_Pacer/realtime_pacer_example.mdl | 840 ++++++++++++++++++ src/RealTime_Pacer/realtime_pacer_help.html | 40 + .../realtime_pacer_lib.mdl.r2010a | 652 ++++++++++++++ src/RealTime_Pacer/realtime_pacer_lib.slx | Bin 0 -> 16143 bytes src/RealTime_Pacer/slblocks.m | 5 + src/at.m | 16 + src/clickableLegend.m | 200 +++++ src/convp.m | 14 + src/inpaint_nans.m | 1 + src/lowpf.m | 6 + src/mqnr1.m | 27 + src/mqnr2.m | 31 + src/plot_fft.m | 20 + src/plotudo.m | 160 ++++ src/qshift.m | 29 + src/readlino.m | 9 + src/readsim.m | 18 + src/relay_info.m | 63 ++ src/startcom.m | 37 + src/step_info.m | 18 + src/stopino.m | 7 + src/subsp.m | 14 + src/toString.m | 586 ++++++++++++ src/writelino.m | 8 + src/writesim.m | 3 + triangularPulseInv.m | 9 + ventilador.m | 137 +++ 77 files changed, 7872 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 basic_set.m create mode 100644 centroid_area.m create mode 100644 degrau.slx create mode 100644 fuzzy/fan/README.txt create mode 100644 fuzzy/fan/no_model.fig create mode 100644 fuzzy/fan/no_model.jpg create mode 100644 fuzzy/fan/with_model.fig create mode 100644 fuzzy/fan/with_model.jpg create mode 100644 fuzzy/fan1/README.txt create mode 100644 fuzzy/fan1/no_model.fig create mode 100644 fuzzy/fan1/no_model.jpg create mode 100644 fuzzy/fan1/with_model.fig create mode 100644 fuzzy/fan1/with_model.jpg create mode 100644 fuzzy/membership/fan/de.json create mode 100644 fuzzy/membership/fan/e.json create mode 100644 fuzzy/membership/fan/u.json create mode 100644 fuzzy/membership/fan1/de.json create mode 100644 fuzzy/membership/fan1/e.json create mode 100644 fuzzy/membership/fan1/u.json create mode 100644 fuzzy_fan.m create mode 100644 fuzzy_tanque.m create mode 100644 jsonlab-1.5/AUTHORS.txt create mode 100644 jsonlab-1.5/ChangeLog.txt create mode 100644 jsonlab-1.5/LICENSE_BSD.txt create mode 100644 jsonlab-1.5/README.txt create mode 100644 jsonlab-1.5/examples/demo_jsonlab_basic.m create mode 100644 jsonlab-1.5/examples/demo_ubjson_basic.m create mode 100644 jsonlab-1.5/examples/example1.json create mode 100644 jsonlab-1.5/examples/example2.json create mode 100644 jsonlab-1.5/examples/example3.json create mode 100644 jsonlab-1.5/examples/example4.json create mode 100644 jsonlab-1.5/examples/jsonlab_basictest.matlab create mode 100644 jsonlab-1.5/examples/jsonlab_selftest.m create mode 100644 jsonlab-1.5/examples/jsonlab_selftest.matlab create mode 100644 jsonlab-1.5/examples/jsonlab_speedtest.m create mode 100644 jsonlab-1.5/jsonopt.m create mode 100644 jsonlab-1.5/loadjson.m create mode 100644 jsonlab-1.5/loadubjson.m create mode 100644 jsonlab-1.5/mergestruct.m create mode 100644 jsonlab-1.5/savejson.m create mode 100644 jsonlab-1.5/saveubjson.m create mode 100644 jsonlab-1.5/struct2jdata.m create mode 100644 jsonlab-1.5/varargin2struct.m create mode 100644 membership.m create mode 100644 src/RealTime_Pacer/README.txt create mode 100644 src/RealTime_Pacer/license.txt create mode 100644 src/RealTime_Pacer/msfun_realtime_elapsed.m create mode 100644 src/RealTime_Pacer/msfun_realtime_pacer.m create mode 100644 src/RealTime_Pacer/realtime_pacer_example.mdl create mode 100644 src/RealTime_Pacer/realtime_pacer_help.html create mode 100644 src/RealTime_Pacer/realtime_pacer_lib.mdl.r2010a create mode 100644 src/RealTime_Pacer/realtime_pacer_lib.slx create mode 100644 src/RealTime_Pacer/slblocks.m create mode 100644 src/at.m create mode 100644 src/clickableLegend.m create mode 100644 src/convp.m create mode 100644 src/inpaint_nans.m create mode 100644 src/lowpf.m create mode 100644 src/mqnr1.m create mode 100644 src/mqnr2.m create mode 100644 src/plot_fft.m create mode 100644 src/plotudo.m create mode 100644 src/qshift.m create mode 100644 src/readlino.m create mode 100644 src/readsim.m create mode 100644 src/relay_info.m create mode 100644 src/startcom.m create mode 100644 src/step_info.m create mode 100644 src/stopino.m create mode 100644 src/subsp.m create mode 100644 src/toString.m create mode 100644 src/writelino.m create mode 100644 src/writesim.m create mode 100644 triangularPulseInv.m create mode 100644 ventilador.m diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..028e936 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +src/astron.m +src/zigler_nichols.m +src/relay.m +*.m~ +*.asv +survey +src/easylife.m +sim/ +dc fan/ +web fan/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..195231d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Pedro Martins + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/basic_set.m b/basic_set.m new file mode 100644 index 0000000..806193d --- /dev/null +++ b/basic_set.m @@ -0,0 +1,38 @@ +%% read and press ctrl + enter for each block! +return +clear + +%% libraries (must be at current folder!) +addpath('jsonlab-1.5') + +%% Triangular Pulse Input +nlang = 3; %number of linguistic variables +mixing = 0.5; %from 0 to 1, there are at most two variables (required) +span = 400; %distance beetween edges (input span) + +b = linspace(-1.0, 1.0, nlang)'; +a = b - 1/(nlang - 1)*(1 + mixing)'; +c = b + 1/(nlang - 1)*(1 + mixing)'; +a(1) = -inf; c(end) = inf; %edges +s = struct('params', mat2cell([a b c]*span/2, ones([1 nlang])),... + 'type', 'triangularPulse'); + +%% Triangular Pulse Output +nlang = 5; %number of linguistic variables +mixing = 0.5; %from 0 to 1, there are at most two variables (required) +span = 100; %distance beetween edges (input span) + +b = linspace((1 + mixing)/(2*nlang), 1.0 - (1 + mixing)/(2*nlang), nlang)'; +a = b - (1 + mixing)/(2*nlang)'; +c = b + (1 + mixing)/(2*nlang)'; +s = struct('params', mat2cell([a b c]*span, ones([1 nlang])),... + 'type', 'triangularPulse'); + +%% other distributions @todo + +%% Save JSON +json = savejson('', s); +json([1:2 end-1:end]) = []; +file = fopen('.\fuzzy\membership\fan\u.json', 'w'); +fprintf(file, json); +fclose(file); diff --git a/centroid_area.m b/centroid_area.m new file mode 100644 index 0000000..bdd0f0c --- /dev/null +++ b/centroid_area.m @@ -0,0 +1,27 @@ +function out = centroid_area( params ) +%CENTROID x = centroid( params ) +switch params{end} + case 'triangularPulse' + [h, a, b, c, x] = params{:}; + if isnan(x(1)) && isnan(x(2)) + area = 0; + centroid = 0; + else + S(1) = (b - x(1))*h; + C(1) = (b + x(1))/2; + S(2) = (x(2) - b)*h; + C(2) = (b + x(2))/2; + S(3) = (x(1) - a)*h/2; + C(3) = (a + 2*x(1))/3; + S(4) = (c - x(2))*h/2; + C(4) = (c + 2*x(2))/3; + area = sum(S); + if area ~= 0 + centroid = sum(C.*S)/area; + else + centroid = 0; + end + end +end +out = [centroid area]; +end \ No newline at end of file diff --git a/degrau.slx b/degrau.slx new file mode 100644 index 0000000000000000000000000000000000000000..94160703b920c9b65b2d36dfd7dd1279aa5b061d GIT binary patch literal 18644 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 ahD8;)j0x~&WdmvB1;P!$l*;D{;sF4#iPL)k literal 0 HcmV?d00001 diff --git a/fuzzy/fan/README.txt b/fuzzy/fan/README.txt new file mode 100644 index 0000000..38d24be --- /dev/null +++ b/fuzzy/fan/README.txt @@ -0,0 +1,14 @@ +%fan fuzzy uses ../membership/fan json data +%and K is the plant model dc gain + +u(k) = fuzzy(e(k), de(k)); %no model +u(k) = (r(k)/K - 50) + fuzzy(e(k), de(k)); %with model + +Gz = + + 0.07751 z^-1 + 0.1716 z^-2 + ------------------------------ + 1 - 0.8539 z^-1 - 0.02473 z^-2 + +Sample time: 0.1 seconds +Discrete-time transfer function. \ No newline at end of file diff --git a/fuzzy/fan/no_model.fig b/fuzzy/fan/no_model.fig new file mode 100644 index 0000000000000000000000000000000000000000..d6224f0d51704101a1536ade5ed74ba30deed56d GIT binary patch literal 101139 zcma&M2UL^W)-|l6pi}`VQU#<-5Rl%aOYcpZfPnN~14Kc3?=_%wr1us;y3#`Ly@ehL zgaD!Zc+U0Q`+o0z$M`d!vDe;f&o$@TjFFJ>9yH zJ5x7HM;CjcXKGTq@+y3u`qSBc>m1NLFk#Xqr)=^Czoejyw6^~65@F&^osu( z_e(CpXa7H6!C`m)e%+NY)8fW2o5^!pZ`U%QbV6a!F9y-Fy=Sm?>|892|G%G72c>-ynFw1@^uiC?T;sR)pt`q^1q82Mz%8XWn)IryeYZPny)rlojc^2PhxgU`X|t0suT@afGnTIBR|P|EpuXn*--Tug!>_QG=*7uYG6}-1(^|Z^e`rcSMpcZNQR;b*0{v(VT(T<>a$|9R}w)K zWrUs}2$Ccw;=L@;J61frzs!E_{dFH!7~orfX;Ps`7qZiEwcpCmr?-%e)8C-4u}GZ} zG)v-TIbBK1^qQ=UE<_TC2S zzfMF`)g~;}(z~-+-?5g4*ga+k3J+YgZmN7eu4rMH#~A03`Cb3F z>1CGl(#hg0KL`yNzZZ-O;zw~C%Y~)5m6Jl^*84yD^mw-kWcX)4#cGAQCZY$v!vyPX z-wVpgUWunxL@zsnsRlvW1pO4YZnKiFszo0a+bF-OJ&S9^U|jO+R6C1am&l-)4H`v< z;mW+a7$LcjVw);|v|ft;oOt}uLWymE$qgeMGhDpxfF>5TNYRTAc`wK{es={}VPh*4 z8AB4nwxGI=xm*H#O}9RK-5zNm-z_jf=P;?p^R>lrxAkkcAm%$^a230pdwan4^3iC{nUD|DH-)3?sY^5Y=jXnu689$C(H4uT6`zQ+7$ca+V%{dK) zM&s9pop{E}bp^(UbOqYX;lBdD=GvX&Zux?EOmy=>bg|Q?ISA>7v$sP!HO^65XwV48 z*G?A>HL9`w&>*3`PxMo6j0TWewEwsU(;A~MM$w2xESMF>{#f8OcP$t{UzG6UiEco- zG*nRj$Q1kYIvuA$>MLI2#m}-R;jT8y(tssr**5-Tfv)8yW6^<)0o{J%&BZ807muR2 zcq2{_9S)+S1wy`)&>r(Q1F!M z%myZjnRc&Pe6z*%T_|(bl}S>fuq*uPd<#6*RI?=AcSs!5*M2SJCj5CRL3hhx;TqYZ zA{I`)DdzD5jyrbMPYf~~?zgUt8Csd;_XO=vGP`~aY(qFKGvV7e&RY>Zt6mYaUUH+V_=uYT z)gUkbbCcUo+MApGROJs;7UX?a4e}R@1=eE)%jeg_TWDd^hFZypC_L%QM!mvWYi_re zmVK2kB%iaobIE!}Y3_@9#dl^wkVTE*YT;gw!#i_UB-EwVyVJZuj`7|^8F>bd_;%TT zRvsgjBvSj88Kh>o30Y zSGi#lB>9?&-DT*(ZIDKWHxxmUb}|)>%7aBYa#tvnCWyD07NiU%rr(&lx%;~Xp2zVX zv$ry2TKbLyhd51!3b=>8*)0U87=___*6b zlUm*tB(Sny?wAb^0%mc}*;$4C79rM~QrQ!%{7yyc1A6@YQCwlW1 zNSS-gRk>L6kN{5}-0y3u+!8?dTx{1(_96R_y9fO03=n_9VW5Mu@g(M6>#6_3K`RAh z8f!L9)T9-}>3?1q&YtaeVt;v@)9yzLswuNQ9}dKF_NKKTTs!$os&(nQg%mo=&Jf_0tae9z?V?452fOKUGi)-%~{TEs8d_!s?Tq zgHTY-pE9<53Am!JHI|3X{-j7N7_o=PO^YSdpgv?n%sTu&a{NrKaxtczGO|6Ieb>}iVCKf?@@-|(3Mdpr zc!_^Wu6r(Cbz^mAat1!*Z6hB<;~jc7imzOMM&lehM%zB0@MrjX_C}IgJY5ae#PGEe zyAiulp^>c-?9{U2(QyzwkI_KpK)WE;c;$pewChXIsa?}f(UzVmH7I;vH$iP$8$%bv zll<_dA;({!Hl$u4Y-DhfTZ!(Z4k`)x4Pi`A+(Ur{=f-s><`tFi;LpO3Jc$mUEU-3? zI~A^~bb;mXrvjP29tL7g)!c3Sl!>{;`<=J*A9V2k2IGX^-2G|Xe{gU553r~I0CV~e z@TdRa?(`o#n*M_a(|>?B{RbG+e}FUnFOUUBbo8v4IdL_L{lVe5f8C9qxNm!NHUP;} zVdC7dYS?(skg)u|6>cp5>!my17#n!8Sg=l#m2f9U0rOah1OoFX<#Wea5dpIDJG!6Q z@u~q*8+dX2(o2uMrNUeA{-LHqOcB99DVZEo|4=)gGHgV}@=Go~^k&%TXmWbcNN@OP zn4Hlu5u%Qe{YlA4FdW4Gon%$Psh8Z_d?PB3Uv`Py+X-NJxBQ`Q08j5vN@mAQh%=)1 zXQ1mUwv$XFQ6`tf(tU5@4dqyV37SkC-H+^@Nh^`^2&SJI&mH3-@`#l`r%{UImsxt^ zt+}Bb_wUoBL#z=6KQovd)BoKf&&E(Jztj@0H_z`DgVMgx`UqAdZ$f0AGSdQq&5;L_ z-1QyY^$qXkU54xFmkZMkX~57b6Hb5^Uhb~26o;c=+u>5x0T`NqAe%oZ(Wu{Dr)dZIvToDD zCmrEFB~RN;OHl-4qHo~Oz=0G{Ab%!>qRBI(jtBGJQ~kp1<~w-T@MV56hY6r=kGsFd z@wWHz=&$oOqZ*e^_N&VM2n$eY$zg&;`|X%vadSK7T8ML?ZDvgd#0*a7tKrF44f|ad z;sCVEZ1#Ydk?vx}K%3Diy!o5^LRES8v^EM^-JastR?cPxYi={qUA$2wc;@%#e~j#n<88zmW7z)Ih%}bCcwkg#7277EdqABBilvd%Jz&U78PP^R+F{MB7|{me z>~OkG(nww4?(n)z`b+uX8`Z&Mm!vKTjOwuB#H4i(Wb$a^vTmbd9{;E|ns`S&Pjyrq zNV22rHkl=JLAqn)hG({bq>;TK-?7Ncj?0q0pxCj`YmcLmyP(=}&s&bmlDnYU@yol3 zqj_`jY$qs>Ha_dk1^rG`o_IWs{KfN~q&$=OEcpwj9dI5fo<`waH z@ucSh5)o}J1Npq{EmZef-hYyfeHc30%{4jmAwXyE6LBstZ~EJcA^~gS+%@gK-R(#- z`uZa~@XAwk8``(URKWOOp53DOf@lNMF47?1Yi55b+nxAaK% zc$qT&0gG5v>Ey)Y_xN(OOPYXK)NkSU`1exPg#Yj4@8vjD`48u|#Pbh_U|c(wa;1Qs ztW%ovIMhR*h#21GHmSvZ)TX2hjsKJNKk|qFJ%5pu@jrY2 z*J*4&{~!6h|DNBo`1i^F^AOW4|0{38ds-f%GA(N%OkG61q^b}v zTt9%h;rgibRl{5x+f3$A&L5-OV~k_Y#e8*`w3`azb9PfZ_m8vb~_ot3dUxd_r*H#dmhA(QK zUW_;O9;M*}B^}gF+w!$o0YeQt=}57iYwy}d5RH&>f5R-2n>c%fY$AsMCKFUYXjhp3 zvd~1mig8*$Z^_tz5Q#T^b-Bzx1ahGDF%o4%`ZJcdSH!o7E&Ac)9lP#=D)egXiK%o@ zS7XtSNUgGl(mqrf94~_ShU4H)yKiaan>-8@%IgFQXKlkdmXnM9${R18E1K96I8-uP z8#jf=Vf>>S-#H7I^ujsD&;_DfbzDI~=S^wlj#?4oSB%;1Ddp#|&HS3gC&F2q&0EVc zeSTR(Ad@;MPvb1qxmLcZ*1tzk3VH1~4XJJ&{e`v7x+|Ul)hyth3e3y@= z>qhG?uSSM(UYrssUULFX{37;{%^HZZlk;=*lL|-g?0CO3*iGP`_q)Qo&<9v}XUpRW z!6fC!JeYX^@?Q(iKUaJpKbn=!K~F0k4SB!ZFtz$eAZ~b9ykYfsp^V}hhxnU^8i!(= zG-`*;J|@(noIBf1GMvAzY3^lZ-Q(iy_f{XyaIt5ZPIft9nT~c5OSDyO!cW|L(-fV! zCoO2=bM5oV#s8$4cJr#JFT4D>(D06E$^$jPM;9>bbehYjM4UXsXPW^mWYSH5#68L1 zgF;hzB2Izf%gq2*GRdaL{qDJj{I|nGL?STG5&E(}L|v8Kh)lN0IB`$r&wx{CD6rYdN~R)w8|hidB$^)f%cubYT;dWV@(iDE z(zBAuH?j1~r~|@X)Dt6e3}0>Lu#zb^edw3b1O&TqB}RNT#N9MwAyaJ9>+jJ3B)e24 zM&ue&ZLYCQ`+$;Bmfj}GsQ2FD$tW{#+GNx_@0%o)vG;Nk%Fw$#3H8=HI|-%d4N5}k z=$2L^%h}*X+qSJK{b-hpx9~5B!?3m~bOFRFrvmA~3Qt4;SmCjVLl$@>qMQXDif~|o ze?|aU;2#l(%y3^sIWyb~;lK=cLjaiJPKZM$xE-RL3H|}$zyyDf05HMdAr2YghKO=T zxE{iR5w3**Fv8UkhtJ_ki1O#~HwcI4aA^eKIs7%^kO3}&C})5RARHLruMhwR_)Ekg zJ^TftoF2{sy`b`7@z9sOsC!)nyF3k6ox&qwrV4{^C@Va+I+ST`{-771x}bV)vniL* zohoCC>T!4#&Zp25G(N7;4e71%Hc%M*d~BU?0wsHLk*c_=qOKm zdA+{dmAr&H2v4CL+ zm$j41>vS*s>CY2*pNh?P$eJ(U!Fi#GLowE*h#|A+I#@<9p5@V8FY8ZxaTUT8C7_7t zR6%(EH&Eu)iEsM0_f5wNKcFyzh8FkiC`0+F*~keREu>}f5bogo(*Ua=BEPSTl6dl( zhnhVgrReH`UvRx}`Du)%2fyItwTF2jI(_2$B**;J+2$tM^CAVa=n6TUUYuQY6%l-% zd?S0HS}Jh9ZCeL2K0^^wPhPL*7T&1uiKmGdz`g3);WoMYdz^N2!f*Ff=dN2u=p&eJpn>L-{+t6*({_x6 zJXMgd`w8C!i$XHehXK zE{1lWM-K79fxWY_M=r$|0jp`6rI0gtc z2rx1u;+k}Hh=}5k*m$5zYMf<3WN;i@PSx7QqEeyfWxIku2`Y!i5?rvDnfY{n{g@U0 zrjFN7)a0OPZDHJBw@!TmR!Vtv9>PR8(R4G|yJYFiY-&#in`d%99!?2~_n_zjYp%*! z6^U-5hg+MK57JBu8)S<`36ghnElWhNqX}Y4)qxJB7XnR62TdgI-!2vFV3$+oWC;^l zIVzN6m?fgjH`U(Xln-`J_|duIC8977%NG%9z$s@XZgHDGy!hukBpxiFB11r->WkA5&*90%Vgp|0tg%15?QoGr-n?jc6y^) zgP|39VUs;6Za^A~Q0gU~y%rcxq{RQuH2u z4J~?iza!Y}dv^dH3FGKP&H(I(?;j@`17yMlo;~Jg3tx$!$qB3aH1n7wR9$nTn~0Y( z*Nh>V1;FJY`JyP|OO7*$hu|0}Kb)n!&0*6gxLPHa0jS$+R|Kck24eplj!>{+Rz*_;~LfMELs^=b0a%``_P>Hwx)HJbUF2dk(P8J_#3ttdJDS|)AT=Hm8=b! zR0PGLW*jf&4heF_m~|4NhNLPeK0Vn}K=>CcokdtWh4kp~@`6i?rQB!&3YZ1u45c53 z)0S6}iY|9-604wPH4g8>bq_FQVv!sABqR-8+dDlfR|*~>>gt znIM-03QOj=WQ#evQ&3mAopSeWUn?pc925q?Wi@LPjhvl z%t;!PO>J?6QnnEiL3_yVTJrk&9XVQ-8%!kf?=>}{iY`Yc&;Cp|KMphfD+TB*Qt z6tZ?_u1)~-E^%BsTs8bOyIDMys=5V?L~Yhk72Ld4wW(~ zjvc?9IF<4vzHiNxgxKeGzqo7KzmDu1%NEMvMtyx`1v(&F;tS4H>20}YF!`!^;CRky zn?C||q%`?4N2Z)Ez(0^iGFp3?Fbj9M5KK1~Jf6*`SW>o1~($~GIu~?t* z438n}6C}IluXcqG@q(7#no|n-e3s0b3gP9KV|(Ji8rStwW4o`Y%kx8`r1K+uye*ne zi=VV)F{IPLYP;7NRoHb4sR>+Dnsi;=7z%kQlF)XculIe}-5drN!>;;R-?tp~)(dw| z*FXyaDD|S+_sJoF6_T(;Z8(T+K{H{)9>(14S7yFUrlVRlVn|Y6#nQ5JRxgS61)6}F zY8^FOcND*7Pyak@2r9W~M%JlE^eOTK$T@0lLyP4}J*sD&y}wqXcWvt!J42APoL4&J zU_RH^`ITh~`958*^SKGr!^NdYqDhrum_ygU8mqpUk2g(yJUe;L$Y?F=o0%b-kY4|`+S3|HIEOhduY2XcC4mDkf3o^h3eqPTIWsA6N3C$2z4GFpc>R8Q+|d<;EnA@Fa& zc0c38t9o0Z8@0=(!h*bllCxig8R?+MbH`uu8V9=zTum7LTzqTDRzzO=t~$}|e|^t3 zX(MnZoi!W^uvS>>ym9TN}J=1}YB%&4wy0#vSM&Gk<3$Gr?4-KJqty*AU6 za+~RPMANHw@q_O6i;`d7*U;>U-6NCcL)vzNbS+=n^!7t&xh>1J#aJz>XcGi7`nU>5 zl~-?|by6!t+dL)>z8t5zg&qp98zTTuC`yIpYf9Dz>ab_IcZ>@}s7sTq!x@I^pPx@Y)>%&YojE zH~sy}*fpUSLdhDwDlcy1LH>5-w%%{5>1b8*Zvly0(OX$L*4tfh-tBJXw%cDDGJkDE zM?Ik?1($2M>D{9FcVX3U-`hf?Zvz`OXVhNW;c&(XKm_%R@~#|nW|@$Gq0jiQdi;oG zby6_R-}S#Wj1&GU|1ELce5?I8z*+xh`25}8?-qAB{?RLp`GTIMleIC#Qrz+W7FsrhS zebS=0Z&nr210em+3B`;5C-FCBIe|{&AGVPdeuU8rkE)p-GqMOHm49#i!?>N;7X2Rv zO#juOB{TnTxqo#3o=j8zclkYK);|sWj|yJH@PD`VA3IU8zkB_U#J{?Cl>c9Ug5M`D zkNbaZPj9YnUR*gtP~nv$EjoFg%c?Eq_Ok*?K1`E5j@9iUwTPWP^JD?^n?8bvXAVOO zpyK)X9E{e1d-+UvXLSM659F6i+Fp703DardRD23qKuF~?mte@@XA?3}$C8V@#_#3;~^qMafCyOanB*sb|$^y201=Q0ir~SU!J`%2fVYuj`9eZ-| z*-tiDrejP{5C%xPenNk+bY}PFq)e^&KrR|7C;lh_KiXPkgek;+G(YCzSmNv0rud95 zFnrO6eW+TPgQNwivco@kf>mWu0sOuc>~ic;%|6=p^vv7=gM$~@(kzV9TPH7sfF zoD&*!JG3fh&Rfdd){E9a+XU!6_WYpNmIO6ar&uYe?sJPi(1J!Jil_y7YCKdoA&eII83MW*o!JN@MEg{Y_wwLW|uf~<@ndV)xjB0wM46XeMd&$0|Kz`<*>BM zb1KHsm*k8EY9tP0vuhYW9$`_wE4oLX`@v8;_anBBoB4|l7Gt|cY%-}Aa-pe>;dn^3 z*NjV@*QegbF2iZv==G(iTRbhk%d`X)dyzlW!@^UT9l<@?Yjx<76ev?$>W%)|QZ{`k zbnR_Qj{<#|CswIeW3702qfPOQT7In1{@xn3+yO(FRmG;whA&UX_UNy9hEFV+XV$+2 zqMTKw!UFIJ_y-rsB}LB8ir=dDDXqDyczxXl@Iw3q;k=xm8@&+QFa2O@Yn>X7{%_RC zkLtEYt{$bYb}MK5`EXhplOG{w7QN9WQegu?3e6yspvO4ae!{SM&10tamOX3P$#NV@ z|H~IhgKSq-2ggT@vM8$Bv-ysfYir#H9fA(4-5*0Cgh95Qp&??dkSDHyMDjC_WZi?} z$7`|u^W~&`6M0(`Rd#+h;?u#Q|Y0&`Uto|FmVfHppN^vD-_zSV)97fslvVux80k#EGdVjv@L6T_T7FVkDM?X z4h0nJ6ki8!cGC^9wgs#E)8OSG4dP|RrHsFTD zeP^pv&eAzg^=@Je(&@>?P`YY<^aT7>G=msGO#wRhdehsm+(1pDwYj#r$^K5=#mHtU zbyk(Mv*O`-9vxS=Lk3Ph_K@*&Ur=Mni@;Hfsxa#0WA z@;T|NSEU7QDyc;+Kr(mpcX2n`+BPlY#1bJUFRDu2TC0Bu1PcgMICplns7tr+ED!$@ zQKsfx(#SR-Qub|D6rF;I1fS_hRd~G=j`rGbke4w}(P+_4=X<1B9LNcoDKA#Qb1NdS zeHh6|3O*X=uZ*FyDcIuY6APzrYb&%}<>!D{L038u;REhL2eo z%0p$dXseHKQMYs$%#xSfI;(l56m&5M(B^r`l3axTUV&6p!Bw~QEwmY^VOdMgTJy72 zRnz@YOK{;Y^(xNRz`sJ-2hc>FPj*lZieRMC)iTOv6ir#c-pZ^Nk5`g;tSOOlqsrP9z+PKh2g1olc ze7xxMkhyD1!?Y=Go7v6P;bUDj0`cjeFAb%%hm5G&=|ZqSx7}P&@XnJp+3Q zW0Ka*UczKDydaCyD>11p#0Rle$Yu;IX5TXA^6ha_I4ZX{(NZU9QqtirvlPfLE)7_f zU-Zqo5ZmoJuG*c&wf8@pE6Z9%BIf{a(Zzv7Sxqu8OF2XF*iE-{wQGM7b&W?bV;gfB z#+`dN9Nx7-G_N@_@eCFVu8W44?si&6-3yKgSRbf=`RdwvvKs>z-pCIX>H4L&^>$n~ zm_r}!^OjtPCOzjU)pWqMom2QJAAG2}U+j&M+tJS+I$T@Q;?Rkw$ymz{f;57G0vraF z4%!wEkM@v~^8zXYaoJSj<{dk;(h-mkA!u-1cl1CB?!(k^kTpvDGgs)ai+~euN^ehzYuG}N&lP1V@DMz$k12zaNq7nyL z)C;aJ!^WZ@b6z>moa22Q7~GGq1A1CO1^74DKR&Cg7PaxT@%W9(7;#LLW|#b6ump1` zqBVkcU3|5az?i(77S^N0)HZ&5bvosA+M9Z*J_%2e>1JnHH9A^>_3Z4jvzoB85}@ds z+M=uo?uloc*S*iX@2pf@tNq zSFEh5$4uxzb@6c9BAX3K;~+XsJhM~4KoZhLaOv$ z2=7e4-kE;4lR~8Ef%o0E{zQ@R)R-Z!VhlEHfn0+17ob=nFfqRMw!34S>RyYs55;-X zQj#;fR5PDH&a*nMP8ff%3Mg$`6fPBSD2bkK#r&0U79efXv2ZeY?w7mmT_rb z3VXw%0Kwzu70~?((aO4Gy^~gYt^2zA<1*ZIy;c8b*zEDOdBsgD-Q_EPNqBbqejfzh z+D1z~IIw|Jjm~ze=jY5owbV#MV6E~`pIZNXr3MmLNRJZb)ii|^b5M_F?z0~}a{NZi=AwMOyQ`-g?879T>y?_E9I zFIpAjb=x(Zh37}BP%pl5V;HsmGXA>olL|4INr=Pk?RM=*lq5ekm`}*wZEjmOmomx$ zx0!3Z_sh6MVW7i{=Bn-99Lf*}Dj_4c=54pp9cMK6R~p?@!I8e>3Au_GYQKfTnBhC% zyFwUlnA^A`Pjh&rtwM)m+0mI4IXse9pNAiU356KkdbcA-pXTz&T15`u2R{-bc4OLB z8cECHk+BLNegb9{;&HRw9vn&g$|GeJJxm1_6moUj+V0JzjByZYKDwRMyteu@d=LCU z2*)jX`^Bh!PK~rx*f2JjM2Ou@XS;MnKetBKDr%Sl%qv9c#a=m36b?ET3`h$zne>toqYLKs4`NAaN!CzlMLiIn20rWl^3kRKkM)!_9NQ$s9@z zJe+au`wus)Q;|y8CsBfZ@Befo24>A1cV{u5iu~oa!HR~HozmWTrrtAVzTO^EJtU*3EKVf?-?KQTMx_~Zdq$kC1lTPXbm+3Oz99{wkHA1vR)`|vD) zOGhRqdd^w=@=H0Mr_WR~Y1Ye~vduo{E7b7vpALHQy|6PT$CfDI^ML)DVKCVZ+0 z)K(=%yVG)XJo+B!XYAwhErAxg1)CdkP3URzNI!8$A>HM$+$jAP?OSVHw7lD)o@MsX z6P0ja)Fw$hO0fet@M_RXcCP!jKa$&zsMd-#X3VMHxt zd9@84g*V&MbnWf^!tPD94%8Dimj$oCxRiu@l#U;|5yxn@DqppSA}*Dt*ev&s$A=E* zt(U0-YCfDIm)?5#)3X~Z!XgB+Q!{L>G$)0>HM^Ye32Y;0Mo_*Ktu=^c z-DCgRmK3zn!Cvc8$MtNj$|lKPuCtvJ?GT1TOnyuaWLK55<_e5T%rmIUU$m zQYb@GNWseW4QwuUI5~FMosK%+)$fg!?TAnyB`;=_owLJY}MdD+y7P(CHWt6f2q5({BP?$r~hSbF+KiYOrW3tiwWibHbENx z7s2EIAvm^syxzMj4z-zpmAMNTzb#yEbr(9V7(eQ`pqfP6@@B(MLD!Hn&#APmE!T~> zIzRmOTrp0tQj2~K7_4eQ?7hVLji7s3pgT+P=Uns6G~AvP-o8-h-)5W#C%sv9y$XuM zfop+M00+kNdo_h(H~xz8kSwbnU+xpHssyr<#uG20$sL{cHuF~DS2d6u_EZv1;YI8G z0ZxN!Fq9;Ew^{;a;sY5=gI+A@bpa@eGG8?7i}AS4|Af40ab2t>zm&vnw9D`FtGg!P z-;f~Vq(nUFU)~uQs*y6TZ?q$++oi5XxNlncCc@xUlK)QzYh`svD zmKoC&yb2^Jp#@=abMLRG#`Tp|=UP*`Dm!xt3{_8G4i~ZR3k6M#TG@wQbTRwf}@Z#*J}0 zJL{k5N>h*hh`o_p-6jbOnj*}fFJQol6f)g zi5+mj4x$Y2={<5V2CoHC!I#>*&RmgN43S>Y$2#8|2ktylVL9ewwdImNE0Chdiir#K z3d|hU{O~a1EO+SBozn2&54Y#7u zax9+`CUg~kCY4&)`W_bBO(^oX)h2Zt9_KfBj==+oYqmakJh+kqq&s2m#y=AIo)9AFu{v-WMd#{X3$hc<< za+abgL`O(<(@Xf|nbfdKD4l^#fH^rRX_=|rF}=+?8;fbjq)vn-MbzYH@**=DMJ40H zBWdCyl6@>(dbI}3jB&!h*1Di7S2(YT2{~Su7rEvo)4lh?KEeF~#SeMg$Xz@r6AkLbih#c zq+JMkTKP0FDd!%E5WhN`DW-yLUT({H+vgp7;g3PuV2RZD;R0Onz)3G}q)>O@^AtX; zWVsfCG{~fe>*jZa@`97_$UAqV&IxDR@COT9qKhvKJ5TJeery_v8r*Lw;Ww$xP z`PW<1mRN#($v)jCX(|8u!9wu^6WNm~T_zOw&{A?0PY4D%MZ^sqdQD)>2v5t-^2 zlB#xb@}1IizAY{ze^xzDeGS-;7*4$|oa)Mw@xZ~zz|yx+fb=yzAmlKoqdtHXwR zndp_etf-Cpb<*Tazl~kSUza{_eJO>3Y!pXsZ~Z;{z#N|i1hPn`N>tk81aVs2Q`SJA z_fT(}HMHR5n~d7l9X^ijbXig}WtqCiy+jXYmgsBiWj}nPADqI47?&9Qcx^`wkEbpw z+CsEsU|{NK@p%nQJRl0y*Sm`=&8~XvABB3f1VxA~(Wus2w2Brq^jS5&chUJ|5Zh9$OdD;)VfRVvS zaLRNe>b=JCVaT!uGj9bOTEgr*jl6hT-`WVtdbFYaqvgP{J>dzgxHZ9^lR8ki@O-*B zmIvB{VKK($S@qk_=)JM!G;NjEs0`7(aj9KOVna1T^kL-S|h^ z{yZWDP!ppPw@hv%NrNER5StFR?t7B2U&LP=TsVJi@Exq*R5cXDv55^hrO*aPI*Yvp$bz9E6Y?@4E zepoc(d8nt%j);pXyf&-l1(Y>8B*s=HV3Cj)#V1Sk8u>i}3BEVH9DR0NNW~4 zpG(7g5%z*m^x{+-r~;8n8)EqP<4F_xiguJThzk5P-{~Sd8d{B zehSTsou!A>!I9XdiiRvj6zB$hRdMbK%YJ(2HNJrxwSMRawP~@}WF#0HZc5`M%DRuZ zKaRURjMJjl|I(^lLu2I^kJL2Vu$LThhzR9kTWx!4yJ|*bD7|}lj5T&V3V^D9bT(ir zOeoc*n=}o3r$pTrr1a)l&;7<)30{ny@>XG9sjn1#<=S7q?*5oEiMymC7-^^9iFqV+ zWyvMyl=gjhUq)F@hbv=lFmI~+<$#yXkj|?Nx%UKdYrPu2&QCAaDDpVR3OMhD-#s41 z0kAsNj9#w^Gj6+TK<<1&GZAsU#}{tbE7kWkoef*h2b_wohcOhoYsm)NRBLG)6tnHC zc*OA^#PwM#b}(re=p5fTxW#EAf2^K-JT}N9-(xi76!O-ueUg);Hu`*yCa;Km`#@5A z#yDj^^8U<@pJO!l(h^E^cN9eNYWX1Whf#WMpB~3foh?GkN?avy3$^i#f+qnW%7yxs zfMQ1yG(jc-{wh9~8*U^NyhW(frO3L~zB@~^cLR6b*XA>pj`%JGKJtdQtS&I^ZQ5%I zz#%}GZKQ={u5)c;(dP&kHf}11I-GJ%F%?B;>~LMxc@D3{Z=vWyjSVl~}UkR0#P&8+8_X{C%(_cI# z|Bx}Rv5$s?EMU!$%}aki^n5q#!b5JbU2S@@6qT3 zH3rY34;!-6*I#-(Z<(Q+?i;%va!@e@oFQ5>GPw$FD!)eCwU0-%$uhXSN0*rHC$=-F zpALxTl0P_XyaFaVFSfxDZ6dp3JY2|$G+0Q4ttgSd*!pfF)apXCB7z{);E<5azDuUV z%=h&I;$36@T_gvx2(JDU`g}Vxo0urN0uOR6Y`0*2r}F+nx*N+CHDY3NQ8mj4Imp?& z9++7&#Mu{f()w#_$R*}{t1h7l)!yHr?kgAQ6jQfKmHtfA%HaAFN)UT_!@LdUc`dHc z-g>^Wghj>gFmt?T;J36q_%J=YbiT^vN_lCj?^rqd0W`dR|rO`BM2(QzM1C1l5E>W!I+;4Fuy>K39c80NaFRQX zehKKp9}AHADtnfcN}cg_i+yWwdbj4PwZZECmGGWpvBh%JThe$Vl#!eFsXF@y$ID2h z_+LM9m!{#UX-z-vg98FYqzMUqze1J=GJ=BgfuWVFR}YUKJRQO$oozmhw~*%@XOU0b zR{d~Plz-ja>W(tbS`Nl5=FX=xEHjsjRoyc-11 zo{OX`pMzcDOE|+Q6VnfM^{!*1Mf|%4rIyxgu2A4Z#Wo+8K7E}0W<&W>n7*F1PIKd$7}Ok9}M zSzP&m&2`(>c@!74&pc~El;~9dWrs*wALLFZS@hi@>Af+jx2O)dYRCQKOW7gf-aYpM z0NB}OuU~d3#o1`a(ewKiTr=G6#P1tHY&ocX$USpp-*sB`mEhqzXS(jfx<6iPcGKap z$%nax5aP>rUMs5d^>o=^H)Jr!fc7%MgX?qZp|>cAgp+3n-X}Ev!plaWUJ65}cl1L@ z5vJGz$C*1U>f2!k~?upd#RXz?+J)_K!yV#HGI)1;N-lr_Pys*1O^!afW}ay(aY&* zh3GruN5wlScK~+{=^Le;!d8en7y}gVrQ8QRG9+qz?(}mdzJoDP5i*Z>kkw#HXZ)+=M*^FJwK6yEuR6np@+p-`in)6NR_cZ-h$cT(;GFrd~2 zPX7K(XG*Ky--f#(N}u*HtuU;xV0U2m`z$(A9+;5&>i@Fnz#7IJ#vi^r{3v=Ln3J;2 z?yP!sAebN%FOxbGBa?>`#fa5Lb>^}%@QG7yrMYAF`)r5ccfk(lreB+#DL5to-=<%m zYChEjx_)#GSVyc31acCziJT!;F#hpkUDfO?{H*#Yn@G%w&&k6H-$}*EP|WxI*Jf7= zfr*&!irvco3e`&HO5?pV>=pKp6?fY1oqhkui0w@4SMiEwM`6I9riiI@ADYnl2K^%G z)O|=RKq(+BfF-~zQ2wxu{w#cjJ)q*@zl|~}#CUye&L(~pul~Cuk}h3bliS}_f01;&zyx{(jdly0gk^PW~eTCv|q z?Y-u2blkal-=2q)rKu4p&^sR>E92Lk>W|X0 z<|%%NIShM7-cI74XW-u{8fM(kuAYx$z^X#dKBCDTt$jD^Tci(q0BqCVcu#i(nlNU? z5pxVPN(xZA0DD-#KIIssa%$3_fY#_ugh2+p1<*5V@xv=GePKqZT2j0r@_6?Rk$%_3 z=J<1E?e$cY!0VihNlx(wMV?G)|Kqiv^#O&{y#|D*malNhXWKTn19k>J^9ARhN1$B~ z0^^$a;vU}PJLSeicEiAB0qEX6FNuuKs!E=bPzw|p?##u zJ!L;P`pDZq^R&>`cVF{!c-f$%;hLly}Z|IZX<H}R#6Tw+ESwA7iS&~&uw5=^ivG+ zVhQ7(faY9zVC)4?T;xIOjb*k0V5NK%E;;qW{-Nb|HGN%46er#?GEr`=;5LRVRAe}O zp%P~=V0IvhfO7)byaM3aRnkfPj93J>n#s0%U*tghlV%1Ct+bNV+tUHE ziY)O%x-P?!>`k%7AO=TCln+OflqZV{`?+*93fT+GJ#`sxxE^g-tLDhR6&+TH1U_K@ zGP~pOjTcOdu_IWRXvx0QY*XtGT$<1`u@TUpYR+FaxcC(47}PtX#jQ8QejLF7WQZ}% z^?GtHD+--e{pwn-+_>q?sWGp5tM|-)wTwZ0i+L_T)-$|kA-n!9DMqC{fAO7N?Uvy* zWH#H8zacg2%L3oLrx3johG?786MNE}Ma%1LGtCfusDi7WuoKi5*)F=ch&YvN=;fAp z5=5V2k+EbJ{MccgMZ{zXg`QpVZ|uYrwT*Md&Pw4!j^_*K0<@hV0a^Y}Ak71h{NR*^ zh0rD!oU#8594-Twu27TmY4?@sA&okBsdEIOz}EQyx4JA9?!D6Lb9X)Ktc<<-YJg`Q z9)wz%^_Q4Wvce+lvNHFks{y`s0btajb^f_uT?H70wx-_Cjniq*(w;+GVexik&q|k5 z_7jLlUL!6)<#>m~@2K*8yE2vR+3Q0FF--Trg#Vd)vh58A2W-y5%|#a%SL z{gf{|VUyj?|HtOTnlXvcVXcd%H`A)WdlLf%Jxvg_de&rJoBVdXGNt-v2$1zmOW3ge z%vsp5^Nd8eb}H=qDOnogyEl0n_F}dyPl-$scc0RlB3SjTRk}Cj>>Ola_{)FjTFnfp z(u6x>-(jmy$zx`BGQ!o94>X?AzR@G;XmdVY!?>su5c{NkxndagCpNd zMzqb-Mn|UZOvwddvC)mT(K7M{;Yg-PrT_|Ys$XG}+kNvZE%!~sf2Hut$BSxzCIfWu zVi)3HF`}uI`IT|GZnB=gqN4LpcbEUEeC3~>-6(&zlN2bpJBnzTqG~=)#(rm|s*sTs zAbx0+Uc#0h?G0+=sCv*pWFDGL z6nS4`C?T{_7`xXi*1cpKtcZZPMaD@OQ!Cjd2>Ooazf}XA=L}e+1w`b$Y~8_1Hk#!K zc_W`49soa$-T=KFop5k<;m}XNqvhc`dyG;UEyCM`(_|Owbw|7e)b2?)*qROU)jBNp z7tZ%k-|vn@TCul!TD(cW!-Sf$V*%>x>{YwBf4su)%4Z5TT@H;EICRdmk z7P*s|ixbd24+iEyaYqjidw1B2JKH??%`6(=(b|VOqo-~2t;1UrYpglIZ8yZ`gcJ>?7_}V=w?6Lph1o*~V78X|x`+7@0mxBPJy{`XP%% zkVisX*AlzfOQ6s%ZCzH%e05P)X}x6-si!J}7>P8Xan<*B6kK_cr_ZxC0NM9gZBI4e zsW)`x^HViR=@eE`9V5=#sO&6<;dy@cix${-gC`<$)Xevure>V9mOfU}jAOa|*n8=x zd0G*wh2^-b*1djjHIOdi!E_CoA=0lD%ci|C&wETv(afSJY?CpST`Gk?YcTPB1SH>oDq z(oT`Q(V}rf#o+`%3ur883puDO1wq>D#~vv@(HLIKSe1c$Pf1#%Vhk}~4K=a!NF>wO zly{V_C_MeAR@N782G_9yz8|zSE96UTAfL$;#?Sgh<&fBw=WZtvby6N`d$tM9Uc(Ju zY02~regnO=6sx!e1N^jl*(#fFiD|f-*T>{|n$TFJB10;XM z5|q{~_%2QYir%}m__S)Hqhs3_>MXvQc}gF~eIo>ogUM;gNu|@K^39^(A0wu=FsBXY z?G=u0twLw$AXED+owtO^VgfQOvF+0fD z0E0c?9!v{^&+5#S8!f7TIo)Mb1_Q4-w;S0*vPPl$^V8$ai|yc>PY%(#s>x2JC)hF{ zcAQjc3QDVK(87gfx^HOhQJe_KV5I>wSCxgft-nE8p#0j~Y%Kl88r%5Tm{s0T^4HA7 znfdiuo+p!jXqLYY{7Uh5(&%IA%UUO3nYm+T=X%Evf@U>#sU@ph#eO8XEKZ*t% ze=o{Oi9qEF*-+ls7q2Kx)PLT8Ogf?b()`MHw8D#dL117a^Rl1@;|p1a*hDrm6@vwi zR``wrH^Y23-mSoK^UzG^;=_u?NvU}R_S9*~;9;NhZCqWSn0u1mv>FgL!7yEfptjY$t`rFg8@`q{O8M^LPG-ZB@? zuN+=H-vyP@-m)FFbE8|xnJSszvwGom>;;J37A%go$ru1ko$NDc+IE9BsJXsGrXV7n zF+WMK0SgwL=`*raHWs{G%OTamg?hGQ`1;-$PqG$+UIiwgqp)g*QK5gJYoD=9WU<7w zyWe%Zv?Tf&bP-4OWL9caae-rBA5M906v<8p9c*leqfqn-4#3yqwNRhN81yO$Y)YgT ziMjZfPW{0?c4D3HLPlo&Gv4gFcE?e9$HL+wbr|=ahdv|aJYqV};uK>_B0ZC)vMNKt zQePb4iO+>QA=>F4e*W^K8+U|B_IVp9oFIV=gr4N!jgKQ>ilC%hE2rxBhQ_0=Cku-> zI!P`2bq-&G5`oCmr5i3e1ua_!r`_PaZt$35Q=Hh~I!2}=yhDIt%`$}e!H=dFouR>L z1P)|>y2y`?VM1ZrKV4+y!bRi)qptqR9~U;#F-#=Pvf%fJja<60krz(HopM1@SL(0- z#U$)xLoLbIp?B%Abfi-BneU@7K!o5oh%B3S{>dSVA6)5)dC3eIf0IZ^6wxmdx$1P| zH;G*5rT9f6@f{C>ev!zN2J_z}ayjYBFA^zUR`2{pBBTcNzeyxSk?0qMkT}u(hL9V) zlm_e#N=_-uRUH;VgIAIWd5NKd`de8^q*D4Ks_wIQl6ah2mxq=gEtg$LM8hxZ_yavU zQaW`zbT7!`|6qqeNOfR!aP@|%@ju#ewVXDcE}bx)I-Qj9Pt*7dH&{djM2JPWFNC7} z57YPyH>8{_ooJl2FDN9PM2gPu$%*;Fz=f7vv$||WXhqQXhiUx64I&T;=nCj2=vwR_ zrtu3m$p0SbZ^O_b`PV>K+ist{Ugi#}xcbjP2AqER2MIrPZW?p?{ryTsMEzV&)(-|& zzFZ*4-vfnIkhDEH`MJy;^2b2=(GnvN6B*?{WW=YNADjP{OCssxVPBlxx%&Alf$TMy zhx-IGrs?yRD*3fm-y%jvR@(M93}`&}=E+9^seqn004eVqqTcHxRgqe?>%l9k5&Wu8 z<9{qRb`?%V7}4u@=})tKpA_#S2QrJEByp{-}N|7E&UCKI_u0W z2#V<&8-W~C;{ihcDuq|9v*XB-e8q1~jGc0UKDklOsrlQR4B6`xc&P}E!M#!Bu6ap9uGLAHqW(GCQ9}N zp5&xYvWYe*?(bg6NLQ+G0FY|VK-lzQ{*Ne=I+ z1<6;j>8!UUe(!l=3wpm7hNH~_QO1=n2ga9rYsoWh?z^NH)T1ODITvd z9zktltn(m7JifoS}F0$$A!O+Y$~+JL2}pR5#-K@;M!iDqC1vJw0~l1jp4xz|;qRB$6Fuc2-lw zbMqpy+xF6)7Lpt=8(N})853(R4ungH*8IcVk3T_cL95=43#bsYc?R2bSkWZQ9Y9IL z*y#ctK!?v!>hSv)PbEaoNqXDJ3Wzy>i#Xz;gubi#@!r|~Ar8#fe1bz^++n609}p@5 zp7Q8KtsHpmQaR>f`P8<4^U)tP!l`ihqk2^C7lK%WIFDMRo9Lw;@&phGl(P zRrk}>RhLAPAT`@yt-P}XU~?K;r@6gvx6v(PEmJ?qEAH?OTz2g~rPJ7rmbJEUnM`n+ z9n(0I@F-#isZu8;&#dyKRl@V?9BL-#sg0)I@Jo03MwLQg(fHQEo1te5w}d6(cpJ$s zK6f9)4cRmZJE*4f8FYll5=#2A^|`&^tRmgsBE5aMn!Ry*>r{3nhjgKc@l$xoq{Lf) zpI5gxMfm(V$Mqer&xwnIeTej7?_i8}F(E+5@3q(K$kg)rB}?}CMd$65SMkW8;%Op( zN+0|ok2?C$S0>|%)l&L!R<*Yqy|q-vaOwCf1k5fo<7KL&6=L5GmoeN`ed_g;?_wS9 ztb}A*g%tv2hszvZt3LIkw>HWehF5$0(}x0%kNU9}E%A0tfk2{>hhCOm6GZRx+^^Ib zbxe`Ir;-R_cE3t*Eg1yl{*EN1x6TLx3XeQ=%0v>?kv(Sv%71siL2nHR25Njq-lVr) z3vO0;o(K8LIS4tYU)YPut=3@*ZV2sV< z6gi-&T4>4M)ZiHAMCG{t-|f)vKNYb|2bm`AKop%Xd;*#BC~`U<1G1umxN1Tgl}0D!|L@iLpX%_R zJONfP{;dO=kb!@gVTa>?a3LzEwEe$$;nwdC{>>Q#{{Y~W`W)IQFD`zCIum*vMY;2>I(<3;UX5rfN7qF*{V<6!bFZGrgbCn}sop6qi{3edWuG3AVlSZ^XJMX8*2KDN* zby=k9YfDj(1+Ud9HQ@ZgO8oJuvCU%GJ~yJo@%>_0z?}HH&_$bJ%op$ikDCX>R4Kd? zFMOUaed}&XoT`euxN*}XO-=N!@*Gs|s(b|Id~$SkIGu*BlldvXuU12!9awgB*AD_) z%Sd#7B3n~85onAXu&YlqxsTPk&7f?_Pww~QsKF~V_I)y~f|PyDnU z{MlQI+V3m_Dy^TXB^R~fpGWvQF4gJFAz)CjtZjF3wjMaYJoI!t}zkecC3^D@&t*v}`ZBrNXE4 z%g4n?CfE2D;CSnxDU+f$W6BqEv0P(fB!jP849ed#g{k@(QRzH-JCpkg_Bfp;S*=nJ z_IM&orw`5J0Sjo=I`8G?0tC2*7wsn%wlrIXN@{CD$mfrT$*sa(M(n_`cBtB;P@DegiY)bTJw5hAi#2eW zDWuA1#z9hr9xTn9Qckvs7JE*mGuTkeh$ozoq*HTd7XM^v_i+9?Gt#yixj>RMKz67$ z?EO??ZjKXc$i(+zl|xd*6NsC6AkVsMg9{Tmq19W(OZ-t>2mi zcXcHnXh`ipRog>6GN`gt&(RvXZcynqKKJVInMpRjlrpEg5H;b9^JzAA5~<;pL7vF@ zp8Ep6xzm*Z3Q=Eq99L-BS8*MB!1Bg@dMR~5-?l$=Vkk49r_lZzK=s3k@0-NjGQ{=6 zgXHRQACD;N;Wo$N@+^Ek9*G<-uP?w$y|LRmj5%+Zg$bkJSVu_xoZZC<_7w=^40^Pl zo3D|_pF_cIGLGSa9=&e5l?}>k6k3dp9rpZKE?m{M=+hk~u7XrFIMApOx!=Bu`w_#x zs!`ErIh`g}HjTDtDw*a+I_Dz(+Hk)+>#eCV-9~gkkR$i}dcOqwv+MUs!s%pFWBT0) ziC3>`r(LH|3;UY=irNe*xn%0oOj9J$d}BE>R>;?z8e~nL1xls{bXIYdD$Ax|fqf zuyF5lya{fwT-8;Q?WhMMMnrfD>-8NUtcB4DrIF&4{CJhM%SC+iwu(D859Hb~DCcf=LJSI2seSy|c zdXHjSHBFu8=errdVR~e+#5jfbj&tnWuj#2gRD6g11Jnf;&`*QhKZ9C2OuW~OoR-#1 zq-XEzJs2d)iW5O3H9N3BZhK+0!daX%Q}$K5BFQF-+LDjbLjHz;#u(m@?-92ocN%?T zPo72OWV zwywxK9?2j2eF7#`cr&LW!t1h6Wx(L~An5}_M6ViKfRyGMiHT+A<8wHZj%~Le&+DtO zglIer);&q@ow3?0EskGQpVaPx2)zX#0j|{(pN(}MTD0kLp069WIPAbbYeFY zbZ!wHCxgEu;q*HW%L^TiL9PVQYapg{aS>0a{pE#D??A*Q=w%Q=I+2K~Q|7Wnr*|;o z1N5slygsjUd6@{sSG+auI^JAY4r<~2M5J<4<(kUn za%x8EE8eW1Xnz&UdCTUk@7)5zALOLR-HUIK-^{UB6ENmaOAC~EU2@ZtF;XtQvVH0! z_(Sf__1TQoR@Nf8Tjo@7qft?r!wa~LJ@@@ay>a^loF-@n)iGlk{=n#H2g(Emi?6b0 z8}*!xb-NfC8&^LbIMDWpz-@_ayn6;VY zT{E!JO?e+N(&+bc3M7A4RWH|K9wEicVAVBTR@v1WBb=t|ZD$ZLB~iFh%vR1&GLyZL;0N(Gn)C8@>O^Fd$d)~5o(BzD~245I(5ov_R2@nB5)^xlIP`0 zl`yf-{1l_lS%3}LT2dRz%0gbi@{%*+?d<(gQkTv(3;%@sS#$l58|97$O@(y} zs5_T&$W36qIVY0(F}u%lFrDv*s7=e#A^`(_6(-%?*`KAecWWk*W(3CUDCa@ zV#TF$%udAK{+OkZ_V_F+<l|HCPTqk|m@Fv@|0!2W%O%hY0<_v9< zqi{#O@KsVrF#L;#@6N`ld))f%+-a6brH|J5y|HavLg;*}5tG$NPVwxE4WN{b=FPLG z745Lk8XNT(Upn&)X6eKv!ufa3AKce^&p{_0pfin5$Aib4cXSfns`zVbHyTXCB@5OS zgl}`ir_+E-5Dw;&FZdI@>g0Jp`z8Ub-UreJ$Qsn8*o7c`+w`XoiUoL45;Jp+f#LH~ z29BTRp6??b4Dhz^q24;}zPD&>V|{5NpGxGVx;}9v&Vs`##W4;ydTJ=R?3BiahQ>2W z6pm)ctqZ#QOm6e6uPjxRSyem`9U?!WsQAJNms+7R?s`SlKRv2~l-b3hN!)jY0Kb^9%YRG zMm_xP-Pi3WCyaY(el0uaiC9tedOR*epKaV{L$hN;=gXt{)1l%BvRPl!TVLvR6EWPB zCRl2t@VSPfRcyp;fu%zcW^K!53TD^cGWTBRgyEF&JG-i1)fTUDykG|j0A9|BgvWre zW%??}J!WXaG>DcF81Xpf@iRlSHm|vJ8p>hpg1KC$5pNDb2r4~&C#=9Oq| zPT5rAS-T)lt4mh_Z`=LmC6j4!&vmb`gSozn&k}GUhYg0g)3=-%jUA9n{Od%_>WGww zWtr;hZa2^oWn-FGD7S)OHVC))@Zg3Fyg%H zU97;p544ABcnjf^Da`}tED7B}RF6Lg3NP+|{Sb8^87C0N>hSPZHM=l%Jfbz_(}={t z%@vp8DraljtSY_P!xfV%sl^>)GUBEUq{52DqQ0f6-v@-#_K{bazWRZ~NG6>K+Gj3i ztl)jR^vj(Dr^k$*l@7>0beO4g9&U-{$&1JA0crhYM9aKu1+&b)EzXjV1DkzYhqt$z zaD~b#Dh;;z+o9Bw+IJ=ilcbWL-sp?bwaW8?(9eHN6xuoa*=bM2%QQW^6Va2#eYGCH z9YNPajlI1ic^J_=*rPxd(*rsya8$DPTMd8IG8)?3RzG7q^IVW7eJApqGrkwQJ{c7U z%Hd!0Bk9t6w$|1Qp><9iYXClbqRkQBD|Vhw+D)^|6 zYg}21uT{G)VWS&<5W#ZEM`n6k9ya0b&azA|tf;H3B`?eAYyuR_E^a84azq_tm`ODh zD=pg_(L}2oZhf{qm%B5VmzqxO$Ww9`x?f3K~RPGjG?T}0Ds8I&B+t_rTO+RTuT}-^iN^)Hv0t0 zxQT`sw3&nO&&GKitVj!G{E1 z1e2ozs(wt9nAEHGamO>=LKw3cOTLui*e=KMjE#l897;uP(zP-d-TNVk?|4hz{k}1= zs;7%7LOjkMue=-9U7W?U;GY=2;|nk907~R}|;{md16e*o*NFmk& zpO&#TP{3sxk`F+e%cDnBg%_Nk|JU81CH6nSzK@C#Kz`@oUKY zN;oq0{^}Ccey!K#R(0K2Ki}67E_UX-?ffFI()-FY;VQj_S#}%WMPGfor?gx1Knhbj z7qfXkZqi}eLDof&w!FO%{Jg(-3-#16o~7B{F`sNezn4KkCMx7UMSWo(N}SE27hNqK zuo~U81XPU*SdYFhfKe_$iLmuXN9j3A-G?VFN72H?*>;@2%JoWG9Yb*V>IJ+l9ukao zfsKanH!5j51bMwDRm^n%(KD-Ss^(E%g3M~U&m;LjKTj-R(v!ftWD^Q8sIY_xN%Ck2 zrb_WoRo(G3dSqa{???BTHyejW6O_QOg+Zd|dHfo-iA3YqtbTbMbg4 zKIA}yD=qPOd@eb@3SjMNqX~h(0mC5p3@EFB;G~uoJ70KLp$RW%2*~DB;_k#)Dn`ea7Jq=gKNoWKY5dXOpK41b{^v?Bw?8=d;`s*`&-eX>p0RO%sH*W_TKcEqo<#f!s)w{` zR!_$ZQ$0!UEh$DCMv_JPKJ>WqFG`L4%U!L~JRf=l|LgI;fcTHe@c*iE@#77OzqOT; z>(?@~3qZbjIlmX0{mXxU{L|Zqe|n3!^>-KJ$``Nf*YY#Zf1p?L?{NLy#oIO9}7L3G)F;cmcxu5#o1{i^=@zOx&b;iU2P zsYeFY$w`gFDc*~t=dzR(cqX9HfhXXrX7y$Z`R(x^H|3*X;rFE%P23`9Bnw4s*D_a3 z-@~%V%+p`pQoM~`)T_;H_rhvYOp$-i(eiA9V z$ITMsd6Pzd9q9QO(-8F&3%yc7UWu-Mi;Og0%+}?#9PamLF^AyBbjmW#8AXJ|Uuil* z{CtmvgK{>^zs#ef#6JFf*K1E%t=w?v9`MQdI> zp1-y&O3RF{FPeG5WF@)pIO=z@iD5uFC~tf&ET3BfdJpMNi$P7(ivqr;jabvg6pvVB zNGus^nmTf5L3X*ddF+zEzq2K;H1}3Ea(@|E)O6odO1cdAo(bubt6>nMoW7Y+QD8(p znM!^yJcUt9*>3Mz1_#bk%N8dPGEAGg3bq>(t-tO~hTiAc3AL-T7JR4&Q zBZ5?0>j}Gwpf@UCstvRsepjf_5CSf?4}znR)B?8wKXn3b-`oE=EOA?$)j(5bG1A2* zCZ}ruXXiM>c`?tPUP%;p>saoI!H3pDIUz|Ih4VJGnmM0MCf8cenj*aM>H~-spl7Jp zj2jfdc&~h?5{sTYTrou!2)k?8M4PV5!4kJfaXA~XbGg$!136bela1U1->1qJoj_&0 zPh?mO_vQ~tGFIg8y|_JHumqfM>~ zNXJ3(k3Vy_dqyd_lvkhQ*%I22PnBH@X*Vqm9Bu=RHqTHXVdYf1%rCfcPFcsPAz$|8 zaJDR>kNl+|4KPTh$|m!FBk zW0l7-k3AQct(9}e&|`su71BznVL`<~uAW;%rYCa%4gV(}O9DJ5GIt(VF6$>XW-{ID zjwcV_B#IV@3@hF6*Om5-_*r#I7f!qQ)LL(xnQnEd)qY%1dV${!S4f)U5}=<}bc$-D z;lYyM_hH`|N_7X~&cCg=hlp$n#O;QP|LE>d_MaywkG=)-aad}du%RlwMzfx=x67kP zH2g@fu>f=*#6!GrG{uuvfbqjru(XZb<&sR2Td$}=*A{8pt1v_4t)?dCJ4a>n+ds$=uM<6afj0V-tz)_UAYb*KA*trc<>^Rog` zJfv=~^-vibD5>F7BAjSR7N|`3+!Qir9`(HDgEZ8$o1VSIvnk7IkA=0j=rUN_oKCI_ z`St5-Pe-+3h=G<=D=4qni?4jPW_oEdXGhb8)yXg9ZDQi5=>w0dl46=LoDkr7{MOg% zgAD)qELvl%{ah`OTBc`6J1tk;gX5$7WnpG^p`Hl3koi3ksnYf$mDs27`FWi(*U~$) z0AJP0p>-c*E$uy7+l92ksUb2N7>%z{zr!)jaDJsejHoe+O%M1!03*pV>Nyte(wFt3 zXUCA1T&x_%YFWnfec_CDvVv`oXc034Ej&cJpRAu#loFgYr17sIQgpb^EMRg>uVn_W%au%$U7>kH;Kn131eE zkX7_|w#jNn+;C@uwqiM36SeT0BZd?8YdP5#&DH}Sf2Q)Dy1m`)9yF6G470b{<2D}Q zMbpG8&B>4!t4Lql%}2K53|+QwNUE@(wG{>KM~^Mq=)WqBlW@~N|B#i`o;r5?f!bNo zSQ#6?8GWNk|KP*aJRMl_JNB>pyzS2T+A(-uCOU9Ut+@dU9+zjfAD{CUjWFwrpoH?w zE3-tT%5INYC{w7BVON=J!JE6^JuXw+3UMbFvbeiWGc)tBY;op_EYoHKF{V)!dlt@{A zXP~Ph%imM|^EmVf4SINVV7sY`SNoh@xS2YA7Pt<79Z)k|*58>cj4j9cWZAOH8!KlA|7A5)hPbW-N*vDonk( zkq-2I%D2z?W&B`A80Y4&@W^W43Nm9@)x%!6vYT)kq^~V%3@?Lrb4b}IM&kR{VUdyV-32AdfXSO?|*z51{(HgYz8?zO{@*U4t zdcdCrTQCz5p1b!eh!(*9hkCW?5lg3MZSc>G%>p(H0t#bVIwC%nH(f?z2@m7=J)DV2xKY!SlSZReFBHkUTL$ZPHy`ms$$dzl=RFY5K4W}E5x*zV|-zKBt=YAV)C%$qoQUwoTIa zWrU+c`SY6(zIg$*5IP=9$H}TUD)zrg_iLCR-@q111QnkWlnJ}sLindjcR!>d8I$Oe z!-N<;nrRP-9f@rF{J_=o;kuRNDhD5Ka16|`c*tD=e`HdSi>n7untB^U_3zxUVxJ#2 zs#&y)Bz74Z+bhtoPu25V%-g)2n)dB{%wKh*814ylIP@pq{EWcWzPCwt&%A|b8Rw0K zh^R&)AmX&K6$*a%DpvzWg%fU2qnFLuFelQu4=cRvC>HPlhm}s3a$an9s$X6TX(sg~ z+UKoPY|KM*Cat^kT4Qy2t)+Du?stF@Lq&@A$)m1NT0Z#X5Xm6FR7-T zC2V{RAlbq!N%&UhQa$Ja)3jKFyAy0>s>?ob{!;yA2eyTm4KM!8y@q=Yrhn#k!|euT zr?lm#o%Uh#B=v+2#0xYH>K6ez>95rNuy>7k)HM9Skmy>vDnZL-$!lc-9ds+vPA^5+ z(kaSG{>;z=!$J$EjlV2^rv)u=0=y!?@-84ICszgjvqH zxXZ1G!R=U^=f=bsy^-nQHk#v3xfN3<=Z5=?laX!O$F(^X)BxaC$lo(11=w%d$`~_X z=KeL1IA(5iI=0Q@xb~lcipY-Lzf}+bn6_ZgSPZCmuhE7p{!q)YN;-vqe>5b0hns;#qCI{IKaGIB&eFd( zw9LlUOjLzv$qcr*N-#NeqQ8kiLI*zcp&y=_%l`hvPe?19|)%+{50 zkq;AAV$X;KRnmr@yr-)1XI#xz{&$_FZUjZKmX_w-Xk4EAF7Gvp=B>&4a9uk)!exj!$kD0P3mQ z1B2c@c6sAYL|eI`FVMiB_mU5KsOpu1{a}2Fr2VY(I7|!gsn9j?wDn72mmZqVv8Ql!$6t+{pvb`lv<|#GN5>M-Tu(rLP~9; zfbD$e2T2Kru_ixiC7^vWX{qs2RPq$E?x6d5sSa1lo6}#rFzA#W8RXpTggGx$sNYh* z&ntB;TRT);jrC2sh|mp}sL8ilY>nRz_p1fWJuOo*+?jaSe^4KiFVo(=-%ZF`dpqEp zbT;k%2}pO#M3ag#mAOg+l*V1L{Q}h1=kbrb`~lg5bTR=CVbyEs4l{9?7&mv?9IzVR(J`sek* z@vy>Wu^BRMhXzNhw{b6mRWIMzQmKvYT4kq&m27kwN1?`f-!k2DVX!RV$Q= zq4!S%f0h+KnZwJKU*?Jc3o~O-46Zcv0bkXU3tJ3=dBe+dW`S!(fU4kC=y-K8D5&}v zCUW}ialUbNFQ;uS4Sk`q9pkWuk<{}f`RL4Z(Z`CCR;~U}p*TKk7wWSFqD-zO=r%;I z4_vkpa|E*(uDH2h#GOD$`x8Wa#9P<0Na0qIYo5+^Qf@`S(JKkQVpO)u{-ORT${g+e zrGCrjT_y^+j@>@SycUvFeF$P^cx8y5@E-rL~fCy~X+JxdvTL|e$*v}zT35(^Y)MpJt zMI9fmz+?6TI~(wIiHr-Di}RNH&{(RrF+S>S!1snw0EqWD#XWlJ* zE#C%T>d15j^IiH0% z6mor~WY;qUv0A;EbaaQbpr1{BH;{YK#qM)Ow&@$q>g0zkw+Gj6WqcC4lo@YVcq+XE zeG%ti|AEOLpwVxM*1MkcDU!ovh283r;2a^*pwIg8f=AFz-LL7HMm%vCi(cAr|BRJE zY1yu67{S+QGr}Zky9p6nS36qn?kn}qR;5OZb7azTqLw~w-&Um#$PRj2(dF&Fl&VxZ zF<+5)!po_~s1dVgSeNUL-DjbnL_B^}Wy|HL%V6{{wDsA1eEHkxf=zisqR=X~i-Yt+ zx#%l!Mw2I;GeXG(ma4X)Sm&!O`fIt%H>T@Z?^LIj&0k-wqA(z$C*xpx^zF0Fo{;!N zYg8Ci1^^ivgZ#BodClzIyMs%nPw#F9j@|9JxgkKn&qft;iQ|^yvt-ifD;s3*#4f#7 zedxI?BOFICDe>~r=JN!>$AnZO9VcaaEKQV8xOSdx>fTN1`w?i(%nb^OyetbVMah-CEh@c-8e5v+0yHDE3 zk6++1{~2CYAE5LKll)BL<tK%VoN7iMw7t)lM&&!_Cb}d+ubn_P9<)Hp*z6pI!<#m5Ee?2eEg2sy7 zV$(cP^T~(%1p@D`m>v;{>xl%OoLUsiiAE$)Z7335!FY}C5+1T%hLhJa2}ymnzLZBB z^OO8yOWdc6FR%1J-mm3%=I`DSj6NIczI3_ljTGDM%`2GDj2>Dy#pjhxtjC*PllnGu^V)~g;5P`m6+z;V3l@0%k^IRM;mZ3Q{0e+bHql0w zMhZ4+My9bwdX_$VmMSI8sf2eClAng4a<0-0@mRWVemAZocq!u-AQT_p3_QH6Vy5;%&g}j! zN-}Hkau&C2yQZ|xBc30$CU*TwjPH%8UPyaA!%E}L>jK!poh(Ml(*)Zr{y#yI=si{F zcG8V-aA9D&QTQRdSwQIF_nw(emc=GKvh?|9&T952Cf$jTV){dQ>%BqpFRE_{)3MaN zbPB9g`k6QsGa?F}NgPu3(W558U$+N&oXCE)%YuD=`~Y?-?=*xLR;*56?2_Chl)R9% zT9Xm?3HmCH|Z&NhbT9zksVIy#v>m<6h#HShsJZMGb5liMKks!D5~x zkf>WC2ihOYH0q_~*VdgAyqjLHRP$&{DNRCEz}Yy_<*tA==u&=|%oI|atfwaG-j^FT zDHYCLy7JUkA35|Py0%52!YaE59tj_V=bb)cR2c6pk<67ZXcu2<^CtXxGE7si9~61H z*(3Pr(RDc0_cvY$M^3Fs2cw&2bVJXMuZX;9zf{_J=A@`{5G0cNW9?b0voMQT=!>gm zETUDpv$46}!Diu-nG}p*%9?7W3{(saJ6(k;>(w%1TejB&2))LhYbqv@DA4Q>fs0!oK~lyt`u(%mhvG)OMpDV<9{n#TlSxX@67y|QP5HM~?E598~g6J&wGd*)^odlKDK=Fv!us-gR3^T2P*~ zH|#*sik@JG-5tv-x&`yU@YEkMGk!plME%^W-uJYx%3Lq)hNT8gmlkRAL$n!7ndY z!CZJrygxUG<3|Lz(!47L*MY#Ldg0=8K0?2*09Q@`#8`L`>iYOJYoNqwPLUe zEx;EQf-Yg3BL&}epS`&%1z*MI(c#+X7yerX=E3<3ULnt#4 zB*m1;Tp}a392(hWI{Y#I#Y_m@*uhMQbsuq!mf4){i52;APzdIO-G%?)CxwpptWF_4 z9f1K)zJ(ms^?GETh*NRA_9wLUzdG9T!p=wR^#l-uSE4jMS;{$UntOItPK?KywOTThvs#j~InqlVLYKfE3cJA9@_h5| zIT;|;ZaAimitQaHvW9ud?W?^Qb_3n~!d4hn5VwQ1>N8?m0FLd9R{=T|8!) z4HnaLrP7g-i8ppQe41~b;iU)!7mnW)jED%!o%|dnGLEqxK5*2~vdUSQy8Cc+-lb^%pJxR@yeVCca)y8pc(r7E3ZWN>V}ljX~b14!>$R zOv%+>&K*xfZf9{?`kSSED|9TWPSz3Ka~^}5)<1uznx%f26xCI3Ro*^_(EuuEO!YDU z?20MD>sDJUiv3hadFK6Ab9F`TmBf|J7w#Myvj=j0%yidH7l@#R;GruQm$w zeO);xYEar4AamitgJV-?z%ftC<>Vo|hrK{7a2pU2z8 z9z3UO6QslB8bEZIzXa=9D4*un&HeNfqM1c}fHBbc4%=|?il_=w#kE7H6m;^8Vb(tW zl#CR@xI>Cl_lUk;$#*L&Z7;MD>hC$T%ekf9G5$>)%$@V6tU-@6kn%t~XrbOv=;;9< z5OMu!TrzE9ad#~v*FG?HUE;zKlUsT2>?^eq&7m~Y!fZ65X}*)BkcovEFV;DIp-P53 z-DU+AmiF5}!!?1`zhX@7Hkcjfrt>&y79`?u`c}3oWRr9(*BGv3T@F*EdhOV!dHy5` z{h1`h3FD%cmO#A8vpSx8uVS`V(@eNpDbN^hhyI((;g`JoY@W3Zrtc+gsXR9n_j1q- zC?k?RLk`^VlMwR?flNy`eK}lwd9*PQ&>O7ceKE$79j@w)F;%J;-^VcYvbCvKx6=S# zMGT7~$nFzq~e?mgNVp5Wi_^HUCKbyy2?sJyPO5W%60i5Q%b@9t0LJVy=K z$Yf8@EYV*#1lo5)4;&Ix3reIKADsqRbH3lpPn%_%zXE01y;hVH#SlYnwmU$x$`gd=`$xowY`>@Ho!{^Hesu<2 z$k)*?IlsBv!?@$_@_yCkaBV>F9U3acbgl4Y%V!1m`^?#W*aHXJnbF@Ro|N5KinlRz8&!_>7?tzi1bdrO z4zv={gM$&i%zyJwCZyKF&tE4@^W7QbNQ@9Yi2OAOI|q}*?lIlryhnZt8hErYzU!pj zFv`2|4)RMMd!QhHFl1axWxA73xG)Lod@pX&44MktF=SoRJ|#<_8)^Ua4pkGcQoS;7 z)$0U`Kh{2VMOFI*{^)h;{3L1+b#6}#(qg`ww*(hHe{@Z76!_~GI9K`px-o2i=lP@H zkT2I?zeEv8)X6#iP}l{8iHi4OnT5H(QwgOP;(xJ*ev9~^5Y;L3&g9PhBdYN6onh=b zB+wCnc8@^qKcWqVo!rT7k}cnm55=67$pcIz&l023z_wFwcCVP1NUm;v{pj^RjZ>Lt zx{I|^^Z7GYecO%>hv`%N0?<*QFcQ4+Zc1qI5XUjj%z1?JVUJ3p7?c5Fu zt6E=e-}dm7KBtF%`+N@Eu4MJ#aY`a?6B3~(ZHrBvG^8hL1Eu;K(i68aESKV}Wp@m} zko;AhLPpyGc)v;2tL>VZ?P6so+8H>MdnFdcdvJ$uhX4EQEl<9_c}LG;(M?Pa&zL)l z>8$q#O|w-;K2_PSSbrg^WIB|46Jz@M_nF6TPMd1HoM$%cz-oY$Tnu%9Y7XdKz+PNy z!#atT#>n^ZjVg~np1of+?mk~$MyC=7s21&ed8P=y!p#0FXuzYf=$5)Z-Nt#Pu62H3 zXx=n>ktt)O%f@Gw@A@v1b_X;2#LTYuk@j}#B3sF5SS(g>7)dLVib%?nHEM&r0%w+=J~=W74DDOLU#eb@*L?4qJfe4)yiP`(8ZMJzCpHLhN6c%9I2j$ zURky+kDW3`UWQ(Yf~b-_jgLM3mD89RkRb*ja`X;Nz}A-Og5tnUw3)s?ByD!>6dltR z0P=0mT}X{+yRJcsP%*n=+Y_Er18Mva_jY}U^qY>oowkutg!nQ)1Tj=`FWkJgR z6%zbj9%6^*t3c5^*PIyM6O%g^ z0WTqVce*9FYo_O}#()f z{DgC&OS>FcX-Wd^_K?M3e&Q<82J^9#To_qFrDoxgKzQitT!nwt*UV` z?K~-u;kyVlup!|%yGm95uuz$PFqarsb!J+@&lJL^Zh9ETS8f}nqp=y*Oy$~pFYMY2 zS?PrYh;G_{q_Zg2oVhTxR&EcW%KvR1^^?pv>gNb0<3P+zb&QxA$U^v#Cgz#^x+P^g zmRMzU^qKya7>b%hE7Bf%rb4$R7$gc$CNh^)AReIS8(#PMvn6Q})jdG%Lu<>cvQ^^# zPGr5KstPuxvx#p_g4EZ}Ffiy|>Xl5Dqq|Wqh!Jak6JpKoxKgdmckQy-9-ey&NP`1y z>}8jKAz0UDqVP`fkm-{5sNp<`U!sRzFOlmVoTFCG6xjph+_m_j>WX6o`D>y$?le7< zf;fs|sXCz(Y!`m99{?UU1{;QNXJ(&MfH>}!ZeLvF&&l5B^rKe$KMW{#L>S+A-x1b> z?0wh3(`ld_-AQfK<6`fm&JNHyM4o#dxqw8+XNOO)}Y;9!IV<5=0HJP*7&CK z+y{3hcdd)Atnq-`5Qk46?$tvXBoZ zZRai)+3eufZLs78FX>tMb!Kc6lSvbPwj(SvAf%|R*kp=x^c>+}Ot%rk6?)6aR}`wO zqFA%N{aHov6_N-`e%t3o0AM_Y32F>vEs-A=2nTd-tByyv}t67`x2^C{U-n)4G9O0_TD#PT!jBOeG!-=ecqO3UQsFo{qO z{$aty{U8TfdDbc>3GH|Q0RV4UX9fC2Mu8}*s?(nQ)*B%JbJ;=8x~I(Z{$2K7 zPm0}1GV`8-5XN^@Xj{cMKUuF21D_Z&czGn79I?(jFVK^Sr`i^*%iE}8KO~&I=`LFU zlDGMvP<2D9ByhHpQad5&h%@wS-|X(#?CScIhk@?mD|GJ&-Yf!NeZns5+)yp?n2r$d#8kj_hIY3K# z1UUBIYMT4iM33iKkxpEzOIW)^SSw0c+d^3D9k$3zSZm5?J`n%Ywf)x(eRi5XeJ_Zq zw}`mcTvpnKT~568i+S`P?6xw@^UBl7ugEv_2a?Xudbd8G&+Dv%YK>P?(6)eyl=CqZ zM`nEITF&f$;x9b7zPC-I_lrsJ(x2wjeLzfd7a%QFr+n%t4kW#Bu1%jDNQ%a}FtjJ5 z*62Ir{t4l-80sjokBCW`0>Iw)%XyHy4DBiYd7lI@ZA)?~!iB+Bxm3vZCAV#f13;_w ziQ$Pvn*+nibNz7)?mdbGrQ#>tS#Nw8P83Q9DA0=|Kfta{*5@V6#yTm?))aYOtS|L! z3C%3ye1J8St^D!=h-_bx6?g$&-N4}N>h0~nzuJQsXP2!%!r-E)U3%!&v%zH=V+jc9 z+r5lf!tAwmq-4QE2hXLojgfZf{cGn3C{`uv)NLOn$-dTLQm6BJzIpC2tn2sGTaeZx z>iPP`pHQsBQ^NCQjP3bVEaTB!G*f(~sC2r6Hr!EbmeC_e%B}EUyb7MX-=b_&))%|{ zT)L3J%QhaPH7k(OR#C_Le6tm+2Ya*g^T^n}Pn;KDNdz^OTO`+>^{j2D2Hd{uXeSai%=;|D&=f6y@G3gv14Z+=c$># z1VtyCQ4>tC5{R@|MbRz#aXyQ|+ot155JQ9^Gd?^jZIAPBJ|s*%V(-sA9h?o{2Ip## zi2U%$W}bIbX`Xs~CvsBbf!o|NxmmsKbP8!wdK9+%ghQ`d$*>pd9C4$9-jS$rt#Wa0 z%YBV!r~BNOPNK#(_6;5piH^D<$TRLr7 zEB1Dg?s3R5+Y5rOd&SGWBUO4SPKvfCK%=zFyS(13vX}H_h4$6Go|xW^>Kz#>E!=Cb z3@FaxD&zOtkWVCYOgZX#}((Sr!hCy5ENU{-v?WvD0sL{;4d9abLpalY0d$D)-H43`F;1dAg@UWNLiNh}k1 z!8x|)vI#+*>QK&i2VM=JI4`%?(%^^ZGqn(6FY?FiBIWJ*T8y|eESwUHPK$}!8rE81 zGM}#mhy6n<@Y`FI?mU#yA9r4wREIzbm!y{9>Ohh*A|LQUfI8E49$se4@_)Gj4nK z24>LHOR1@-`&WMp_4pC(x604^0CPmY29>;NlEm-6|KIed1?iYcvzmkc zR#y%5P#bc09n_W%JIN%NJe2xWUC0uL>q}cADq!^iuNiqtzb1lc<4J5y9~zZHu-eN- zpM&+OKAJrp8nmbG7j{6~AicER6n@o#6TwKfxHb4E#M&%QjSl|zUGB4{FbCz)l2=== z#t1MG`N9$Ew0)$Gq=;T3Jq23_k!h)-OB2bQa`IZ;lCx8aK_?Zx~3XYvk$fE%o z)udyVp@|a4sVx{2L8O9p%8?0lN{$zPwi`5@`FY*CptIXFm*8+=w|zo$%1?{>c@1Y zns|?UtlH-SCA_v9&05y;O`swtVED$)=F9 zSV5Dh7j_)9I4k40XUrMP85`D-V+O$_0j+8T?#1+{xsyT?KDVr*CbhQk_Wqt`e3LMO z)7P}Pr$1T{lRCm^O*q7aOw3p|7`-VZ;$MU*b~uHO1ABp3;@ZMI9$^lW=U+DN){V_Q zz)Rx#O)ouy92n0(3{Soup0tdnjlS3(tkigM?!lY#RP`kT$htH@WgY zuJZoF*3zR#WtO&r&oBUEp?D}L8Eovx&vG^Bs>&s3tp#uezMomTsIz@>zm_2a9D{E8wZY zdz z`F)11DZ|#}U~3#J(UlN7xatS2?B5UdE1*9+XiqIcs$~1#@|i~5dmQnrB{$g9V`HEC zoF~~!AAic<&%Xu+&)t?&j5|+wUAD_?0GMG2*5KGNG?#iFVuM9DMXl__N)>?1P9u2` z)nWZhEZUutxwbqeT2pMmk?5QE|}32Ikbpt6+Q{ z4i}GCzwimzT|5S((zK+wXj$oeizYURf)!$Z+jpi4i{1sec#OJa57dS;ip|=++NIU9 zggv!_6)?qU0EM-SDNwnwiF;-bY^M$g=(B3*>3r@#+}?&mVYMM0zH0kNT2u4(1t7>r zBfr;B*K8=PSk}nz4HPDXUY9*|2X+0H3$l**ZNR3y`o;3FC@-ba`>^k5nQm&geF51{-Z&|SDmR$a_Hx|wuvhy%bsKH#ME$JGm=-8*$ zOQyxljYJR>1C2>d#Upq-6r#H0x4C+q=0g!&TJ|rvgy!C>jT)OorzKo(M{j*ncu4G& zt5p9|ss6J!d6?5I^exlrn=Er>f~4aj*i^|;UwNDd!;htncICYXS5x-6*E!3`Ny*S(nr@9C zA^&1*`)8^oYv`SNW;TI7EjyA%ql9btz&C9e;!3FbSRFX12`N0k<$Q#+m>I6nXG+iy zikS|IiDyAIWF8EAzrRg}m6fXMJHD3BSa{x zMX<0%P|iT^Ph}5kDXC;86`=VjKqD_eqbxupCqSblfRq0_8nqPHdj<60t3X%m-_C-h zX3d|>ng=S_K2w)?rsF>!)=i2ajBW}=C7Hahene~>^Np0ybG$azIZ;x5nfr?Hrz}ppJL&Uw_c+6^((+!4qOTYFLSD-g;V6r~Zbz(f zK@W4Er#KgQAlmF#d5*?M6door`7HbZ?&f=IV(uM6i%*rO0}4F(AB}?QNLP5yf9hhO z?m{8!@_(ZzI;-pa*JY-j1+sk_33-St^rJn#n5vo16mc+M@*y6i=dxw-Xco`FFqDz3 zAO+$W%0E<)(?{RzD$!sVa@o>)w2j$M&kJyS8(3d`!vO!iSND{pX&XKAqi42#YNOXT zN8P3@{IqQ~W2v~L>WmP{f3C8jvTpDb3-4pNkO&Hf~ z8!tcqem!<{u?&uoNIPci&E0oaxef9Mt!wVZu3EBmUG&C#nd~{7NBTxHGgUegS(58loL9j2 z6n@72ehY`ApKZB6y8tGPsYg_P<>=*x4zAgs>lplmWTH8V6kejZXt||4XjeChox zGtp#F^@b;B&`(BByuZG6QSq_Zka~W4-DBB{?bBn-cA3UQg3TE}{Ie~!1{Pd@3PiU! z2Dw-<0jauOMWrY<`fgnwmiTQ=UB1bd%M=kfqW$&}*qG-oe6l<|W$|utugg&WcyGwp z|C;II)#e*Yy>I=7tVlAGt5Hqm#&Mh3;43wT+HqixC?Mgm{MoFI@)Sh(@BF^Rys@g< zjEQY&vuK2m#(avY+}5bG!Hd;lt&gj^)9Nj*r`*a%dJ5OHH@Twj8GBtdQ-1VKnRc`4 zo=Xg5&^j;y8QozJc&pFlNZgRNQ?=Y8`Xd;~DnX;@B?yGtpzpZmF@X}%_jQD*AqKo1 zp*RvpRMOzzaX^7WQELU)xy-}z;Jgss1YkX@gtZ*6OA+iaZ=$vm4O;$96jq*(I($3F zVyxSijCxL`al9(HFYdVdc2pr7j-3S<4pya`ny5wNhT7!Ff}cr*0P);%E#y9cL)f7< zl(UNtrL{y~Eto%o72ZH?>hj2q@_y6gF9?}p?CbDM)vgs-_td4_ZLT> zcnJnWkIhPJwf>A3sb?u`%uJLOSb!3N?J~S=ibt>xS+L~u91BpP2DqqoBF5eJjQ>H( zNi@6NYFd!3!YlIU-H8iuXs!CD`xcgrbAPLwYlK5D*Gb+o0g^8;iX^+O4>~-gDJ?7f zsx|VVGlc_c9h?W(RFAGuKTe!QgIWt7%+pSRnhT7wr z1=Q+#B(_8!3<1!=s}mWJL$Mg#ckA{GSVOUL*i!h*cW*l)1u?SKw|Dtx&!}|s&tNl< z{LyB=FQfPQaz2z-8GE()mv@ZUlvzXcZ!Uc^HzhXmBvnO6?URgIV;>(vh}f=+9JtT9 zHpJJL|L6s_H$CJcL4}jWQKYW)TM+<*Q|n*(LDm8J!PcJTcZG!Wtd(+Y!IuW9$FQ&? z5}}uNA6CMecpXVLi_ZB1uNQGM)tW?LR%ih7>P9RJl2d6PQDS$d)2N3R9d&+wPDpi7 zR>{1lcZ%U2Ovft=yvJa_|JvGDXVgfga%YI*3c2p1GlKnN&pwQ7$j(>J`{g~VS9=G% z{&JjbRmmO(i(e=Uz`H1W27j)Fg>_SY*0<(I6$(!65DxGecMQ7D+#`RAFQ{K zh=i{R5nnHx^00zg5)*)<6LR!sMFVNP$qIPv9YJr0nVH$aO-%#{!xd`%^uiy1E*1x>N1h`rH~=7P!YQWMMx~|0Tg#!F_rC zkc)RDqGFDo6@N`)>BA{U;e3_WE#A&UsVkCg!)=-&J6r0g6YU;~^!jvqCJDN)*AmAk zNQg^JjAKTArS)auf=6v5jyoTaGGST=%*&yYa(&PPMygWQ3riCZpFS9(@BC}Y1Fca@ z>YO+etA{9bGi(_q>Zo+N=0oF~QfRY(b}!;XEfbz-#bh2rR)Lh9J45(zhO@mgKg(Df zuxDN)?U?moCj0XHu)LEcY?8*^&7g(oLAv5FddoEJLuXml=Q;5%qZHg8E2aTir$=}& z2bX`@t*p^cpD3$GL0Td+;fE22po6dXAx97M>rf%72fqR5omA-lY2>Cze5wd1UHX=&qr6`awze$^u( zGXIiSVU`{=vjaeHgAs2~L08dUrE&)sL3jmo;oaUK9bUa(@jf$-K;AJ)BqQFcWq_(%U7KIgrN?48D6H{IL8HK zb0r~sTd8Qv&7$j(z)G z^P}=R=W4Yz<$Bt|jIF51Je5kB#1Y2M$^l$TF1xqqyd`q7T|8UO$ivAN&qBXD0oEF( z6EJO=xqsI88NvL-Xd?C(cLH)WZy&bs?)Vs-CQDxT0ZYMw0QlP@2RX^|I*BvBXllo| z4hiNX$E<0pnqYMyyZ+OUj)I~jm}yehmtzp@rxPyR$~S+Mf2F^QAF517$JH+p7um2z zBc@d6!zq92z^&c7AJg_E94j^G*@|sHfW2XBhFd7#3V>wouQz|MgNvNXoR7M;jsXlu zV}8MIC2X?UP^}VSOZv#y8R&_lT&YztG_b<3Qrd_~v02OZcR?{){>xiq%b)t({nZUM zlh7!nLu0fvb`nqDN$pDAT)?|)x(mt7QVq21!rzB96k4+B40VN;u4GQ6E=v}Rk^x|f zwqf#-pVvOqWF{h=&jeXZtE+W!z1wRWlsELAvHoc&4gOr#C&-stkg%z{LYK#XU1v`R zjdguqn=?#b*PD#Rtp{Xm}* z2fiz?r!`j-r{TN5$I)Wbt6*VmaPdR#(DGVqZhoO@HC;^i;0=vvo~MX5UsR!>4>O8= z9hbshs!yim6Fl`@I_c>P7p1wkWF;0&6c#I>YP7+UWcQotvL)t8`YDx zu&0k-ry+`8uj%9va_Y;(AB)k-qdGBXxc8F9EOFD`LgWwjBwaFDuYV=8pL!S@FNDpp zR%?;yN{Yr@)D8{H+)Yrm<0c8i?Q>;jJ(2(8$M1^0&+t=@r^(k!)}@)b1}B$0(O_b( zsiL3P1DemEtC3R9-S|{ClP!UvFlRp&HztOD@V%2|viBja5GpnF1N25h`2+oyo!$Oo zRE8#zsazvYmy zMPmj$24^Gp9Y%Kot6`ajsm9Eo^ym$qR1l?i)(x0j@iXy@oNp51Gq{hYey)q$$=^&m zsdoWLCQTOsGletP2LN0oDd%s^-Ya$d{YdZONMlc7yR%XE^RQ*OUi`T{PG3(ypV(J( zs*Cfk)Utd~R}b`}(3K{!`L(6zVVO;ze9Kz0_xv}EZLt7~t>MzC0^aQX>|1_M) zT5_YS3w+AR6M^>-zQPdTXS{KXS9`(B%GvvsuAU3qjOh)F%{MJIi2xrqDs$XYMfs+a zwih^uaoM%Aj{P0F9$A#@KU_lntL5@z_M=R?^0%uFVj!g#Y6sZq00hHE?cWd6d86$7 z<)+2Q?cc&j7!o+t(UxB7=;gOKCD9$QJjVGTq4WwXotByaQ`9XE+`BxMiwDuEjlU0m4{4?ZXW2-Y`1Jy4L20dHcE`YQf`w0T1D9PVhZP zNsGzR91$()r-4RtscdR@KV}?z!qYWM_Nb~TFbh5hCA>{peEX^~!xmqZyN;B{tqo&! zV*^2EaP_(wJ+qC-@oOI_E`dk3r88vXSt20J+}a!RUGsBaHnDd2B^2p!^^)%5*I%FK z6(U?JnAS>f?%w?o`H{RoHNrUfiogr=5_eEqRXwowp;sToJsw0JhYsjj0A~?%u0V~csV;*L4WS)2+&69Yx4d~#i)k7IGDM8 zCazNQ{ItNiTF85iB11%fn4W&lZOqz!^J?OYZ;8(sxnv6nN3up9t%K;97;7vYis^cB z@oBu5YQ}3o2BRvsk|JNs-WjhFD*C2F>z>XtKVoLYlX>y%0e`)Ev8Ptd@ve9~TEg^I z=c5vkhpGg!hxkF?X#{2xTv!s2kcYNV{Wi3?>V^T{cbt8%3b;x0kfNdP%$bYz$j-e6 zB|k=j^FKic?W+2|Jr)>x; zu`*MFSqEoA4{>~Eth2d(sz`SFl_Rd{Xum6OKP8Q66mMZt-0!n#APnH;1vw#bH-NQd z@3~88A*}y=8>s2P(k?32llA3tN}c&zIuUM0>mXwOgQ|8I3*Dl98mbJE%^){hy5PCWQ zgJ?0`gt=Ir_2LUUz-wLVz;P>zx<$MFg~-WMKu%%xekT0=01)LmPaSg2(u!8}Cq~_3 z$G$H7=u+yW-fL3LG{^aOm|#Xw<&Lz=47;V(JJDjf3G>jr{9Tz=l>Hd#Jr@?ypKLB% zin*(?3Q7Yx`OoAs=t3)ZJnE1y_W$fmh$zcvWCc~4QH%bRt#e@)Ek3ZUot{wB%UcCY zD_P_@i{j7;u(za8St6V#r#$!nxK5f=C>eDcFk7HTGUn)qniJs}6~009-LVQgDH??&~gytVX$Y zV$w$cz-;D{A3Pfl{=j-5&?x#w9MD}saFz?QYG6H_)WP`mxiQ-xMYpkONnoy5x) zayJ!3{wjmCB2RbE5bt zk#B#$9_5y^7yikExTu#~9hB*xCZ61UgknZ}K#HL}N|P1$(!D_4;*q5l{Xe07&MM^i za_}R~oEOf&vlnH`whk#~S&M0TVDPU2*5q1w-eiq4nfxXU>?fywcG>leeg0 zvXB8vntZnYI7+!?5W&xEf~ZN5gs$SFhgo}Fhk(88K%2k8m9Af>&OjT{$<-UaA{8kB zRAyR5q}l%7kuH0hL9*ESUZz@o&(r#0JLX2uW$f(WH$;@7-k$^M-X_G^zy5ghxZf57 zRMsDufFIGseB08y8o)ivK&8lh_(jHMabQw=N= zZ+>dTEG4B1?&K-oSZItdCRvm+HrfocWjGBMwN<~-vKc1GaQa&$UiAiHJ&gG6)K=71 z`6ktR81mbxp-8;qjga;5z;CCjqBd*OO4$FMNVjId5KJPWa=3g~p zqseKQ-NF{Mt9yF;!|Ax)f)<`uhnpn!vPRM|3(6l0SC^Pf_nL=|k!ElSYS{o6(5r(@ zBKuMzxJZtO^%xsI*+ehsR>Mqa(D$UOii5}dJy0%{y>W4CW(^uYfm4})NtZd@@)l}) zRfqvG3qvMgGBNq%8xtNvK<+|`2@f$UyQNaEA!~#D@s3GxI4q)F{TR2JuWy`KOz(Ks z1VjX=SZFo@kpS8kXnNOP!&$3^B5jk4zPZ`OKWHwtDIbehU-hnW!||)#BeHnhIu=@c z*SO&H)i}M}gaFV25`EA7_#V|b1SoIZz|CV`Z(ZPC48+K)g2;=EDq_-6|Fudpo$?vKCxT zAVf&J^-SUJ>N8Yhl@nwwp8%aRV7~juFyEJMfeXIuWb~@BEQ_3%H;3ji} zo-Hy5g@VXDv0(1sD1_L(T_tSMMj_XwM|^xwBAGiTdth>)nvYf}lY4FJ&b@ECZ#p`M zMkZDIAA}O@SPYo{VfA&3n#;%k!H~<4Oa6hvbaWAooKOgN@ITmbu4=b9x@_(DPevnL z%;r2|uV@P{eTt@vYZ4=r3YGHzABvU!0U->w5;b`C|G;YSAIJ^3i%kY~k?7hO%KJHdw+IV?b#?N0E0PEm#|ta^ zT!8xH*&3}8L$3etqA2`uq0AH%(=Pg-i^Y7f-yKUT&L02el-c$Kn zSAxe>S50#xMC~;KrrBB5k-g|8&|%jC`^;a-0KdM6%}MD&AP$K7rp~qNdpE3LJJ9c6 z<%8d8pS8-XqlllrHJW9wmgzYZA3D2HwWq zZHsYvj42M@JG@D`jB0|5UQ|4}-0mW;+l|BcR=l&q%vJ$Xf!aDHxWvlWj5+7&J7)O9Jvnlars<>xlKNd-%ixTu9-jo%f!N}=PlclWg z?{|h#>^_K(2bOef1mm9+%HlI6`Kc=G2crY0w%a3DIz4D~i-)WxZ!EJIV_z@$&xtrC zTKKnNC0MA8D3k^2Cno!AQi%M_qOU01=GcN>8h(2C>%^fe6_?>=mOHEDD_QfrLek09 zw7QM0HAC-2E3E#0a8=I90r!3gl9i-G&xGWh7y*dsR18M3*G!k<*3E3As_LG_Stnpm zQhxyQw^MTIUE^e!uL;pt6*ZRe3&}4}0yYq>8Nz|1rOSTNe@^8;g=V zILW#(>f&#|sEwTT%4{pq7;iU9tXHg=bYekj4X=sDYxHc>0wRuAG6LqNx2;=n>lET` zc_Z_pScS}oo1wVP)|$M!Tow)k!Q69huLhgU7R6c7pGX2 z@ePVWl{EP>I;GPd&XCTuAqXHqRcVfr(3|?B?Z=IhLA})KyDmR=wzBd24JD<@wM#j%@_pX`Vpx@x4BQ zE-1m?%|Px*pr-6hzOE=S6lf(slB(}oN5&=PwjL8 z`pG;~$?mKTM-?FURZ-4V^xHD|Ob4n@Ym$IS%Ne#7?= zEqRWcLY$e4d-u`o)dT5M1K(GS}$r%u1{aXM(H5{k1pZVi}I zxV$mD1op&WSIStEcjV?ovXj9vESIn(jg_zs9YtKj;9 zOnF_GFf?M1m7grzu>)h(Jzg4Pv^*FRd=)wQ>6M<{L~gP|M`pPkN7k{sekghC*Km1` zKyk1Lc}2yxV(~y8jOZqLU%O6{mCZg(KJwlTSl19gp!vaCY!Mk$_im{4YHFBi50XF* zFn$!Ss~NHi+?*I@L`sl{YH~NUIf7}nvKEd^1 zskK;jc7Er=dJ%eWBw1^E&wU%qq*(7g=?GiOPZi3Su~?R;ANA4V=Ixv;i|ac+Acx3A z_|kvZ@*aX%7Br-+oPx zwFkIC-0n%AUU=#j!K=1E+{eIn{eC3v$V2qL9AojXBM7ukf|>efW(B_MJ(VXFm0aU{ zUg47}svKL_X3Tt0R4EHzN#zC4%o=4yHHw#|!ogF&EXb+M71VOn#5){7I2Br#j2ZY^ zHYsiD7ISg8l0WlY6M=`;*7ebGg962q0ty|trD74nAEbiRh52jcgVbLydWDiyNIGSf zkyPNC$W@TAxGj=!Ytawe@03nG1pEHbl7D_yTX2negKt?A0b6|jbFdNads|^YtQ76U z%AFu3VjVbd>C_d$V^KrzAzc>avpq3wMQi>bT^0pb_pb-V_L|8>=wdNd)R|PqPU-bv@$CZFzdGb>*76I4<5kwB7p^TL7C?|Cz;~+WF6rQsGU|9G z5m_IzL20ZiBsCMpikeD#dZ%pR0et8RFYZ6% zYJVE*Fc%UzMm`zr{LfsV`adYDcp6K=q*!lM-+cSXgvt>5=@n0I?e*_lG!jOD8{8A` zZ?C2D#P-{?;73h>ao%_lySJSWtq{`XVSsb`yhVW3fIZ!#=eOz}0Om1hp;Wb-TEq?Y zC9Y7J5aXNhEhSI8(99Z@_ay4mKCCID_)-9o7b0SDYFcwXnep+t)qJim?FzTxEzAZ^ z_!9$q64A0#h#k-KG(18l=C~4dJ}Jr|?VLZ9OqblKO(AWYddjLvkl-@4>dOx+5d3vZ zh0x4l(B^w0+y|p?EKW=DGsvzRf|J)N8hwylWVDHH*X&q$f`cwYeg3OT_p zX$0V{GA`to9NrHl40kL|Edb*{NU%tGa2bubC(DWlDy16oEjfv)ms%v%E*n3x`^WYc zIL(S>eR=b%v+r8|B1-iUj1F%a(p(7tyxleBiHG{MvXRMYk+7 zIu&!ZqWvHvv$#Axp*8oE3{bEh(SC^Admg26x_1#Yn{4O^QkYDS>Czu#xMO$YCT9LAex8;R^lD@WF;=8-T-)ZZ=y_*U76SPzSm;dhRP zr%`;E17VvvLEFtjbB(SLv~U>va7eZ08EH=+!Y?(+J27e{Lp;W zgxN+(DD3S_XH}tgUoC7UbDTk1*T?sq>cpxb|IQKDN=8tyiCm5D<_$=UrA5eJRH|Yo z^~;R_s~5)J?L-wJ?CpMQVvlLZdOMjN!~Wyx`<2ff7niMIZSdAPb@Qgp7M$$NfOW_! z07l?9y;}hG^C;G!UTM15d{k+UBP$0YyA!zs9pz7yd}<#^Ru}+WXQa*Sz#KT$3SUS3 z0>ce^CbY3QZK!=Ytd-gWZldIlN7xUbzY);e_Mx=H!Sve}SgC<;bo_)2`&1l6gE9GM zWoPBLKdUI+>UPZBy*hg%;+!LM@>eI7?nq&8F+pOL(dH(uSTKn&8ppMWof5}&eV^Z1 zV%4vDb;hfi^DZlfq;G9>8xq!9cduDcoYu`>l6yu5;MJWS-_Z|;1P<@eqg7IyQ^W{S z-7Mb&UAoC@LZFjxm3Y&50qZY#(-wq1Uh;;paLXHI?dKIUr?BnVsz|I#=sc7Zw}s+A zHxzR>%&z3l-nJLoN?CUulWWJC;zNJ5cL}wZSf$m`p*;fhcxxT)Ij(dMI;7O{h>v9z z2$_DzUojQR-+8gJO9oIWkMq%Uk|+1%@~ntaKr+$Yg_qxt z2E!OTlQPk7IrTD9o^58mS~DrQO01dG^8jg+pr%Bj$lhgK>O}lN5AcrPs&gacD14wtzYWI!!Z|#x$xSq#! zUWOo;A_WEYN(PWwp;_==HNauC+2Xf@yCaxkvs6=9tGTV^f_(GLY?-}hwRhe)s4XQc z8vl$CNUzxp^BCjXJliJR{@s?fU-0hs1#jWI+Yj^ws7>jZ{}`6(-`=6d&*qOt0m|(= z%9ds#JEV|nJeVJn=sLsAeIESc^+nSl`;F+wr)UAtsM$)8cR*7={Kf5?EKx?Zxi2_f9jp!JFq*8vSJ}{8D$t%W)UE=A@ODR+beN9XvzSrf|p_PjK0$ zoF<(E_cJH<&6%Z0>^zAbHyf;#dxi64p&#!|6A)*Edi$wq(FFCDOc7{@dMnh_$P=jD zs~tGLp=Yp-$JtES>=Q@45|LiL`2MVuZ}X3X_2Of#17iFvCJ1KF%K16OTc*?$@`IO%Ze9(Q>yuT#qpN|r4ud46%w&otG`aDeb~PawAUI1`0Cg9HC#UCyU&mZ z(-bHYrBGyY@q2FZJ>FJzc9J|Ptd&8k29*0Xs`Md6tJWRE)*WZ92~YK)^CU=lS7+v} zH)KY#cD+N9y6T>9CL5@$?4TB>=4jQsezT?q$A|2%`E5jOtLaCM`W-(`d60}gK|GcY z6p#DrX2>P0b{-e^Vdjq-gPXT|$7K`GTud)E+Fd^m41_HuBFp@obm9w-%FRMW1O~_B z%3ax|i}x@7OOEj;4_)8`LZOx7V?Rw&v@6qUjebqz{km)r@V;0Hk4s-)`JjXpb$t)k zgwHr0LIC%bXpnTDWxl#sbU-lPLGX*xI{gZzZEpZ?7T%rlHxq88c0ES6a!jwM#AWh+ z@bwj+zP0@3RgT}Rz7g5|*WVf)gqP09$N4Psx#Vw+R>{)rw(&`N-QL?Fx!E3N4ToR- zyu3>@;mQ43@AK`#OC4kfo(-F>MgQY>mDJC|pN$(f-R&>W&>b?mTwg7qq?7XrI%IUa zzFi>JA#~8~az$Fe*U@me**NKTeZ7FL!|SkGLagFS|0v|pWyzu{967|%>J~juv4Pck2 zVW!tHWZ5(Dc7CGhoxR7J7b|W$YC1{!+jN5TF=S7XA?Vjk%uAnVwM--hbcNRnXbSU$ zp1yGl|7$i>H)c1uHtK!ZS)F!<jGeNF1~rIGz3K4vJxIk;La{(#U7!}~n7LFw#-%jn@F-Y(bUB>V|xipJ{N=0-IZA8zJJk95%F~fpZ5GI#3=amjV7}eusVkL1p5;Ne z$Q(HEaD7ZRqHv^=mUy{IQt4*24p+4;iOYO#BUna6cI4gtuKEu)T2}#*)u#wlT5=50 zoAb+329k@~S=+CcT;tNLk?FgX;@B6&$xs5RnSJs73^LD8;lW(}Oe2^K!@#@C7fm9v zvh4ynWxoRB&6dv`FqTVbQm}2q*+4P5#`?qsARP+%_S(Wy-Blw7r;B!-(-Vs&?(VA3 z9{PB51Un+vi}cr7wtH=3;xhL1ztuF|HI!GHgR2N-`ERF3$1zPLlw7sq{1(G4j=tge`?s@oPlGN!SE3h}m|ZhbaZ5S$01OS;d}w+U2U?a>%6K{n_5M zb@i5U|Kfo=t}Z{l2t>$yb!B*^E45Q3i{ zVkHcVrM{1s6E<*NC;?xJMfeY28_(&fps~eDA+gg&=Tb0BIPn5sGG*tg=MxkrdUUUT zz_t&eVw96X=aiTd${Za2OR_KO>}Gb4xG`Qc@5Jm__02qrKXtS}L7`8%?DH1%3Q;*- z`*Tv6(R-MXB)-H7CRTtpVK_}F#$?Y(OhH(N!t)cmMJHH}xub776L{6qC}oV(=qXN` zcmr7Z)aKW#I1g7=>nH0rU5Y}+kW*!&k$=!POnFJAs*r%hZ+P|I{wS;){JoRor3@@hgT?4m=OXV1|;L>E= zxBMoJ#ZfuI#l>kw6Md5e>$ASF#{TJ=t!Uv|x526Y0a{~7v%rC#ftIOhVW6Gj)$LmS z)K_M40;FYD4674&+6%8ALc4#Mm;9DkqL&KP+b>5k+3~oJ%Bs6zMhE=NZ69fwlL4y- z1nbni(N7ML^fl1%S6T#l>%k!shLzq*`@m=N*|W)p1_~Xvor3V8kysC{deH;TEW+&} z<0W`$sT{it%%x}zsm++-Hd1Zs4)BS*(|I-TxRvjLyWZS)eAVN@viF^6$~^{2V%*;? zdp?GJ&|Xg&2o8WLK;NN6(L*A>ULQYh4MAJdSY0)Y8DMr^Q?*y1Z)`hH zvt8GfX(2E=1aGEWlZ$3t-?iC$G6!?21#iaYiUpQR-nA-*e9DEi1H+xQSjR-uo2vFn zB5@>%Kh8Huzhl!s^gYP(_x(|Ca=C=x=MG0 z6i8GF?{@KA+_X4<68lxZJzzm>Ej)KRXg;+kbm4G*yAEnWg^CF9s^opsn6Py>x18Q=nTM^|sV6*k-7Zg(RHQ4L+M$`(UW7Ol zGKr8RKKhwL2lBs)qV!YER=V&vtY{^4dON$b<9K$RS=EMb>C!B;#`3prB5VR#-9f$T zfUC>7O!CyH3L|o>Tsk6VY>Vu)AVJd?0r@~ z_b!?jj&g2Hj!hU}Jl(-T*rxBlor``>5zAq%dCLT9&ChLfO~3Ddd6oj9L=eQj_nhW|J4g4+3s8}W^m!wX>O<^0xESk_DV&j7kOp&VK^q8HIDhjI@ z>$f^^rdCqwZf(yK$>q`OVU{q47rm5uqR#T-_@$HLWxt}7`6Z#f?;7eT5Y&j_a^|F0 z#I>HB6!;*YJ#?g>8Gict7yN`b*vI(b%62fTw|43H>e0GFp&*&=$5wuh9itjby_fY; zy8Jr*r17A8`(=sxh2*o_odFV_n9tI)3k zQ8x^VaLa0inj*Wa6Gedxmqh(SLjn2J6=>n81E{>D>{9CdKDF*aNIm5$f;32Ln@?Kb5u5MF_*s0~0M6H2?JlIFa4J8fZ=QVkeK6`xy0(0=CJS$A z063iVc}F07`gy0v6w;$Q`mK)oY42b9%{SaHA7isT>8u|fcIw%~CLfZ4Ax(GIkB{qF zw_Xk(qTjb6W*W=8!N%}7`Ck9MhDjj$SDq;PoPxwjI7N1n@}w9L%~pFf=f3U>a|5x~ zh+<9<--~fST#FgL*A=r9lgdvR+!#KTG1N3b!+} zZjsHo*L%sb%R4Dc9>5coH|aC+iy#+OYsAW;KtT-Jj<(cj^&CAi%Wll159V*4sJ9l& zt?ya-)GRtu#F*#a*piG-HeMrh*^58_6ewCF$&-z9sHu?C$rY3@X_DR+jFdrp=5Oki z$+KHVfAOGeSODg~EGG-rD`!rwV1I>jqG`#pSuA^zXffJb0B*jf1!LAH>gL#%k#dQO z=L8+Rv?ZDNDz}K1n$P=x$AeIv}nJrKKKGmDvVmaJj z-HNOpYdfa}IWU>yxkHR{lEOpw^e~pVTr3#r#g^x3EY47Jf;@1SxC+0>@uR1D%UKlQ z9;gmKk5Ggv;XWZ;mb6G8cgubHlq-Z+i=> zwZKLeo0%d1Jqik~k^V`sPrshmGm)~Bv`|@gIV`A>#i8GyD@6pWTlI@mJZ|Vf#Gy8? zY_-9K7gY7i%sHL|zX(1)_eZt7F*nzQ?4&Z_4ND)1#d6QyUom!dyD8x zT=UP3VrY$APYS&jTPA3N8b3kgZd|x&;0i^N&nLzVZCzJ7w8xUOP~2)ts@53jUF*m8mxg8tb`FmlDL2IeB?#)R`}2*K8idRxOZN#c5CeQ~*a^m;7h|3op8 zlO*tlW!KPxD*DSmQIb6$0ne2fPm2BgPo+Hd%IjisnkX#a@c;S#fcx`48j@T~q7{n! zpU=4`Wix&!U*gqc73J6-vmu^S(<2aLVDv~bSK`47#C7EYMWT~!)k0fiqPL%4mbc#_ zXhcr-(_0mB8X|FHVj8aEAfm9~^niC-`rRX+kV?NGm1~i|VNz4V($46&!Y&EG3#aZ+ zO`OI0@e#DGV3lWx69G zl}}J1mQQpKeXa2auzx_n*2qH)8mD0asz@&usN+DHE z?0Rb6F>J;O?)|O;8jg|jn@2D+JG4B}I3@|{yYD{8@y=y5Y{o}yLqwUp_h?S0Afmi* zg$JSig;3Fgt`x$%6=xVx_kgUBj+o0P4@!I>1v#<`|9a!+8z`!e<=p{8 znD5zf6{thAZeO>>&&=14DRZGRGlR3TO)C{nMp4pSGCq-PT416Ga3iC~U$(U58Kuy8 zIIW$*g;oF5KY3a63v6uUT(oMVVmIhb0Cw!`OTIN7Y*es`0JGL4gV}2u!FBzW_-zU& zNY6~T-c!X{mf3|K5S-`8T6K&c}|ia?Vem@EU0f21WxE@#cKOuQvjAQN(rsN(Pn9sw5b5& z8)<~=(mn^?4wkHuH`4BF46`L%W^9zRi2;k$JQ}go1R90(M~9Q+3R1aoq$7fKGqQR+ zc`uy@MA36IoS=^$)&V3!)Ct5WSZ0}6)ZMZJ|jjz!JAq-GM7~1~h1i26J z<3z$}A>uI>jBZ3;LrLIW0v_$N!}D$d$Amxr0W;b!I5C?K0Ew2wUY`XdtC1}u&q&3 z*kd8sKCE5*B*O@T=bZvRHR@!!v8!>9XqP%^H|qSSW5|si5*nV*~=7QTpjBbg-SLGPoCbGfpzl?5QgzFv?wiPZ| z-}W4@UD}e_|DIbTu)xVneEW4b(YLec)a7BFO>sH zYSYzsvtv>GHlx_PZo=5EXJ3gnYw$#g38rv0vHz_dfFZM=_T;G=JR!2hhe(*%Jbfaw z-<6GarZr3O+y@=6SmQ%BI!x(Wvyzv2buach>Alt&ZaLF=z2k!i)p^}dWKGSU+IdaK z$zUo?V?v@`kg4w3jj`hpWzZP*B&CAz*?u&2i3LJQ&+qTkPbNX=wO=9YU&pG+cG+8! z)y_k`BG|+Uq>8-V?xdKlCJ!Py7!3d^3yzE&j2!GuC(VrKr77}eRR)~Vv?d%9OtNGP z2HEA1KLU%U)h@kgeQCW3HVLL!8uM-&{@Agv;ULcR50@U;F5x7L4w(fThGTK@%W>%XvT{TCFi z|3a_ze*v25IJjOCdFVLs(OM2Uj%c+MNCD+R4_^t)OmqNluIs9@d>>EpoDYQrvRJb@ zU!RZ~tiOQ01@m@^{EuV6OA*2dUjo>t8_kotT)R|I0rbG9)gSb});`uZ@PyQ4{R8Yk zM<51Ngmy571q%lA_H|I*px4CwpJSc|n76-!@kahXH5Q&U!4QTBr2p{ve#(Ex{fbA?TL1Iu4Q-+7tQxKz z9i8NMg?2SAJ!c4?vUj9rlj=1aXHBuo(Jcgf$bjv`wE)U3ymzg#aH8KyP~&U;ura9_kk zxQxM9?!r-g`uX%Z`HcUR77%+S)!S`a$M-7(P5pU4Y{=M*lf^WyOZ;f;I6H&O%%@c4 zTP$Ai?&RLi}`E3#$b7ct9;r`KBs`j7b0J7eqLT;XE10;m{o?v zBIo_d?0e)jk`4!I8jm_tRVrJ3dD4FNEPF`99FR7$R`ok6XKBAV^;zB~!93{&@xq~x zJBfVxaiDUP1TYUl8odc@s-A=`rn@ehRR3k)OPnMRr*; zGpTA_-060FDe~CuI{^zv?$?o~dB;Z1GgyDDP!fE&X$1mV_2^Vap6fzmPq!8xwV z=n`Ti)3Vi21XQ^N1prdwoZTG=JpI=(n=a^rguc)38_sjNl%>Aw8ubJX%I}C$MxD{a zh(yu{@iu73mMkekz6kYKywGWa6&w1?EjM8&K6umrzDZ2YN^a3tn1|PoJxXk_y+Tl& zLtY|8&LQ-VEAH~RhqK<|x@GOW3dWs}$p4?C2hdOeej^k0?Ioto8*D$U9r`I;?H}b~ zM6Xmg2c{JabNm(wPUWL1TDD3ku8)R2visy>)}q3YE9q8*4?v(#FgH!vMO{M~k71WJ z;3{Ms=qbv%{NgieSw%*TC|j}U%Qd^=3QgMzE7Bc^uBvwEcIw@qj(YR?^?|H zQ=G?aYnsjcYVdr83f5`hyX#v~RI|=$0_KF=&x(&EDNZHtFCs)+XWjZGvob^-bR?QP z45K=tG`)+ScN3)t4zp854nILbLCn6WRi9IX8&2{(IC)CEwTe@80Yr0RInCkHRrNNI z-c{B8%~DF;NsOKYB*yFboxc+4wQGHjujLl>7?A(K6W3uD(eYs#4SxS|(g#6q93N#1 zE{d|Hi-{q18sPLqAGVeTxc0S3E@c8-bGO5C`n9UvZ9=bc-yL{Wr#C#F;{)?h%{$UwX`tEKL0~+7N z^{~-f{6Sx-%!bgU^}bx9#%sg^gLfKy?-7v^)&|jN0zCae>h=3OJ6cn`j*f(p%~&zj zY(_OP(c3i8)Wn_q-}6DIwPouby4bAdv(6?NcC(d$4$0Cgvd;@?UJoS0m~epV?pyLL zNzy(|=tXz7_)0P7N^I|a@STrou|DrPg7nHW9Xb-?qE?0ZmaXr7hyNYwmNg96=HcQq z0WH*`6zVxJK=zYED+&t{C7wXLHCm! zCyhK_yj;AD#0U=EBsfJ`QeleMECH3Og;;sae4bkumpT4YRv}5iyzUNJs;4ha^kZulJlgZkLJ?o%Y>L!JvR@=6V%AyFFoo; zUZ0&@)z4A2(+g1@5sqazS4n6OBdQ7v zcuTH0_5e{|q?Wpw5qbWJ*LY`a(QEFc^S6kz(1=kCCxIp-vdXe`fM9pl*;J&i zn7JU*F&FrA>|NPdxdJ_8lz5foLPw2ovuYwIefh#kd;Qx>-`#+Y?2f}JB$-}FRepi~ zIKZP0bTDo@3<7xCoH^s&tiML~wwsfU-f?D$hGz&5cLJZh$VV1M2`fM#q>-$h1yCsI zrQ4&c7H0Y^#7yuGYGXQxlt3QIGY3(jN&Y@ITCyNX<+pO&u25ZxSS`NIMY_6w<7H+DD#M0vGD!OY^g13ik5se!SUfwW(YPI=1z` z9Bd&Rb9~CjJ@O{(CGQgrT`D7LcvXW_L&EO=GX@+A{_R0=@o|f`@57d9A9E;6s0Oxp z=mJ(1btBc<7hsqN+69jhve6$y3~Yfo$=|H`*g2$@8ahm|KiSG;>Iv^@`{)ZH?QhHc6!iiWJ0=J!1?swJwC3)h?{y>Zwk;ZA!1 zaQ*zXwq2m%HW9htu>KkbGvc_*hl0V@i?W;SEknk>2PM(H1#ic3tf+`jhN550t92(* z=U+{|4}UiAio4B?2iCXlwDXK?h!N-8J_KWqh4qY}nB4*sE3Gh=A~`zHqd}i0(?-@D zLViF7PCLxN{{WIAQx;n!>w$ik9J4S;4aOipX6L2+x1d5aWu^ zm(y7U40sF#d17Mk(xmwo7=phUG))tIfA_UxhnjuWuE?d~B>t3Vo)lT0&*>st15*+g z@#b}ypFhR-=hr(DHa#m~M4e!rshj4qK-+9CaOdI%9SVT1r9mv;7+8H>ku>qI{z}!i zf4*PzfiIu#V;h!YyjQSq-!DR^?&E^SV?)HX=g(RGZOkMoQ8;ERc!f9eVQ6${ifD8iZ^M5!u@S70tlvo<(;W$U!C_}q=bD> zE`THt(G$(>YcGmoHw+Zz>pW@BJ*@`kH=`}_*Frl@lvf^Z(7cH~06OjG8#>jWGM+e`9J-MvSfVMUM7+v< z`W93;RIeDfNkobWxKMb$`#5eD=^wibpFG`qQ~OdlJbc~nx(v*NSASl{&Y}`=^Us5> z+9I-{IBz{7mrGoB+~2bCo$P1g*eA%vAbq0r5^{$@DTZ+tA`Bmmb0MUNM)Mu1d<19b z#lfQ$1niu7yq?l=*2w{FaDC9zWM9jcYTG_)lI-bM^?XWCza8&{!G2M~oL~80-j&_n zgHE5gkQTDz_vj|e=fC~vgk7@zhg5#@6HRDtpHwtn8@E-Hw}8X;uyC|iLVq_tUragI z#o^oLJDKG8c@omqP}5@$M7c7DGF-f8$dqnOc){5b)NQEpcM{=#x2RyQh3>nDxIcMJ z--iP_Z*N7`Z#^^r^Y$}J?4XmG-04^z%nKD|k9QdY@CUpfa-4n>MSD*(WR60W2>^zP zc|6Le15wZGgU%%*Hc%Y!exKt>bL5^DwtyLrm4%DbbW0k!UPcFFfr?)`{N9cKV1@$# zWa!1eKH!ecxO$f=w#AYRf32weMlr4at7ztXl+>HbBeSqjGNL3ewkxHvpn?$|6p03% zt6O?b>uJHFi|O2;ySvk(V_pN&1Rn#1-S$`%@od0;O=^ z`ndG-lf#kvUnFjeM$yexXg)zIDM^aQ(LDA1Z3=(7F}j62$8A_g?-#G)>;9R!@6|@! zg30c6pCv?+&ADr^okhUoZFdyNs~mXqMy{+n9CUw!EY1x|x75cbZFGKE!S`*`eYb*lKb7!OH+~EcS~#~L)vTXmYs+cInU93% zu0>yC7TkrxY>ZAQqcEWd_{JjcNwm&?q%gpHG74|*B$;oKJa?(OGlNL`L5RH4696ihtai%^|MCJKff(L z$RvF{#-T3|u6n;lFD#;{T;ac8NF46Xqbl~CU`4089rf>YX$CV3MK2W1&NR)D8`yb@ z!Zlyj&7&JMB)zNU<6K=S{vg`$r)*M$%E6NSh8Vog%2eJPvu!%4dtMsyaLD?!8$_x8zp??+umum4+>UM)v%T#9jiUe+wro~7!&QcrT+ zzq|B+a3y0Z4k2;=fheSrlGv*8v+CHn3}M|HVzknBXssc47{B2n1rKoF$_DJ08Krz5 z$<{vu9+Dya84#srzEAOUd1S!k`3d(n29HT}KBXd6*tws4r22RT(Wi0xIKG zw@_Abu7@778Nz9szs?@os+m_zr8sV8XRbqR_x4gK-PA? zeVxT;fE3MXCEC?r$-R!7ITSdL2Kjy}OF=v+|JiEQb@M3BjAqP*eb&MHYwcl+=2zIg zfihdlr|ktXQBCU6s~^H!TW@|1cL}v8mo-&#DrIZWFWC)Ah6&QMMy`jhIS7qQ+~hjz z@+=C?w(9B4=1u*cZX8_5Uj1FKFF-w$l!}$O;qEJx77`Lny00mD`NMH-3*>7}v7=1j z$8FCsMR{sBt<~4x!)V(wt?$?!wUnT?G189|l%J6#*lcmC%fNc0BlMwDIUypeov-w0 zTIW-midHB6uRvg!Y*@`}1LYdy;I|#_CDyxxa3wkF|7Sv*sFLIo2bWKGn2V{|J zHvDuRP-p)Z-qW}0{nq)T%iqvq0aGQczOK`*I&E)M608kweQH;m*GyucT=ps}r0fdI z#xIRs9WV*%=6rreXyW!Nlq!@VwI4XQzwT7qew=36iV3IO-iH5Z52$D2Iy0fA@cj{{ z4M9=Qf3;*x`-$s#RLQMY`&?YI7IyuufMfFNJ5=rm>OfE7q&W{Q5pKg(%fwXHrbZUN z8$^fwl@<9)0f>-_F=OU4)PSl`Fd5{Ref~~GkzO=RaRRyRlkf^BE1{Oi6-}cSPv4mi z>})dO`xSWD_Xb7qwMt5(HO*|kq5koOO&xMcu}_RXRK^`=giJWaUMtPtbV{Mtd3@V} zRo!hpiY<4t%|6oWx`RscjGXP1RE*TxDBGkgx0~^I2cPTR{b0&Q4kcW5`hls^tWtlo zQ{e44jyrA(sBNw2%jNA9Q}uIT z@YCp1bhNskB?8?=hV}hnBC;fHu9Q^i1y{OxU#b53g&U-P-sYRgCyI9YMFpU9l*!(6^Lsn$&JJ>J->gw)kI<+2sh(mkD7on-s(~v%1 zvM1wjhtQzS9&N?RKfLvWW%CkX%5S?^y9xO~8+xUuUpH)q!X`sc9rG7OLUgn}Y^)re zvy^UFT+^MtQ+{k#$i&#dr#~lyq_hW)asYPa%Q;Eq!MKkTZvzT3{CQ*j4 zaf-k(XS|UJKcjUrU}ghRIpXgWP$&_}Pwa*S<$mDLv<7d)7P<-H6eQ>suoB)jb@4pG z#Irj@>NypTw=XZAABB~UR~SOL?Iw%561Tp;f2ud*ZIWp=ath9DvnVC4bE29Iq^FkY8&%K-boFoP@mpY`rasWIEm1dbF7mnbcb`PeL+{x zS7U_kvNTVa$U98wt@*xgV$Q&?^qbf_-~IP8>$Zr2b^Rk|k#8M2dxJTb2vU8&Cp&hc zr|u&`oZ~x02!xjU5H=?22q2C2a>V_*jU2mgpGo+9Kk@Lt33PsrTmN(Ow>M)!s#T(O zgj^F8z#Aj{4nM&kiI(t84>7(g@+x!5a7;6V2^}U zv-K7J`Zr%fhOHU>49)6lqxNB!wVB!eYVB@j{o8(CyFCe`bo&6Z1KV)g8yzKfEDTrz| z2-aT3&*)y(EC44jx|X_+g8Y-{=VLzSLCmjunzv=*^5E-CWl?c#GQZl5kpcr!C9M@#+ufEcki)--6f`PTkSQPKGy zlBo`*nN#!S?kc-oPB2Ega8z?X^;oL?43d<}OC@Ad#*P^ZXZr2*)=GBQ@HMk0!K_3{ zaf@zj!V)B+2`0tZ;PxS!Y3ol>s^TF5`7}b`{S9iQEhAVv6C07lX2(XOVI?a*WAiW^VH%!>CrKb)yZ+NeDZMg#F%untdD|A z*~re%4a!K&Bgq5FHJ7v68|yRZBdy%IXVBQd)pvAg6(k&wVAX?h>dg?Zr?vvpbx zE!=A}h&tNer3y$Cc>=sXmyH_9nRW%#B)Aiil9stcqhnrK3vKX(g`gA&sOkIyf!Nvl z#yKqZ+|jZh;ZwJ*pD)@P>a#?(?;TXrCl=~IJRw6}vkVqTns)UYca~eHmRCwT?SaPv z=R7^Jg%c^$;WWousKP}|cQW{Gw8fa&sW>}ENIduaAgJ<(ZA@qK7GDv!R>gGW z`TKs`+K$@lR}wx#sm@19_wfIDwxg+UK_)@8uET1nl5q9gpDNX((L#mVvNSQ#U{xO1 z`gcD6nKHhP^uF7^lQoav@maczPqn9XLA~_lBpyOI)UO(KUL-X19YLVtQ%MEE*LT0) z<@_uUc=!is@JG@@}rfn`BILtU%&QK0PZF9u`dM3QB{| z={~5k&5`%TXtoqmp|j~kdT91SqGA-CPNyNNXGR`V4vzQE1EFVvmht=wDbg&O^LH3H zwyu|6&g&>c+bvGGO_$AL6gr*0gP29LzC~omSXiswTVbk?Fd>P*{hKA8tVD`a(_1AR z1G{@gyGL7>TWj<{$n8zuJjFfj5w98zrsN+Mtc({wkz`&|*)*m7Kz`dbv_Yob8~#?! z%&8=jPRWQw{Cb32L&IlM^;vH7&rhOY|E_po+ z+MW`+aP_#9w&ira)ypAIz5VLRn=zWfK@z|hwR5A}8vZ#EKYi?=&7yAi`2^5;JL|b7 zZktVI>-EYsy*+j-eIn3#EKvN^f1B0l_bg2+&gnfAiz=L5lPaDoyD{Kp=p0rG`#u5fCACM0!(cB25G& zlu$#5Aia~&JD~>%<#NvVo%g+W=FWd+P4=E=KWpu0XJ?X?y?#qSMU9c?A!0K(aAs0g zaYE*b`Xt!2JU_)BAa0+by~8gh=|NWH z{g@4pqY$+VB@@w>sS1(%PY8(Rdfb+N9lzKsjN_H$H={_D4!kOL(|i$i6#s~L>5!3} ztnT(PTfKC>ZfE1^>(N~(E_UyVt5Roj7u|$@ ze@;S3ORYl6v`+D-*IpvWWJ4u&fKLA6#K^aeH*DABNxay(fl#CjyC;FqE8|+vC-^#g zK@Df@8Uwx_=d?}I0N?_18WxLso~$s|zw50U)g}|iRU7J*#6zyPrO!DREYepmUc5t3 z5*jb+@ZiU~dOX2b5?noRB9dN>LMg{YDB*OgCoA-`w_(wKSOhBcOruGLUXLiBxElXv zwD90aOH~&^96tnh7K&YYuAleEtmDSx+EVaK>)LDj+Ln}oHQZL2>l?iqhfM$e{4*cx zABpH*h{&Tnqrjdi^5F%f+}TyCVws3f0o~Wn#|{TUrPdeaM-cpWVJGi(m#^2=Mb#3w znYlc-!!;H;Tv|sdzAZ|7S!li(1wLf|u0MorgeIrX)Qo(7s#-SNVNy~ggd&Rn1tN$_ zK{es!pU^kP?6^OkS7kMPuz&i!>nmhDE^;EBpnD}IZj9_v$dh}i)e>jTYtc&Kmw)+v zJ4BRS;#@Kdj8uL0#QyW?JwJU%{hwhYJSd3Dpw!IFGh|dep-SbwWK}DDWoV>IPP4#MB;+Mu?~SaGQg)dxYO%}J`2_8 zMrTnPs3drwUi@Y>oGhE2)Ru;fhz^eG>Wz?{D#kC^JD#(e*L7R&|AhVH1FoIEwf2mo z&bSik=>z;=KA7w}$X@Yz6_jPTXUTipjlIFZzarDm)(zy8dmmuR1qE+>7P0c{-dk0( zBeh7G{GE)M454}3-?LZw;`vn$+C77<-P$);^d^|OYGy#hC zYi%qQ!hUgjM=J-C#Y262Ch1RISKhm)2kTcK8m(sGD^0_+wBOAFz^@qdkTpw&4;L3R zuKqleB=IKm%LgwU^QMVd(04m^soW0rv(2_Zrn&QY57Jx6uRjxE#WY6`?8~-AN&w=b z=iVb@pS#SU-7!O=69ekd^{?V<-bZg9JH6GH+mQ|2*Llq;+jw6@C}A2LYD6;Bkh
fm#QJz;uO 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 literal 0 HcmV?d00001 diff --git a/fuzzy/fan/no_model.jpg b/fuzzy/fan/no_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5cb6d5b1280d8ac8308f27c5ba04d325d9e589a GIT binary patch literal 73830 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 literal 0 HcmV?d00001 diff --git a/fuzzy/fan/with_model.fig b/fuzzy/fan/with_model.fig new file mode 100644 index 0000000000000000000000000000000000000000..8faa5749b7c04d4a460f79ee2a90d38b909fd0f9 GIT binary patch literal 106323 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Ξ?!@)^;e)f~| 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 Qd6)lhTm8Rns~?m9A5QKzOaK4? literal 0 HcmV?d00001 diff --git a/fuzzy/fan1/README.txt b/fuzzy/fan1/README.txt new file mode 100644 index 0000000..995b830 --- /dev/null +++ b/fuzzy/fan1/README.txt @@ -0,0 +1,14 @@ +%fan1 fuzzy uses ../membership/fan1 json data +%and K is the plant model dc gain + +u(k) = fuzzy(e(k), de(k)); %no model +u(k) = (r(k)/K - 50) + fuzzy(e(k), de(k)); %with model + +Gz = + + 0.07751 z^-1 + 0.1716 z^-2 + ------------------------------ + 1 - 0.8539 z^-1 - 0.02473 z^-2 + +Sample time: 0.1 seconds +Discrete-time transfer function. \ No newline at end of file diff --git a/fuzzy/fan1/no_model.fig b/fuzzy/fan1/no_model.fig new file mode 100644 index 0000000000000000000000000000000000000000..d8d9065fee5e31e5a102a1ad027d1d0d24508847 GIT binary patch literal 106950 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⁣p0sA`SZ6 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 H@TRTS2_8mf literal 0 HcmV?d00001 diff --git a/fuzzy/fan1/no_model.jpg b/fuzzy/fan1/no_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38b9948c1072c71fad1a582c53ca88112bc4b38b GIT binary patch literal 60159 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 z zqsho{`sFMvD0uJ2HBF*5-rjcTr;2u5Wt{c9n^4@D>);Y@n36@k@xlW2qbS zu;jBM7v$L7UY;sF%(j;*A?%pdZ~)WI2r2asEPr25Jr!}9mbzP!&t^|t6Z9gSWYm(^ zv>0bOb^8NFNrBx?wor4tj)ZBnJx00y)W99N5CWPPis7Xe1~^{8+4wDhC*=InBEtAD z8btwF4KO-Bq~+e_iB88wBvFij+}r?bdR>BHK`OwyS3N`fT4- z+?X;A;G4#)aFM4nd+VxqE{JjieJfalMQuz=)kL&zTLXi6%6!rzpGi-a`v_Vc!mgt# zC=^h)K_CM$}sogT8+DN+AZPz;g*@q7U&rDN(-2nQF zwn4-{dM+g%EkAFrES@cdP$ne>-AC@0;C=(>$(HFYHYL50>Y_5cL#?PBVjQnbS20`_ z8|o42(HpvKa`uxTj-Oc}!2dg^z(>-P`1VThNO`cnaWHy^t~fDwoGy)#ZfG-UXI7rt zFPdCIN-kKYskE@ozERJqS(U_SoE8hdVvig6>S$yq-FTQSFsz3+*TyL%JEw)UlRjKy zO|wJ%UCX{(fEE_+tlUeuJ_wt?Ui++);nm>Kl2oxwXdn zmUl|1^CNlcGyPmr8*RI8zvFqhwIV?DSdqI%`+o1%{+LM52nEi<{jAspQfXHbHw-Qe ziTCsC>S9dhX%){6#B{?|yIe9kae<{(^Lz_)3xlA?rTLu~EhtU#=pLYI5d^xKg#FFY z%E2FQjB>Iu&$A;IU${WhfV=#mc$Wi};~+yQdufpUjjABTl(A2Hg+e?$jxQTi7*J2n zG~tT=C~kP6X?|3*n@BahY?@qBg2lUijB0x#YGVfS6vz3t0#|6W z@rk0xH7C?~o+viNCXuom+T3d8;CuSy-mL{f_QkI<;OC(sNKA5@`*As1LQap%u1zBw z&4gTRNuo`_*dgDY>|Pl*ieou3;i z_Dpl&{3r-`mQ#|Nn)m@38B6xjIufOslkG6Q0;&MYs)y(iI^vT6=Onsf>#sBAA1<*! zT7rL(a!g2lX>Vtyqj{2#I6kS2_*G%5Ye&ohO{C|<2>FsJW5VAhxB87mY7 zq~W~9=z9^ClMYh6lSYr1E-gK!mbmSE9;*rYHLuH{oiN}e`iv6RyBYK}w>XY(e)xDO z!s({kP)Z=%$J$ro{&!9TaYH*PbOT74`%_;odUrP?W7=N&)1uDJB69Gh_>FYs-&B_CFRpqKb<;a6_*Ht? z&Fw&s(pUf!&BD4XD37iBh9#?QOwP$lOcXvvncSQ6*S2Gvafg!xF?RI4;*Us_d}7j? z(qkfb7AoTBrJ0Qv=qmydJ+|FH!6}h;sJhPKr_9g?aI1%Oo?KFYaj#19sx`)Y3*&L> zU>Qo?lXrTr$U4ih*jHM-WHFd@3c()^c>kA=@B%|M;QZyg7nO6YHgv ziMb}T@x)bB+nIr%Gi$(5O{~j`eC|8|RL_429DdP`ecYm z+Sl$1hy;3j?`BW~{Y<07lFKR~RB;{7A+mXdyt#uP%0DKhxhf4Bo|qj&>jFR!Z&7i` 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 Y07MsLp@0AVTLypcf$#SK`26$#2Si$M3;+NC literal 0 HcmV?d00001 diff --git a/fuzzy/fan1/with_model.fig b/fuzzy/fan1/with_model.fig new file mode 100644 index 0000000000000000000000000000000000000000..fffc94c77e740375ba79c6892e10bc87dbf43782 GIT binary patch literal 96522 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 z z1|B=q_EG&?rOil{-Mhqn#b9r`0m)YK=@&e4iHl;U$d7K&OfJsVbtq>-(!&$kI<@FA zCh75t6f#q}C5_+${f49fF!S8isq1ypDe- z613OuoT^>$<{?K9d6Abj1TRAEZC%bAlgWqC{zJTJcId0*Lkrx+J`Rp|h$8u~nYD47 zKlA8ae1n}ytC3s(p&#UAEIyMKF1MbmAM{;jEkmF9&X{33O(~ zPqa2pM5ZBS*S+#O!AC>2wWc$vQ`fq_ zJc`9)iC8T14%4H1?-;oV9kYbPLqPsV?hRnl+eb?Cdp3Df%_GzQOhpfiBcn#9cjj4? z0=`;w18o~(=f(X?QS-Khm|dn8!%8uH0m>a3-Oa-WdV(>6_I7iKEem}UY-OHi!WIGl zVM1;RFq|Kx6V!rf6tPnOJd(RhJJA4cD9c2n- zhC>AXQ&2wL25g{e)I(bYJLn^d7H+@_N=AX<*8F%WsGF?>yRv?z87AGy~bD-Tj@I@A#EK^ehT5Bv*JI^E(-q#r1_ zEjw5i?jK{t?_Y*0vE^kZHKK&O#hF{4V^VGNnMk#$b=ypEs5S;>o6p>$fuVsSz@h3G zu&r5~)kC}>R015Tg%N>PbhnG(WudCj3V1aesTn2T-Tu%&0VQjTj0@Gn%-SMjt%UL1 zP~0h^pP7qfy@|QF(B7PLibQa4kP2Z)(nl1%t$f`41H2|Qr#tMvKMXZw+Ym#3jS;pL zgJz%%pce2j5&s;No2?o%sR^}f8xS*p4^InKhKD`$&qP_-27t-WFv!cZKQG{4gYxJO z6Rp>C%|zk4!zBFkQDj>Jn5=%;DRiLJ-8{EIFEEC-;cT;F^%fY3!ozp316bhc0!T761oCtmOp7DdXu206Sy7^D!`6rr5ZSMnr236? zqMEWs+HB%~U(<1+Nd=X}m^87*-6ZlDbfZri2o7(Ahfi==!UxVlYtY<2 zj_@ZYe8C|V%AeFOhC;PQxC=>n*a!3ZzP+30+eDQk1so?&Y0{oT_&HzFp`w6_0h<=P z7P~&XW&n-Vqf5Bv-!$Lz-M>V0D=H`#0TQvgh7%qU{wd8RpDRAPde+9Y#k8e8l2D-c z?O!-`7bT{y{U#|M05$Rr9EC(U$gjLLsMSruM(cXShF_S7`R~UES;fMPw;1 ztjeQFFKk3#W3@KF?;-f zJT?0-Pt5+ybF=@VVfJ61nf(`Sv;WW&3dFYN0}X7jbB3vZz19to1`cDy%|}W(!$02C zM6}W1MNk!QF6ZMNj+*<*2K993ak6Q`n-I;`U`I_;}13!223z|4lMWkJ3|c}c_HU|aDVcxP0_+nT60 z4*ceGCEh$Ohw;00n8{ye1J+`oI?QO6uc{Jw_`CErs=}@&u}ulTjVhAf3h`yj(|4GF znIWuIK*yL#n9hIQc6?Lwv5gAPfpYo(Zjbg^3xEV&D*|`V{ydERwfnavs&am3nTSMGIbC901=!b!!#3m2)3&7qTRWqot*;XtoFbz? zo`A*W1vo0rI9_#I@V`j-MSG{}yAfw6 z%5r@qd3??<-WuS%RLqI!ATnXFLS=*Ad%iAIdPfIt z*VkI|C!bYhw|WZ#kJpNm>&BX&GlXt_nG!o7+A%n(@O9+v{tj?CIEr8y-0m;^#&tj! zwl>?|=x~eJJLG?+y=IQyn~zG}jouyOcr4fMkU90{;1ic}n2Yy_cdd3xwD{wJCk(lf zrhuSnmRhF%{a8oye&#{Pl9W`P!gTF=1|8A7x$qmn!~S)OQQ-6TX~rsKUrTVyMO44O z%0D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 literal 0 HcmV?d00001 diff --git a/fuzzy/fan1/with_model.jpg b/fuzzy/fan1/with_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b845eb7b57d0da2ae6a1b2c789f1aa49d123dac7 GIT binary patch literal 55785 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/5) + 2*(k>2*n/5) - 3*(k>3*n/5) + 4*(k>4*n/5)); + e(k) = r(k) - y(k); + + %CONTROLE + %fuzzification + fe = mfe.fx(e(k)); + fde = mfde.fx((y(k) - y(k-1))/T); + [ne, ze, pe] = fe{:}; + [nde, zde, pde] = fde{:}; + [nnu, nu, zu, pu, ppu] = mfu.fy{:}; + %rule system + rules = ... + [ + IF(AND(ne, nde), nnu); + IF(OR(OR(AND(ne, pde), AND(ne, zde)), AND(ze, nde)), nu); + IF(AND(ze, zde), zu); + IF(OR(OR(AND(pe, nde), AND(pe, zde)), AND(ze, pde)), pu); + IF(AND(pe, pde), ppu); + ]; + %defuzzification +% u(k) = sum(rules(:,1).*rules(:,2))/sum(rules(:,2)); + u(k) = (r(k)/K - 50) + sum(rules(:,1).*rules(:,2))/sum(rules(:,2)); + + %ATUAÇÃO E SATURAÇÃO + pwm(k) = min(max(u(k), 0), saturacao); + + escrita(pwm(k)); + ping(k) = toc(time); + + %DELAY + if planta + while toc(time) < T + end + end +end +termina(); +fprintf('Tempo: %f segundos\n\n', toc(t0) - toc(time)); + +%% PLOT & SALVE +fig = plotudo(t(o:k), y, r, e, u, pwm, 0, 0, 0); +if ~exist(salvar_em, 'dir') + mkdir(salvar_em); +end +date = datestr(datetime('now')); +date(date == '-' | date == ':') = '_'; +path = [salvar_em '/' date]; +save([path '.mat'], salvar{:}) +saveas(fig, [path '.fig']) +disp(['Plant: ' salvar_em ' Saved at: ' path]) diff --git a/fuzzy_tanque.m b/fuzzy_tanque.m new file mode 100644 index 0000000..a968abb --- /dev/null +++ b/fuzzy_tanque.m @@ -0,0 +1,119 @@ +%1. Right-click the editor's tab and select "Change current folder to..." +%2. Run the code either with Command Window, F5 or Ctrl+Enter +%3. Modify the configuration and repeat from (2) + +clc +clear +format shortg +addpath(genpath('src')) + +global t y r e u pwm k + +% Adicione o nome de variáveis que queira salvar +salvar = {'t', 'y', 'r', 'e', 'u', 'pwm', 'ping', 'o', 'k', 'n', 'T'}; + +T = 1; %tempo de amostragens +n = 600; %numero de amostras +o = 3; %início de amostragem +t = (0:(n-1))*T; %vetor de tempo + +z = tf('z', T, 'variable', 'z^-1'); +Gz = 0.01595/(z-1); +Gz.ioDelay = 1; + +%% I/O +%tenta conectar com a planta, simula caso aconteça algum erro +try + throw('simula'); %descomente para simular + start_easyport; + pause(1) + enable_pump(1); + leitura = @() read_level; + escrita = @(duty) write_pump(duty); + termina = @() end_easyport; + planta = 'pratica'; + leitura(); +catch ME + errors = textscan(ME.message, '%[^\n]', 1); + disp([errors{end}{:}]); + leitura = @() readsim(Gz); + escrita = @(duty) writesim(duty - 3.7); + termina = 0; + planta = 'teoria'; + k = 0; + escrita(0); + leitura(); +end + +%% CONFIGURACAO +salvar_em = [planta, 'pedro/fuzzy']; +saturacao = 9.5; +referencia = 3; + +%ESTADO INCIAL +[r, y, e, u, pwm] = deal(zeros(n, 1)); +ping = nan(n, 1); +t0 = tic; + +%% FUZZY UZI @todo + +% regras +% cada combinação de entrada é realizada pelo: mínimo +% a fuzzificação de cada entrada é combinada pelas regras (x -> y) +% a aplicação de uma regra em uma função é através do: centro de massa (y) +% a ativação de uma função por múltiplas regras é decidida pelo: máximo (y) (inferência) +% a combinação de múltiplas funções é realizada pelo: centro de massa (y -> x) (defuzificação) +% -e, -de = --u +% -e, +de = -u +% 0e, -de = -u +% -e, 0de = 0u +% +e, 0de = 0u +% 0e, +de = +u +% +e, -de = +u +% +e, +de = ++u + +%rule system +%defuzzification + +%% CONTROL LOOP +for k = 3:n + %MEDIR SENSOR + time = tic; + y(k) = leitura(); + + %REFERÊNCIA + r(k) = referencia + 2*(k>n/6) + 2*(k>2*n/6) + 1*(k>3*n/6) - 2*(k>4*n/6) - 2*(k>5*n/6); + e(k) = r(k) - y(k); + + %CONTROLE + u(k) = 5; + + %ATUAÇÃO E SATURAÇÃO + pwm(k) = min(max(u(k), 0), saturacao); + + escrita(pwm(k)); + ping(k) = toc(time); + + %DELAY + if isa(termina, 'function_handle') + while toc(time) < T + end + end +end +fprintf('Tempo: %f segundos\n\n', toc(t0) - toc(time)); + +if exist('pump', 'var') + end_easyport +end + +%% PLOT & SALVE +fig = plotudo(t(o:k), y, r, e, u, pwm, 0, 1, 0); +if ~exist(salvar_em, 'dir') + mkdir(salvar_em); +end +date = datestr(datetime('now')); +date(date == '-' | date == ':') = '_'; +path = [salvar_em '/' date]; +save([path '.mat'], salvar{:}) +saveas(fig, [path '.fig']) +disp(['Plant: ' salvar_em ' Saved at: ' path]) diff --git a/jsonlab-1.5/AUTHORS.txt b/jsonlab-1.5/AUTHORS.txt new file mode 100644 index 0000000..e0bb650 --- /dev/null +++ b/jsonlab-1.5/AUTHORS.txt @@ -0,0 +1,53 @@ +The author of "jsonlab" toolbox is Qianqian Fang. Qianqian +is currently an Assistant Professor in the Department of Bioengineering, +Northeastern University. + +Address: Qianqian Fang + Department of Bioengineering + Northeastern University + 212A Lake Hall + 360 Huntington Ave, Boston, MA 02115, USA + Office: 503 Holmes Hall + Phone[O]: 617-373-3829 +URL: http://fanglab.org +Email: and + + +The script loadjson.m was built upon previous works by + +- Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 + date: 2009/11/02 +- François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 + date: 2009/03/22 +- Joel Feenstra: http://www.mathworks.com/matlabcentral/fileexchange/20565 + date: 2008/07/03 + + +This toolbox contains patches submitted by the following contributors: + +- Blake Johnson + part of revision 341 + +- Niclas Borlin + various fixes in revision 394, including + - loadjson crashes for all-zero sparse matrix. + - loadjson crashes for empty sparse matrix. + - Non-zero size of 0-by-N and N-by-0 empty matrices is lost after savejson/loadjson. + - loadjson crashes for sparse real column vector. + - loadjson crashes for sparse complex column vector. + - Data is corrupted by savejson for sparse real row vector. + - savejson crashes for sparse complex row vector. + +- Yul Kang + patches for svn revision 415. + - savejson saves an empty cell array as [] instead of null + - loadjson differentiates an empty struct from an empty array + +- Mykhailo Bratukha + (Pull#14) Bug fix: File path is wrongly inerpreted as JSON string + +- Insik Kim + (Pull#12) Bug fix: Resolving bug that cell type is converted to json with transposed data + +- Sertan Senturk + (Pull#10,#11) Feature: Added matlab object saving to savejson and saveubjson diff --git a/jsonlab-1.5/ChangeLog.txt b/jsonlab-1.5/ChangeLog.txt new file mode 100644 index 0000000..da1e725 --- /dev/null +++ b/jsonlab-1.5/ChangeLog.txt @@ -0,0 +1,106 @@ +============================================================================ + + JSONlab - a toolbox to encode/decode JSON/UBJSON files in MATLAB/Octave + +---------------------------------------------------------------------------- + +JSONlab ChangeLog (key features marked by *): + +== JSONlab 1.5 (codename: Nominus - alpha), FangQ neu.edu> == + + 2017/01/02 *use Big-endian format to store floating points (d/D) in saveubjson (Issue #25) + 2017/01/02 *speedup parsing large unstructured data by 2x (Issue #9) + 2017/01/01 make parsing independent of white space (Issue #30) + 2016/08/27 allow to parse array of homogeneous elements (Issue 5) + 2016/08/22 permit [] inside file names in savejson + 2016/01/06 fix a bug that prevents saving to a file in savejson + + +== JSONlab 1.2 (codename: Optimus - Update 2), FangQ neu.edu> == + + 2015/12/16 replacing string concatenation by str cells to gain 2x speed in savejson (Issue#17) + 2015/12/11 fix FileName option case bug (SVN rev#495) + 2015/12/11 add SingletCell option, add SingletArray to replace NoRowBracket (Issue#15,#8) + 2015/11/10 fix bug for inerpreting file names as JSON string - by Mykhailo Bratukha (Pull#14) + 2015/10/16 fix bug for cell with transposed data - by Insik Kim (Pull#12) + 2015/09/25 support exporting matlab object to JSON - by Sertan Senturk (Pull#10, #11) + +== JSONlab 1.1 (codename: Optimus - Update 1), FangQ neu.edu> == + + 2015/05/05 *massively accelerating loadjson for parsing large collection of unstructured small objects + 2015/05/05 force array bracket in 1x1 struct to maintain depth (Issue#1) + 2015/05/05 parse logicals in loadjson + 2015/05/05 make options case insensitive + 2015/05/01 reading unicode encoded json files (thanks to Sertan Senturk,Issue#3) + 2015/04/30 allow \uXXXX to represent a unicode in a string (Issue#2) + 2015/03/30 save a 0x0 solid real empty array as null and handel empty struct array + 2015/03/30 properly handle escape characters in a string + 2015/01/24 *implement the UBJSON Draft12 new name format + 2015/01/13 correct cell array indentation inconsistency + +== JSONlab 1.0 (codename: Optimus - Final), FangQ neu.edu> == + + 2015/01/02 polish help info for all major functions, update examples, finalize 1.0 + 2014/12/19 fix a bug to strictly respect NoRowBracket in savejson + +== JSONlab 1.0.0-RC2 (codename: Optimus - RC2), FangQ neu.edu> == + + 2014/11/22 show progress bar in loadjson ('ShowProgress') + 2014/11/17 *add Compact option in savejson to output compact JSON format ('Compact') + 2014/11/17 add FastArrayParser in loadjson to specify fast parser applicable levels + 2014/09/18 *start official github mirror: https://github.com/fangq/jsonlab + +== JSONlab 1.0.0-RC1 (codename: Optimus - RC1), FangQ neu.edu> == + + 2014/09/17 fix several compatibility issues when running on octave versions 3.2-3.8 + 2014/09/17 *support 2D cell and struct arrays in both savejson and saveubjson + 2014/08/04 escape special characters in a JSON string + 2014/02/16 fix a bug when saving ubjson files + +== JSONlab 0.9.9 (codename: Optimus - beta), FangQ neu.edu> == + + 2014/01/22 use binary read and write in saveubjson and loadubjson + +== JSONlab 0.9.8-1 (codename: Optimus - alpha update 1), FangQ neu.edu> == + + 2013/10/07 better round-trip conservation for empty arrays and structs (patch submitted by Yul Kang) + +== JSONlab 0.9.8 (codename: Optimus - alpha), FangQ neu.edu> == + 2013/08/23 *universal Binary JSON (UBJSON) support, including both saveubjson and loadubjson + +== JSONlab 0.9.1 (codename: Rodimus, update 1), FangQ neu.edu> == + 2012/12/18 *handling of various empty and sparse matrices (fixes submitted by Niclas Borlin) + +== JSONlab 0.9.0 (codename: Rodimus), FangQ neu.edu> == + + 2012/06/17 *new format for an invalid leading char, unpacking hex code in savejson + 2012/06/01 support JSONP in savejson + 2012/05/25 fix the empty cell bug (reported by Cyril Davin) + 2012/04/05 savejson can save to a file (suggested by Patrick Rapin) + +== JSONlab 0.8.1 (codename: Sentiel, Update 1), FangQ neu.edu> == + + 2012/02/28 loadjson quotation mark escape bug, see http://bit.ly/yyk1nS + 2012/01/25 patch to handle root-less objects, contributed by Blake Johnson + +== JSONlab 0.8.0 (codename: Sentiel), FangQ neu.edu> == + + 2012/01/13 *speed up loadjson by 20 fold when parsing large data arrays in matlab + 2012/01/11 remove row bracket if an array has 1 element, suggested by Mykel Kochenderfer + 2011/12/22 *accept sequence of 'param',value input in savejson and loadjson + 2011/11/18 fix struct array bug reported by Mykel Kochenderfer + +== JSONlab 0.5.1 (codename: Nexus Update 1), FangQ neu.edu> == + + 2011/10/21 fix a bug in loadjson, previous code does not use any of the acceleration + 2011/10/20 loadjson supports JSON collections - concatenated JSON objects + +== JSONlab 0.5.0 (codename: Nexus), FangQ neu.edu> == + + 2011/10/16 package and release jsonlab 0.5.0 + 2011/10/15 *add json demo and regression test, support cpx numbers, fix double quote bug + 2011/10/11 *speed up readjson dramatically, interpret _Array* tags, show data in root level + 2011/10/10 create jsonlab project, start jsonlab website, add online documentation + 2011/10/07 *speed up savejson by 25x using sprintf instead of mat2str, add options support + 2011/10/06 *savejson works for structs, cells and arrays + 2011/09/09 derive loadjson from JSON parser from MATLAB Central, draft savejson.m diff --git a/jsonlab-1.5/LICENSE_BSD.txt b/jsonlab-1.5/LICENSE_BSD.txt new file mode 100644 index 0000000..3f86af1 --- /dev/null +++ b/jsonlab-1.5/LICENSE_BSD.txt @@ -0,0 +1,25 @@ +Copyright 2011-2017 Qianqian Fang neu.edu>. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of the copyright holders. diff --git a/jsonlab-1.5/README.txt b/jsonlab-1.5/README.txt new file mode 100644 index 0000000..915985e --- /dev/null +++ b/jsonlab-1.5/README.txt @@ -0,0 +1,431 @@ +=============================================================================== += JSONLab = += An open-source MATLAB/Octave JSON encoder and decoder = +=============================================================================== + +*Copyright (C) 2011-2017 Qianqian Fang +*License: BSD License, see License*.txt +*Version: 1.5 (Nominus - alpha) + +------------------------------------------------------------------------------- + +Table of Content: + +I. Introduction +II. Installation +III.Using JSONLab +IV. Known Issues and TODOs +V. Contribution and feedback + +------------------------------------------------------------------------------- + +I. Introduction + +JSON ([http://www.json.org/ JavaScript Object Notation]) is a highly portable, +human-readable and "[http://en.wikipedia.org/wiki/JSON fat-free]" text format +to represent complex and hierarchical data. It is as powerful as +[http://en.wikipedia.org/wiki/XML XML], but less verbose. JSON format is widely +used for data-exchange in applications, and is essential for the wild success +of [http://en.wikipedia.org/wiki/Ajax_(programming) Ajax] and +[http://en.wikipedia.org/wiki/Web_2.0 Web2.0]. + +UBJSON (Universal Binary JSON) is a binary JSON format, specifically +optimized for compact file size and better performance while keeping +the semantics as simple as the text-based JSON format. Using the UBJSON +format allows to wrap complex binary data in a flexible and extensible +structure, making it possible to process complex and large dataset +without accuracy loss due to text conversions. + +We envision that both JSON and its binary version will serve as part of +the mainstream data-exchange formats for scientific research in the future. +It will provide the flexibility and generality achieved by other popular +general-purpose file specifications, such as +[http://www.hdfgroup.org/HDF5/whatishdf5.html HDF5], with significantly +reduced complexity and enhanced performance. + +JSONLab is a free and open-source implementation of a JSON/UBJSON encoder +and a decoder in the native MATLAB language. It can be used to convert a MATLAB +data structure (array, struct, cell, struct array and cell array) into +JSON/UBJSON formatted strings, or to decode a JSON/UBJSON file into MATLAB +data structure. JSONLab supports both MATLAB and +[http://www.gnu.org/software/octave/ GNU Octave] (a free MATLAB clone). + +------------------------------------------------------------------------------- + +II. Installation + +The installation of JSONLab is no different than any other simple +MATLAB toolbox. You only need to download/unzip the JSONLab package +to a folder, and add the folder's path to MATLAB/Octave's path list +by using the following command: + + addpath('/path/to/jsonlab'); + +If you want to add this path permanently, you need to type "pathtool", +browse to the jsonlab root folder and add to the list, then click "Save". +Then, run "rehash" in MATLAB, and type "which loadjson", if you see an +output, that means JSONLab is installed for MATLAB/Octave. + +------------------------------------------------------------------------------- + +III.Using JSONLab + +JSONLab provides two functions, loadjson.m -- a MATLAB->JSON decoder, +and savejson.m -- a MATLAB->JSON encoder, for the text-based JSON, and +two equivallent functions -- loadubjson and saveubjson for the binary +JSON. The detailed help info for the four functions can be found below: + +=== loadjson.m === +

+  data=loadjson(fname,opt)
+     or
+  data=loadjson(fname,'param1',value1,'param2',value2,...)
+ 
+  parse a JSON (JavaScript Object Notation) file or string
+ 
+  authors:Qianqian Fang (q.fang  neu.edu)
+  created on 2011/09/09, including previous works from 
+ 
+          Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713
+             created on 2009/11/02
+          François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393
+             created on  2009/03/22
+          Joel Feenstra:
+          http://www.mathworks.com/matlabcentral/fileexchange/20565
+             created on 2008/07/03
+ 
+  $Id$
+ 
+  input:
+       fname: input file name, if fname contains "{}" or "[]", fname
+              will be interpreted as a JSON string
+       opt: a struct to store parsing options, opt can be replaced by 
+            a list of ('param',value) pairs - the param string is equivallent
+            to a field in opt. opt can have the following 
+            fields (first in [.|.] is the default)
+ 
+            opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat
+                          for each element of the JSON data, and group 
+                          arrays based on the cell2mat rules.
+            opt.FastArrayParser [1|0 or integer]: if set to 1, use a
+                          speed-optimized array parser when loading an 
+                          array object. The fast array parser may 
+                          collapse block arrays into a single large
+                          array similar to rules defined in cell2mat; 0 to 
+                          use a legacy parser; if set to a larger-than-1
+                          value, this option will specify the minimum
+                          dimension to enable the fast array parser. For
+                          example, if the input is a 3D array, setting
+                          FastArrayParser to 1 will return a 3D array;
+                          setting to 2 will return a cell array of 2D
+                          arrays; setting to 3 will return to a 2D cell
+                          array of 1D vectors; setting to 4 will return a
+                          3D cell array.
+            opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar.
+ 
+  output:
+       dat: a cell array, where {...} blocks are converted into cell arrays,
+            and [...] are converted to arrays
+ 
+  examples:
+       dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}')
+       dat=loadjson(['examples' filesep 'example1.json'])
+       dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1)
+ 
+  license:
+      BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details 
+ 
+ +=== savejson.m === + +
+  json=savejson(rootname,obj,filename)
+     or
+  json=savejson(rootname,obj,opt)
+  json=savejson(rootname,obj,'param1',value1,'param2',value2,...)
+ 
+  convert a MATLAB object (cell, struct or array) into a JSON (JavaScript
+  Object Notation) string
+ 
+  author: Qianqian Fang (q.fang  neu.edu)
+  created on 2011/09/09
+ 
+  $Id$
+ 
+  input:
+       rootname: the name of the root-object, when set to '', the root name
+         is ignored, however, when opt.ForceRootName is set to 1 (see below),
+         the MATLAB variable name will be used as the root name.
+       obj: a MATLAB object (array, cell, cell array, struct, struct array,
+       class instance).
+       filename: a string for the file name to save the output JSON data.
+       opt: a struct for additional options, ignore to use default values.
+         opt can have the following fields (first in [.|.] is the default)
+ 
+         opt.FileName [''|string]: a file name to save the output JSON data
+         opt.FloatFormat ['%.10g'|string]: format to show each numeric element
+                          of a 1D/2D array;
+         opt.ArrayIndent [1|0]: if 1, output explicit data array with
+                          precedent indentation; if 0, no indentation
+         opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D
+                          array in JSON array format; if sets to 1, an
+                          array will be shown as a struct with fields
+                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
+                          sparse arrays, the non-zero elements will be
+                          saved to _ArrayData_ field in triplet-format i.e.
+                          (ix,iy,val) and "_ArrayIsSparse_" will be added
+                          with a value of 1; for a complex array, the 
+                          _ArrayData_ array will include two columns 
+                          (4 for sparse) to record the real and imaginary 
+                          parts, and also "_ArrayIsComplex_":1 is added. 
+         opt.ParseLogical [0|1]: if this is set to 1, logical array elem
+                          will use true/false rather than 1/0.
+         opt.SingletArray [0|1]: if this is set to 1, arrays with a single
+                          numerical element will be shown without a square
+                          bracket, unless it is the root object; if 0, square
+                          brackets are forced for any numerical arrays.
+         opt.SingletCell  [1|0]: if 1, always enclose a cell with "[]" 
+                          even it has only one element; if 0, brackets
+                          are ignored when a cell has only 1 element.
+         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson
+                          will use the name of the passed obj variable as the 
+                          root object name; if obj is an expression and 
+                          does not have a name, 'root' will be used; if this 
+                          is set to 0 and rootname is empty, the root level 
+                          will be merged down to the lower level.
+         opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern
+                          to represent +/-Inf. The matched pattern is '([-+]*)Inf'
+                          and $1 represents the sign. For those who want to use
+                          1e999 to represent Inf, they can set opt.Inf to '$11e999'
+         opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern
+                          to represent NaN
+         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
+                          for example, if opt.JSONP='foo', the JSON data is
+                          wrapped inside a function call as 'foo(...);'
+         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
+                          back to the string form
+         opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode.
+         opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs)
+ 
+         opt can be replaced by a list of ('param',value) pairs. The param 
+         string is equivallent to a field in opt and is case sensitive.
+  output:
+       json: a string in the JSON format (see http://json.org)
+ 
+  examples:
+       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
+                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
+                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
+                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
+                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
+                'SpecialData',[nan, inf, -inf]);
+       savejson('jmesh',jsonmesh)
+       savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g')
+ 
+  license:
+      BSD License, see LICENSE_BSD.txt files for details
+ 
+ +=== loadubjson.m === + +
+  data=loadubjson(fname,opt)
+     or
+  data=loadubjson(fname,'param1',value1,'param2',value2,...)
+ 
+  parse a JSON (JavaScript Object Notation) file or string
+ 
+  authors:Qianqian Fang (q.fang  neu.edu)
+  created on 2013/08/01
+ 
+  $Id$
+ 
+  input:
+       fname: input file name, if fname contains "{}" or "[]", fname
+              will be interpreted as a UBJSON string
+       opt: a struct to store parsing options, opt can be replaced by 
+            a list of ('param',value) pairs - the param string is equivallent
+            to a field in opt. opt can have the following 
+            fields (first in [.|.] is the default)
+ 
+            opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat
+                          for each element of the JSON data, and group 
+                          arrays based on the cell2mat rules.
+            opt.IntEndian [B|L]: specify the endianness of the integer fields
+                          in the UBJSON input data. B - Big-Endian format for 
+                          integers (as required in the UBJSON specification); 
+                          L - input integer fields are in Little-Endian order.
+            opt.NameIsString [0|1]: for UBJSON Specification Draft 8 or 
+                          earlier versions (JSONLab 1.0 final or earlier), 
+                          the "name" tag is treated as a string. To load 
+                          these UBJSON data, you need to manually set this 
+                          flag to 1.
+ 
+  output:
+       dat: a cell array, where {...} blocks are converted into cell arrays,
+            and [...] are converted to arrays
+ 
+  examples:
+       obj=struct('string','value','array',[1 2 3]);
+       ubjdata=saveubjson('obj',obj);
+       dat=loadubjson(ubjdata)
+       dat=loadubjson(['examples' filesep 'example1.ubj'])
+       dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1)
+ 
+  license:
+      BSD License, see LICENSE_BSD.txt files for details 
+
+ +=== saveubjson.m === + +
+  json=saveubjson(rootname,obj,filename)
+     or
+  json=saveubjson(rootname,obj,opt)
+  json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...)
+ 
+  convert a MATLAB object (cell, struct or array) into a Universal 
+  Binary JSON (UBJSON) binary string
+ 
+  author: Qianqian Fang (q.fang  neu.edu)
+  created on 2013/08/17
+ 
+  $Id$
+ 
+  input:
+       rootname: the name of the root-object, when set to '', the root name
+         is ignored, however, when opt.ForceRootName is set to 1 (see below),
+         the MATLAB variable name will be used as the root name.
+       obj: a MATLAB object (array, cell, cell array, struct, struct array,
+       class instance)
+       filename: a string for the file name to save the output UBJSON data
+       opt: a struct for additional options, ignore to use default values.
+         opt can have the following fields (first in [.|.] is the default)
+ 
+         opt.FileName [''|string]: a file name to save the output JSON data
+         opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D
+                          array in JSON array format; if sets to 1, an
+                          array will be shown as a struct with fields
+                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
+                          sparse arrays, the non-zero elements will be
+                          saved to _ArrayData_ field in triplet-format i.e.
+                          (ix,iy,val) and "_ArrayIsSparse_" will be added
+                          with a value of 1; for a complex array, the 
+                          _ArrayData_ array will include two columns 
+                          (4 for sparse) to record the real and imaginary 
+                          parts, and also "_ArrayIsComplex_":1 is added. 
+         opt.ParseLogical [1|0]: if this is set to 1, logical array elem
+                          will use true/false rather than 1/0.
+         opt.SingletArray [0|1]: if this is set to 1, arrays with a single
+                          numerical element will be shown without a square
+                          bracket, unless it is the root object; if 0, square
+                          brackets are forced for any numerical arrays.
+         opt.SingletCell  [1|0]: if 1, always enclose a cell with "[]" 
+                          even it has only one element; if 0, brackets
+                          are ignored when a cell has only 1 element.
+         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson
+                          will use the name of the passed obj variable as the 
+                          root object name; if obj is an expression and 
+                          does not have a name, 'root' will be used; if this 
+                          is set to 0 and rootname is empty, the root level 
+                          will be merged down to the lower level.
+         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
+                          for example, if opt.JSON='foo', the JSON data is
+                          wrapped inside a function call as 'foo(...);'
+         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
+                          back to the string form
+ 
+         opt can be replaced by a list of ('param',value) pairs. The param 
+         string is equivallent to a field in opt and is case sensitive.
+  output:
+       json: a binary string in the UBJSON format (see http://ubjson.org)
+ 
+  examples:
+       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
+                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
+                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
+                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
+                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
+                'SpecialData',[nan, inf, -inf]);
+       saveubjson('jsonmesh',jsonmesh)
+       saveubjson('jsonmesh',jsonmesh,'meshdata.ubj')
+ 
+  license:
+      BSD License, see LICENSE_BSD.txt files for details
+
+ + +=== examples === + +Under the "examples" folder, you can find several scripts to demonstrate the +basic utilities of JSONLab. Running the "demo_jsonlab_basic.m" script, you +will see the conversions from MATLAB data structure to JSON text and backward. +In "jsonlab_selftest.m", we load complex JSON files downloaded from the Internet +and validate the loadjson/savejson functions for regression testing purposes. +Similarly, a "demo_ubjson_basic.m" script is provided to test the saveubjson +and loadubjson functions for various matlab data structures. + +Please run these examples and understand how JSONLab works before you use +it to process your data. + +------------------------------------------------------------------------------- + +IV. Known Issues and TODOs + +JSONLab has several known limitations. We are striving to make it more general +and robust. Hopefully in a few future releases, the limitations become less. + +Here are the known issues: + +# 3D or higher dimensional cell/struct-arrays will be converted to 2D arrays; +# When processing names containing multi-byte characters, Octave and MATLAB \ +can give different field-names; you can use feature('DefaultCharacterSet','latin1') \ +in MATLAB to get consistant results +# savejson can not handle class and dataset. +# saveubjson converts a logical array into a uint8 ([U]) array +# an unofficial N-D array count syntax is implemented in saveubjson. We are \ +actively communicating with the UBJSON spec maintainer to investigate the \ +possibility of making it upstream +# loadubjson can not parse all UBJSON Specification (Draft 9) compliant \ +files, however, it can parse all UBJSON files produced by saveubjson. + +------------------------------------------------------------------------------- + +V. Contribution and feedback + +JSONLab is an open-source project. This means you can not only use it and modify +it as you wish, but also you can contribute your changes back to JSONLab so +that everyone else can enjoy the improvement. For anyone who want to contribute, +please download JSONLab source code from its source code repositories by using the +following command: + + git clone https://github.com/fangq/jsonlab.git jsonlab + +or browsing the github site at + + https://github.com/fangq/jsonlab + +alternatively, if you prefer svn, you can checkout the latest code by using + + svn checkout svn://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab jsonlab + +You can make changes to the files as needed. Once you are satisfied with your +changes, and ready to share it with others, please cd the root directory of +JSONLab, and type + + git diff --no-prefix > yourname_featurename.patch + +or + + svn diff > yourname_featurename.patch + +You then email the .patch file to JSONLab's maintainer, Qianqian Fang, at +the email address shown in the beginning of this file. Qianqian will review +the changes and commit it to the subversion if they are satisfactory. + +We appreciate any suggestions and feedbacks from you. Please use the following +mailing list to report any questions you may have regarding JSONLab: + +https://groups.google.com/forum/?hl=en#!forum/jsonlab-users + +(Subscription to the mailing list is needed in order to post messages). diff --git a/jsonlab-1.5/examples/demo_jsonlab_basic.m b/jsonlab-1.5/examples/demo_jsonlab_basic.m new file mode 100644 index 0000000..d44d4ff --- /dev/null +++ b/jsonlab-1.5/examples/demo_jsonlab_basic.m @@ -0,0 +1,181 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Demonstration of Basic Utilities of JSONlab +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +rngstate = rand ('state'); +randseed=hex2dec('623F9A9E'); +clear data2json json2data + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a simple scalar value \n') +fprintf(1,'%%=================================================\n\n') + +data2json=pi +savejson('',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex number\n') +fprintf(1,'%%=================================================\n\n') + +clear i; +data2json=1+2*i +savejson('',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=magic(6); +data2json=data2json(:,1:3)+data2json(:,4:6)*i +savejson('',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% MATLAB special constants\n') +fprintf(1,'%%=================================================\n\n') + +data2json=[NaN Inf -Inf] +savejson('specials',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a real sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sprand(10,10,0.1) +savejson('sparse',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-data2json*i +savejson('complex_sparse',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an all-zero sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse(2,3); +savejson('all_zero_sparse',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([]); +savejson('empty_sparse',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty 0-by-0 real matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=[]; +savejson('empty_0by0_real',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty 0-by-3 real matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=zeros(0,3); +savejson('empty_0by3_real',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse real column vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([0,3,0,1,4]'); +savejson('sparse_column_vector',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse complex column vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-1i*data2json; +savejson('complex_sparse_column_vector',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse real row vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([0,3,0,1,4]); +savejson('sparse_row_vector',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse complex row vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-1i*data2json; +savejson('complex_sparse_row_vector',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a structure\n') +fprintf(1,'%%=================================================\n\n') + +data2json=struct('name','Think Different','year',1997,'magic',magic(3),... + 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) +savejson('astruct',data2json,struct('ParseLogical',1)) +json2data=loadjson(ans) +class(json2data.astruct.embedded.left) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a structure array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=struct('name','Nexus Prime','rank',9); +data2json(2)=struct('name','Sentinel Prime','rank',9); +data2json(3)=struct('name','Optimus Prime','rank',9); +savejson('Supreme Commander',data2json) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a cell array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=cell(3,1); +data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... + 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); +data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); +data2json{3}=[10.04,10.10,11.04,11.10] +savejson('debian',data2json,struct('FloatFormat','%.2f')) +json2data=loadjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% invalid field-name handling\n') +fprintf(1,'%%=================================================\n\n') + +json2data=loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}') + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a 2D cell array\n') +fprintf(1,'%%=================================================\n\n') + +data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; +savejson('data2json',data2json) +json2data=loadjson(ans) % only savejson works for cell arrays, loadjson has issues + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a 2D struct array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=repmat(struct('idx',0,'data','structs'),[2,3]) +for i=1:6 + data2json(i).idx=i; +end +savejson('data2json',data2json) +json2data=loadjson(ans) + +rand ('state',rngstate); + diff --git a/jsonlab-1.5/examples/demo_ubjson_basic.m b/jsonlab-1.5/examples/demo_ubjson_basic.m new file mode 100644 index 0000000..0c35433 --- /dev/null +++ b/jsonlab-1.5/examples/demo_ubjson_basic.m @@ -0,0 +1,180 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Demonstration of Basic Utilities of JSONlab +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +rngstate = rand ('state'); +randseed=hex2dec('623F9A9E'); +clear data2json json2data + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a simple scalar value \n') +fprintf(1,'%%=================================================\n\n') + +data2json=pi +saveubjson('',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex number\n') +fprintf(1,'%%=================================================\n\n') + +clear i; +data2json=1+2*i +saveubjson('',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=magic(6); +data2json=data2json(:,1:3)+data2json(:,4:6)*i +saveubjson('',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% MATLAB special constants\n') +fprintf(1,'%%=================================================\n\n') + +data2json=[NaN Inf -Inf] +saveubjson('specials',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a real sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sprand(10,10,0.1) +saveubjson('sparse',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a complex sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-data2json*i +saveubjson('complex_sparse',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an all-zero sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse(2,3); +saveubjson('all_zero_sparse',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty sparse matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([]); +saveubjson('empty_sparse',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty 0-by-0 real matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=[]; +saveubjson('empty_0by0_real',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% an empty 0-by-3 real matrix\n') +fprintf(1,'%%=================================================\n\n') + +data2json=zeros(0,3); +saveubjson('empty_0by3_real',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse real column vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([0,3,0,1,4]'); +saveubjson('sparse_column_vector',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse complex column vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-1i*data2json; +saveubjson('complex_sparse_column_vector',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse real row vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=sparse([0,3,0,1,4]); +saveubjson('sparse_row_vector',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a sparse complex row vector\n') +fprintf(1,'%%=================================================\n\n') + +data2json=data2json-1i*data2json; +saveubjson('complex_sparse_row_vector',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a structure\n') +fprintf(1,'%%=================================================\n\n') + +data2json=struct('name','Think Different','year',1997,'magic',magic(3),... + 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) +saveubjson('astruct',data2json,struct('ParseLogical',1)) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a structure array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=struct('name','Nexus Prime','rank',9); +data2json(2)=struct('name','Sentinel Prime','rank',9); +data2json(3)=struct('name','Optimus Prime','rank',9); +saveubjson('Supreme Commander',data2json) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a cell array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=cell(3,1); +data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... + 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); +data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); +data2json{3}=[10.04,10.10,11.04,11.10] +saveubjson('debian',data2json,struct('FloatFormat','%.2f')) +json2data=loadubjson(ans) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% invalid field-name handling\n') +fprintf(1,'%%=================================================\n\n') + +json2data=loadubjson(saveubjson('',loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}'))) + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a 2D cell array\n') +fprintf(1,'%%=================================================\n\n') + +data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; +saveubjson('data2json',data2json) +json2data=loadubjson(ans) % only savejson works for cell arrays, loadjson has issues + +fprintf(1,'\n%%=================================================\n') +fprintf(1,'%% a 2D struct array\n') +fprintf(1,'%%=================================================\n\n') + +data2json=repmat(struct('idx',0,'data','structs'),[2,3]) +for i=1:6 + data2json(i).idx=i; +end +saveubjson('data2json',data2json) +json2data=loadubjson(ans) + +rand ('state',rngstate); + diff --git a/jsonlab-1.5/examples/example1.json b/jsonlab-1.5/examples/example1.json new file mode 100644 index 0000000..be0993e --- /dev/null +++ b/jsonlab-1.5/examples/example1.json @@ -0,0 +1,23 @@ + { + "firstName": "John", + "lastName": "Smith", + "age": 25, + "address": + { + "streetAddress": "21 2nd Street", + "city": "New York", + "state": "NY", + "postalCode": "10021" + }, + "phoneNumber": + [ + { + "type": "home", + "number": "212 555-1234" + }, + { + "type": "fax", + "number": "646 555-4567" + } + ] + } diff --git a/jsonlab-1.5/examples/example2.json b/jsonlab-1.5/examples/example2.json new file mode 100644 index 0000000..eacfbf5 --- /dev/null +++ b/jsonlab-1.5/examples/example2.json @@ -0,0 +1,22 @@ +{ + "glossary": { + "title": "example glossary", + "GlossDiv": { + "title": "S", + "GlossList": { + "GlossEntry": { + "ID": "SGML", + "SortAs": "SGML", + "GlossTerm": "Standard Generalized Markup Language", + "Acronym": "SGML", + "Abbrev": "ISO 8879:1986", + "GlossDef": { + "para": "A meta-markup language, used to create markup languages such as DocBook.", + "GlossSeeAlso": ["GML", "XML"] + }, + "GlossSee": "markup" + } + } + } + } +} diff --git a/jsonlab-1.5/examples/example3.json b/jsonlab-1.5/examples/example3.json new file mode 100644 index 0000000..f52661b --- /dev/null +++ b/jsonlab-1.5/examples/example3.json @@ -0,0 +1,11 @@ +{"menu": { + "id": "file", + "value": "_&File", + "popup": { + "menuitem": [ + {"value": "_&New", "onclick": "CreateNewDoc(\"'\\\"Untitled\\\"'\")"}, + {"value": "_&Open", "onclick": "OpenDoc()"}, + {"value": "_&Close", "onclick": "CloseDoc()"} + ] + } +}} diff --git a/jsonlab-1.5/examples/example4.json b/jsonlab-1.5/examples/example4.json new file mode 100644 index 0000000..1872c12 --- /dev/null +++ b/jsonlab-1.5/examples/example4.json @@ -0,0 +1,35 @@ +[ + { + "sample" : { + "rho" : 1 + } + }, + { + "sample" : { + "rho" : 2 + } + }, + [ + { + "_ArrayType_" : "double", + "_ArraySize_" : [1,2], + "_ArrayData_" : [1,0] + }, + { + "_ArrayType_" : "double", + "_ArraySize_" : [1,2], + "_ArrayData_" : [1,1] + }, + { + "_ArrayType_" : "double", + "_ArraySize_" : [1,2], + "_ArrayData_" : [1,2] + } + ], + [ + "Paper", + "Scissors", + "Stone" + ], + ["a", "b\\", "c\"","d\\\"","e\"[","f\\\"[","g[\\","h[\\\""] +] diff --git a/jsonlab-1.5/examples/jsonlab_basictest.matlab b/jsonlab-1.5/examples/jsonlab_basictest.matlab new file mode 100644 index 0000000..4bd16fa --- /dev/null +++ b/jsonlab-1.5/examples/jsonlab_basictest.matlab @@ -0,0 +1,671 @@ + + < M A T L A B (R) > + Copyright 1984-2010 The MathWorks, Inc. + Version 7.11.0.584 (R2010b) 64-bit (glnxa64) + August 16, 2010 + + + To get started, type one of these: helpwin, helpdesk, or demo. + For product information, visit www.mathworks.com. + +>> >> >> >> >> >> >> >> >> +%================================================= +>> % a simple scalar value +>> %================================================= + +>> >> +data2json = + + 3.1416 + +>> +ans = + +[3.141592654] + + +>> +json2data = + + 3.1416 + +>> >> +%================================================= +>> % a complex number +>> %================================================= + +>> >> >> +data2json = + + 1.0000 + 2.0000i + +>> +ans = + +{ + "_ArrayType_": "double", + "_ArraySize_": [1,1], + "_ArrayIsComplex_": 1, + "_ArrayData_": [1,2] +} + + +>> +json2data = + + 1.0000 + 2.0000i + +>> >> +%================================================= +>> % a complex matrix +>> %================================================= + +>> >> >> +data2json = + + 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i + 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i + 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i + 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i + 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i + 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i + +>> +ans = + +{ + "_ArrayType_": "double", + "_ArraySize_": [6,3], + "_ArrayIsComplex_": 1, + "_ArrayData_": [ + [35,26], + [3,21], + [31,22], + [8,17], + [30,12], + [4,13], + [1,19], + [32,23], + [9,27], + [28,10], + [5,14], + [36,18], + [6,24], + [7,25], + [2,20], + [33,15], + [34,16], + [29,11] + ] +} + + +>> +json2data = + + 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i + 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i + 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i + 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i + 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i + 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i + +>> >> +%================================================= +>> % MATLAB special constants +>> %================================================= + +>> >> +data2json = + + NaN Inf -Inf + +>> +ans = + +{ + "specials": ["_NaN_","_Inf_","-_Inf_"] +} + + +>> +json2data = + + specials: [NaN Inf -Inf] + +>> >> +%================================================= +>> % a real sparse matrix +>> %================================================= + +>> >> +data2json = + + (1,2) 0.6557 + (9,2) 0.7577 + (3,5) 0.8491 + (10,5) 0.7431 + (10,8) 0.3922 + (7,9) 0.6787 + (2,10) 0.0357 + (6,10) 0.9340 + (10,10) 0.6555 + +>> +ans = + +{ + "sparse": { + "_ArrayType_": "double", + "_ArraySize_": [10,10], + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [1,2,0.6557406992], + [9,2,0.7577401306], + [3,5,0.8491293059], + [10,5,0.7431324681], + [10,8,0.3922270195], + [7,9,0.6787351549], + [2,10,0.03571167857], + [6,10,0.9339932478], + [10,10,0.6554778902] + ] + } +} + + +>> +json2data = + + sparse: [10x10 double] + +>> >> +%================================================= +>> % a complex sparse matrix +>> %================================================= + +>> >> +data2json = + + (1,2) 0.6557 - 0.6557i + (9,2) 0.7577 - 0.7577i + (3,5) 0.8491 - 0.8491i + (10,5) 0.7431 - 0.7431i + (10,8) 0.3922 - 0.3922i + (7,9) 0.6787 - 0.6787i + (2,10) 0.0357 - 0.0357i + (6,10) 0.9340 - 0.9340i + (10,10) 0.6555 - 0.6555i + +>> +ans = + +{ + "complex_sparse": { + "_ArrayType_": "double", + "_ArraySize_": [10,10], + "_ArrayIsComplex_": 1, + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [1,2,0.6557406992,-0.6557406992], + [9,2,0.7577401306,-0.7577401306], + [3,5,0.8491293059,-0.8491293059], + [10,5,0.7431324681,-0.7431324681], + [10,8,0.3922270195,-0.3922270195], + [7,9,0.6787351549,-0.6787351549], + [2,10,0.03571167857,-0.03571167857], + [6,10,0.9339932478,-0.9339932478], + [10,10,0.6554778902,-0.6554778902] + ] + } +} + + +>> +json2data = + + complex_sparse: [10x10 double] + +>> >> +%================================================= +>> % an all-zero sparse matrix +>> %================================================= + +>> >> >> +ans = + +{ + "all_zero_sparse": { + "_ArrayType_": "double", + "_ArraySize_": [2,3], + "_ArrayIsSparse_": 1, + "_ArrayData_": null + } +} + + +>> +json2data = + + all_zero_sparse: [2x3 double] + +>> >> +%================================================= +>> % an empty sparse matrix +>> %================================================= + +>> >> >> +ans = + +{ + "empty_sparse": { + "_ArrayType_": "double", + "_ArraySize_": [0,0], + "_ArrayIsSparse_": 1, + "_ArrayData_": null + } +} + + +>> +json2data = + + empty_sparse: [] + +>> >> +%================================================= +>> % an empty 0-by-0 real matrix +>> %================================================= + +>> >> >> +ans = + +{ + "empty_0by0_real": null +} + + +>> +json2data = + + empty_0by0_real: [] + +>> >> +%================================================= +>> % an empty 0-by-3 real matrix +>> %================================================= + +>> >> >> +ans = + +{ + "empty_0by3_real": { + "_ArrayType_": "double", + "_ArraySize_": [0,3], + "_ArrayData_": null + } +} + + +>> +json2data = + + empty_0by3_real: [0x3 double] + +>> >> +%================================================= +>> % a sparse real column vector +>> %================================================= + +>> >> >> +ans = + +{ + "sparse_column_vector": { + "_ArrayType_": "double", + "_ArraySize_": [5,1], + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [2,3], + [4,1], + [5,4] + ] + } +} + + +>> +json2data = + + sparse_column_vector: [5x1 double] + +>> >> +%================================================= +>> % a sparse complex column vector +>> %================================================= + +>> >> >> +ans = + +{ + "complex_sparse_column_vector": { + "_ArrayType_": "double", + "_ArraySize_": [5,1], + "_ArrayIsComplex_": 1, + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [2,3,-3], + [4,1,-1], + [5,4,-4] + ] + } +} + + +>> +json2data = + + complex_sparse_column_vector: [5x1 double] + +>> >> +%================================================= +>> % a sparse real row vector +>> %================================================= + +>> >> >> +ans = + +{ + "sparse_row_vector": { + "_ArrayType_": "double", + "_ArraySize_": [1,5], + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [2,3], + [4,1], + [5,4] + ] + } +} + + +>> +json2data = + + sparse_row_vector: [0 3 0 1 4] + +>> >> +%================================================= +>> % a sparse complex row vector +>> %================================================= + +>> >> >> +ans = + +{ + "complex_sparse_row_vector": { + "_ArrayType_": "double", + "_ArraySize_": [1,5], + "_ArrayIsComplex_": 1, + "_ArrayIsSparse_": 1, + "_ArrayData_": [ + [2,3,-3], + [4,1,-1], + [5,4,-4] + ] + } +} + + +>> +json2data = + + complex_sparse_row_vector: [1x5 double] + +>> >> +%================================================= +>> % a structure +>> %================================================= + +>> >> +data2json = + + name: 'Think Different' + year: 1997 + magic: [3x3 double] + misfits: [Inf NaN] + embedded: [1x1 struct] + +>> +ans = + +{ + "astruct": { + "name": "Think Different", + "year": 1997, + "magic": [ + [8,1,6], + [3,5,7], + [4,9,2] + ], + "misfits": ["_Inf_","_NaN_"], + "embedded": { + "left": true, + "right": false + } + } +} + + +>> +json2data = + + astruct: [1x1 struct] + +>> +ans = + +logical + +>> >> +%================================================= +>> % a structure array +>> %================================================= + +>> >> >> >> >> +ans = + +{ + "Supreme Commander": [ + { + "name": "Nexus Prime", + "rank": 9 + }, + { + "name": "Sentinel Prime", + "rank": 9 + }, + { + "name": "Optimus Prime", + "rank": 9 + } + ] +} + + +>> +json2data = + + Supreme_0x20_Commander: {[1x1 struct] [1x1 struct] [1x1 struct]} + +>> >> +%================================================= +>> % a cell array +>> %================================================= + +>> >> >> >> >> +data2json = + + [1x1 struct] + [1x1 struct] + [1x4 double] + +>> +ans = + +{ + "debian": [ + [ + { + "buzz": 1.10, + "rex": 1.20, + "bo": 1.30, + "hamm": 2.00, + "slink": 2.10, + "potato": 2.20, + "woody": 3.00, + "sarge": 3.10, + "etch": 4.00, + "lenny": 5.00, + "squeeze": 6.00, + "wheezy": 7.00 + } + ], + [ + { + "Ubuntu": [ + "Kubuntu", + "Xubuntu", + "Lubuntu" + ] + } + ], + [ + [10.04,10.10,11.04,11.10] + ] + ] +} + + +>> +json2data = + + debian: {{1x1 cell} {1x1 cell} [10.0400 10.1000 11.0400 11.1000]} + +>> >> +%================================================= +>> % invalid field-name handling +>> %================================================= + +>> >> +json2data = + + ValidName: 1 + x0x5F_InvalidName: 2 + x0x3A_Field_0x3A_: 3 + x0xE9A1B9__0xE79BAE_: 'ç»å¯†' + +>> >> +%================================================= +>> % a 2D cell array +>> %================================================= + +>> >> >> +ans = + +{ + "data2json": [ + [ + [ + 1, + [ + 2, + 3 + ] + ], + [ + 4, + 5 + ], + [ + 6 + ] + ], + [ + [ + 7 + ], + [ + 8, + 9 + ], + [ + 10 + ] + ] + ] +} + + +>> +json2data = + + data2json: {{3x1 cell} {3x1 cell}} + +>> >> +%================================================= +>> % a 2D struct array +>> %================================================= + +>> >> +data2json = + +2x3 struct array with fields: + idx + data + +>> >> +ans = + +{ + "data2json": [ + [ + { + "idx": 1, + "data": "structs" + }, + { + "idx": 2, + "data": "structs" + } + ], + [ + { + "idx": 3, + "data": "structs" + }, + { + "idx": 4, + "data": "structs" + } + ], + [ + { + "idx": 5, + "data": "structs" + }, + { + "idx": 6, + "data": "structs" + } + ] + ] +} + + +>> +json2data = + + data2json: {{1x2 cell} {1x2 cell} {1x2 cell}} + +>> >> >> >> \ No newline at end of file diff --git a/jsonlab-1.5/examples/jsonlab_selftest.m b/jsonlab-1.5/examples/jsonlab_selftest.m new file mode 100644 index 0000000..27aee24 --- /dev/null +++ b/jsonlab-1.5/examples/jsonlab_selftest.m @@ -0,0 +1,27 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Regression Test Unit of loadjson and savejson +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +for i=1:4 + fname=sprintf('example%d.json',i); + if(exist(fname,'file')==0) break; end + fprintf(1,'===============================================\n>> %s\n',fname); + json=savejson('data',loadjson(fname)); + fprintf(1,'%s\n',json); + fprintf(1,'%s\n',savejson('data',loadjson(fname),'Compact',1)); + data=loadjson(json); + savejson('data',data,'selftest.json'); + data=loadjson('selftest.json'); +end + +for i=1:4 + fname=sprintf('example%d.json',i); + if(exist(fname,'file')==0) break; end + fprintf(1,'===============================================\n>> %s\n',fname); + json=saveubjson('data',loadjson(fname)); + fprintf(1,'%s\n',json); + data=loadubjson(json); + savejson('',data); + saveubjson('data',data,'selftest.ubj'); + data=loadubjson('selftest.ubj'); +end diff --git a/jsonlab-1.5/examples/jsonlab_selftest.matlab b/jsonlab-1.5/examples/jsonlab_selftest.matlab new file mode 100644 index 0000000..ac652c5 --- /dev/null +++ b/jsonlab-1.5/examples/jsonlab_selftest.matlab @@ -0,0 +1,154 @@ + + < M A T L A B (R) > + Copyright 1984-2010 The MathWorks, Inc. + Version 7.11.0.584 (R2010b) 64-bit (glnxa64) + August 16, 2010 + + + To get started, type one of these: helpwin, helpdesk, or demo. + For product information, visit www.mathworks.com. + +>> >> >> >> >> =============================================== +>> example1.json +{ + "data": { + "firstName": "John", + "lastName": "Smith", + "age": 25, + "address": { + "streetAddress": "21 2nd Street", + "city": "New York", + "state": "NY", + "postalCode": "10021" + }, + "phoneNumber": [ + { + "type": "home", + "number": "212 555-1234" + }, + { + "type": "fax", + "number": "646 555-4567" + } + ] + } +} + +{"data": {"firstName": "John","lastName": "Smith","age": 25,"address": {"streetAddress": "21 2nd Street","city": "New York","state": "NY","postalCode": "10021"},"phoneNumber": [{"type": "home","number": "212 555-1234"},{"type": "fax","number": "646 555-4567"}]}} + +=============================================== +>> example2.json +{ + "data": { + "glossary": { + "title": "example glossary", + "GlossDiv": { + "title": "S", + "GlossList": { + "GlossEntry": { + "ID": "SGML", + "SortAs": "SGML", + "GlossTerm": "Standard Generalized Markup Language", + "Acronym": "SGML", + "Abbrev": "ISO 8879:1986", + "GlossDef": { + "para": "A meta-markup language, used to create markup languages such as DocBook.", + "GlossSeeAlso": [ + "GML", + "XML" + ] + }, + "GlossSee": "markup" + } + } + } + } + } +} + +{"data": {"glossary": {"title": "example glossary","GlossDiv": {"title": "S","GlossList": {"GlossEntry": {"ID": "SGML","SortAs": "SGML","GlossTerm": "Standard Generalized Markup Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {"para": "A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso": ["GML","XML"]},"GlossSee": "markup"}}}}}} + +=============================================== +>> example3.json +{ + "data": { + "menu": { + "id": "file", + "value": "_&File", + "popup": { + "menuitem": [ + { + "value": "_&New", + "onclick": "CreateNewDoc(\"'\\\"Untitled\\\"'\")" + }, + { + "value": "_&Open", + "onclick": "OpenDoc()" + }, + { + "value": "_&Close", + "onclick": "CloseDoc()" + } + ] + } + } + } +} + +{"data": {"menu": {"id": "file","value": "_&File","popup": {"menuitem": [{"value": "_&New","onclick": "CreateNewDoc(\"'\\\"Untitled\\\"'\")"},{"value": "_&Open","onclick": "OpenDoc()"},{"value": "_&Close","onclick": "CloseDoc()"}]}}}} + +=============================================== +>> example4.json +{ + "data": [ + { + "sample": { + "rho": 1 + } + }, + { + "sample": { + "rho": 2 + } + }, + [ + [1,0], + [1,1], + [1,2] + ], + [ + "Paper", + "Scissors", + "Stone" + ], + [ + "a", + "b\\", + "c\"", + "d\\\"", + "e\"[", + "f\\\"[", + "g[\\", + "h[\\\"" + ] + ] +} + +{"data": [{"sample": {"rho": 1}},{"sample": {"rho": 2}},[[1,0],[1,1],[1,2]],["Paper","Scissors","Stone"],["a","b\\","c\"","d\\\"","e\"[","f\\\"[","g[\\","h[\\\""]]} + +>> >> =============================================== +>> example1.json +{Udata{U firstNameSUJohnUlastNameSUSmithUageiUaddress{U streetAddressSU 21 2nd StreetUcitySUNew YorkUstateSUNYU +postalCodeSU10021}U phoneNumber[{UtypeSUhomeUnumberSU 212 555-1234}{UtypeSUfaxUnumberSU 646 555-4567}]}} +=============================================== +>> example2.json +{Udata{Uglossary{UtitleSUexample glossaryUGlossDiv{UtitleCSU GlossList{U +GlossEntry{UIDSUSGMLUSortAsSUSGMLU GlossTermSU$Standard Generalized Markup LanguageUAcronymSUSGMLUAbbrevSU ISO 8879:1986UGlossDef{UparaSUHA meta-markup language, used to create markup languages such as DocBook.U GlossSeeAlso[SUGMLSUXML]}UGlossSeeSUmarkup}}}}}} +=============================================== +>> example3.json +{Udata{Umenu{UidSUfileUvalueSU_&FileUpopup{Umenuitem[{UvalueSU_&NewUonclickSUCreateNewDoc("'\"Untitled\"'")}{UvalueSU_&OpenUonclickSU OpenDoc()}{UvalueSU_&CloseUonclickSU +CloseDoc()}]}}}} +=============================================== +>> example4.json +{Udata[{Usample{Urhoi}}{Usample{Urhoi}}[[$i#U[$i#U[$i#U][SUPaperSUScissorsSUStone][CaSUb\SUc"SUd\"SUe"[SUf\"[SUg[\SUh[\"]]} +>> \ No newline at end of file diff --git a/jsonlab-1.5/examples/jsonlab_speedtest.m b/jsonlab-1.5/examples/jsonlab_speedtest.m new file mode 100644 index 0000000..4990fba --- /dev/null +++ b/jsonlab-1.5/examples/jsonlab_speedtest.m @@ -0,0 +1,21 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Benchmarking processing speed of savejson and loadjson +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +datalen=[1e3 1e4 1e5 1e6]; +len=length(datalen); +tsave=zeros(len,1); +tload=zeros(len,1); +for i=1:len + tic; + json=savejson('data',struct('d1',rand(datalen(i),3),'d2',rand(datalen(i),3)>0.5)); + tsave(i)=toc; + data=loadjson(json); + tload(i)=toc-tsave(i); + fprintf(1,'matrix size: %d\n',datalen(i)); +end + +loglog(datalen,tsave,'o-',datalen,tload,'r*-'); +legend('savejson runtime (s)','loadjson runtime (s)'); +xlabel('array size'); +ylabel('running time (s)'); diff --git a/jsonlab-1.5/jsonopt.m b/jsonlab-1.5/jsonopt.m new file mode 100644 index 0000000..6ed812a --- /dev/null +++ b/jsonlab-1.5/jsonopt.m @@ -0,0 +1,35 @@ +function val=jsonopt(key,default,varargin) +% +% val=jsonopt(key,default,optstruct) +% +% setting options based on a struct. The struct can be produced +% by varargin2struct from a list of 'param','value' pairs +% +% authors:Qianqian Fang (q.fang neu.edu) +% +% $Id: loadjson.m 371 2012-06-20 12:43:06Z fangq $ +% +% input: +% key: a string with which one look up a value from a struct +% default: if the key does not exist, return default +% optstruct: a struct where each sub-field is a key +% +% output: +% val: if key exists, val=optstruct.key; otherwise val=default +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +val=default; +if(nargin<=2) return; end +opt=varargin{1}; +if(isstruct(opt)) + if(isfield(opt,key)) + val=getfield(opt,key); + elseif(isfield(opt,lower(key))) + val=getfield(opt,lower(key)); + end +end diff --git a/jsonlab-1.5/loadjson.m b/jsonlab-1.5/loadjson.m new file mode 100644 index 0000000..5ef5d48 --- /dev/null +++ b/jsonlab-1.5/loadjson.m @@ -0,0 +1,503 @@ +function data = loadjson(fname,varargin) +% +% data=loadjson(fname,opt) +% or +% data=loadjson(fname,'param1',value1,'param2',value2,...) +% +% parse a JSON (JavaScript Object Notation) file or string +% +% authors:Qianqian Fang (q.fang neu.edu) +% created on 2011/09/09, including previous works from +% +% Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 +% created on 2009/11/02 +% François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 +% created on 2009/03/22 +% Joel Feenstra: +% http://www.mathworks.com/matlabcentral/fileexchange/20565 +% created on 2008/07/03 +% +% $Id$ +% +% input: +% fname: input file name, if fname contains "{}" or "[]", fname +% will be interpreted as a JSON string +% opt: a struct to store parsing options, opt can be replaced by +% a list of ('param',value) pairs - the param string is equivallent +% to a field in opt. opt can have the following +% fields (first in [.|.] is the default) +% +% opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat +% for each element of the JSON data, and group +% arrays based on the cell2mat rules. +% opt.FastArrayParser [1|0 or integer]: if set to 1, use a +% speed-optimized array parser when loading an +% array object. The fast array parser may +% collapse block arrays into a single large +% array similar to rules defined in cell2mat; 0 to +% use a legacy parser; if set to a larger-than-1 +% value, this option will specify the minimum +% dimension to enable the fast array parser. For +% example, if the input is a 3D array, setting +% FastArrayParser to 1 will return a 3D array; +% setting to 2 will return a cell array of 2D +% arrays; setting to 3 will return to a 2D cell +% array of 1D vectors; setting to 4 will return a +% 3D cell array. +% opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar. +% +% output: +% dat: a cell array, where {...} blocks are converted into cell arrays, +% and [...] are converted to arrays +% +% examples: +% dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}') +% dat=loadjson(['examples' filesep 'example1.json']) +% dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1) +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +global pos index_esc isoct arraytoken + +if(regexp(fname,'^\s*(?:\[.*\])|(?:\{.*\})\s*$','once')) + string=fname; +elseif(exist(fname,'file')) + try + string = fileread(fname); + catch + try + string = urlread(['file://',fname]); + catch + string = urlread(['file://',fullfile(pwd,fname)]); + end + end +else + error('input file does not exist'); +end + +pos = 1; len = length(string); inStr = string; +isoct=exist('OCTAVE_VERSION','builtin'); +arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); +jstr=regexprep(inStr,'\\\\',' '); +escquote=regexp(jstr,'\\"'); +arraytoken=sort([arraytoken escquote]); + +% String delimiters and escape chars identified to improve speed: +esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); +index_esc = 1; + +opt=varargin2struct(varargin{:}); + +if(jsonopt('ShowProgress',0,opt)==1) + opt.progressbar_=waitbar(0,'loading ...'); +end +jsoncount=1; +while pos <= len + switch(next_char(inStr)) + case '{' + data{jsoncount} = parse_object(inStr, esc, opt); + case '[' + data{jsoncount} = parse_array(inStr, esc, opt); + otherwise + error_pos('Outer level structure must be an object or an array',inStr); + end + jsoncount=jsoncount+1; +end % while + +jsoncount=length(data); +if(jsoncount==1 && iscell(data)) + data=data{1}; +end + +if(isfield(opt,'progressbar_')) + close(opt.progressbar_); +end + +%%------------------------------------------------------------------------- +function object = parse_object(inStr, esc, varargin) + parse_char(inStr, '{'); + object = []; + if next_char(inStr) ~= '}' + while 1 + str = parseStr(inStr, esc, varargin{:}); + if isempty(str) + error_pos('Name of value at position %d cannot be empty',inStr); + end + parse_char(inStr, ':'); + val = parse_value(inStr, esc, varargin{:}); + object.(valid_field(str))=val; + if next_char(inStr) == '}' + break; + end + parse_char(inStr, ','); + end + end + parse_char(inStr, '}'); + if(isstruct(object)) + object=struct2jdata(object); + end + +%%------------------------------------------------------------------------- + +function object = parse_array(inStr, esc, varargin) % JSON array is written in row-major order + global pos isoct + parse_char(inStr, '['); + object = cell(0, 1); + dim2=[]; + arraydepth=jsonopt('JSONLAB_ArrayDepth_',1,varargin{:}); + pbar=-1; + if(isfield(varargin{1},'progressbar_')) + pbar=varargin{1}.progressbar_; + end + + if next_char(inStr) ~= ']' + if(jsonopt('FastArrayParser',1,varargin{:})>=1 && arraydepth>=jsonopt('FastArrayParser',1,varargin{:})) + [endpos, e1l, e1r]=matching_bracket(inStr,pos); + arraystr=['[' inStr(pos:endpos)]; + arraystr=regexprep(arraystr,'"_NaN_"','NaN'); + arraystr=regexprep(arraystr,'"([-+]*)_Inf_"','$1Inf'); + arraystr(arraystr==sprintf('\n'))=[]; + arraystr(arraystr==sprintf('\r'))=[]; + %arraystr=regexprep(arraystr,'\s*,',','); % this is slow,sometimes needed + if(~isempty(e1l) && ~isempty(e1r)) % the array is in 2D or higher D + astr=inStr((e1l+1):(e1r-1)); + astr=regexprep(astr,'"_NaN_"','NaN'); + astr=regexprep(astr,'"([-+]*)_Inf_"','$1Inf'); + astr(astr==sprintf('\n'))=[]; + astr(astr==sprintf('\r'))=[]; + astr(astr==' ')=''; + if(isempty(find(astr=='[', 1))) % array is 2D + dim2=length(sscanf(astr,'%f,',[1 inf])); + end + else % array is 1D + astr=arraystr(2:end-1); + astr(astr==' ')=''; + [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',[1,inf]); + if(nextidx>=length(astr)-1) + object=obj; + pos=endpos; + parse_char(inStr, ']'); + return; + end + end + + try + if(~isempty(dim2)) + astr=arraystr; + astr(astr=='[')=''; + astr(astr==']')=''; + astr=regexprep(astr,'\s*$',''); + astr(astr==' ')=''; + [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',inf); + if(nextidx>=length(astr)-1) + object=reshape(obj,dim2,numel(obj)/dim2)'; + pos=endpos; + parse_char(inStr, ']'); + if(pbar>0) + waitbar(pos/length(inStr),pbar,'loading ...'); + end + return; + end + end + arraystr=regexprep(arraystr,'\]\s*,','];'); + catch + end + else + arraystr='['; + end + try + arraystr=regexprep(arraystr,'^\s*\[','{','once'); + arraystr=regexprep(arraystr,'\]\s*$','}','once'); + if(isoct && regexp(arraystr,'"','once')) + error('Octave eval can produce empty cells for JSON-like input'); + end + object=eval(arraystr); + pos=endpos; + catch + while 1 + newopt=varargin2struct(varargin{:},'JSONLAB_ArrayDepth_',arraydepth+1); + val = parse_value(inStr, esc, newopt); + object{end+1} = val; + if next_char(inStr) == ']' + break; + end + parse_char(inStr, ','); + end + end + end + if(jsonopt('SimplifyCell',0,varargin{:})==1) + try + oldobj=object; + object=cell2mat(object')'; + if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) + object=oldobj; + elseif(size(object,1)>1 && ismatrix(object)) + object=object'; + end + catch + end + end + parse_char(inStr, ']'); + + if(pbar>0) + waitbar(pos/length(inStr),pbar,'loading ...'); + end +%%------------------------------------------------------------------------- + +function parse_char(inStr, c) + global pos + pos=skip_whitespace(pos, inStr); + if pos > length(inStr) || inStr(pos) ~= c + error_pos(sprintf('Expected %c at position %%d', c),inStr); + else + pos = pos + 1; + pos=skip_whitespace(pos, inStr); + end + +%%------------------------------------------------------------------------- + +function c = next_char(inStr) + global pos + pos=skip_whitespace(pos, inStr); + if pos > length(inStr) + c = []; + else + c = inStr(pos); + end + +%%------------------------------------------------------------------------- + +function newpos=skip_whitespace(pos, inStr) + newpos=pos; + while newpos <= length(inStr) && isspace(inStr(newpos)) + newpos = newpos + 1; + end + +%%------------------------------------------------------------------------- +function str = parseStr(inStr, esc, varargin) + global pos index_esc + % len, ns = length(inStr), keyboard + if inStr(pos) ~= '"' + error_pos('String starting with " expected at position %d',inStr); + else + pos = pos + 1; + end + str = ''; + while pos <= length(inStr) + while index_esc <= length(esc) && esc(index_esc) < pos + index_esc = index_esc + 1; + end + if index_esc > length(esc) + str = [str inStr(pos:end)]; + pos = length(inStr) + 1; + break; + else + str = [str inStr(pos:esc(index_esc)-1)]; + pos = esc(index_esc); + end + nstr = length(str); + switch inStr(pos) + case '"' + pos = pos + 1; + if(~isempty(str)) + if(strcmp(str,'_Inf_')) + str=Inf; + elseif(strcmp(str,'-_Inf_')) + str=-Inf; + elseif(strcmp(str,'_NaN_')) + str=NaN; + end + end + return; + case '\' + if pos+1 > length(inStr) + error_pos('End of file reached right after escape character',inStr); + end + pos = pos + 1; + switch inStr(pos) + case {'"' '\' '/'} + str(nstr+1) = inStr(pos); + pos = pos + 1; + case {'b' 'f' 'n' 'r' 't'} + str(nstr+1) = sprintf(['\' inStr(pos)]); + pos = pos + 1; + case 'u' + if pos+4 > length(inStr) + error_pos('End of file reached in escaped unicode character',inStr); + end + str(nstr+(1:6)) = inStr(pos-1:pos+4); + pos = pos + 5; + end + otherwise % should never happen + str(nstr+1) = inStr(pos); + keyboard; + pos = pos + 1; + end + end + error_pos('End of file while expecting end of inStr',inStr); + +%%------------------------------------------------------------------------- + +function num = parse_number(inStr, varargin) + global pos isoct + currstr=inStr(pos:min(pos+30,end)); + if(isoct~=0) + numstr=regexp(currstr,'^\s*-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?','end'); + [num] = sscanf(currstr, '%f', 1); + delta=numstr+1; + else + [num, one, err, delta] = sscanf(currstr, '%f', 1); + if ~isempty(err) + error_pos('Error reading number at position %d',inStr); + end + end + pos = pos + delta-1; + +%%------------------------------------------------------------------------- + +function val = parse_value(inStr, esc, varargin) + global pos + len=length(inStr); + if(isfield(varargin{1},'progressbar_')) + waitbar(pos/len,varargin{1}.progressbar_,'loading ...'); + end + + switch(inStr(pos)) + case '"' + val = parseStr(inStr, esc, varargin{:}); + return; + case '[' + val = parse_array(inStr, esc, varargin{:}); + return; + case '{' + val = parse_object(inStr, esc, varargin{:}); + return; + case {'-','0','1','2','3','4','5','6','7','8','9'} + val = parse_number(inStr, varargin{:}); + return; + case 't' + if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'true') + val = true; + pos = pos + 4; + return; + end + case 'f' + if pos+4 <= len && strcmpi(inStr(pos:pos+4), 'false') + val = false; + pos = pos + 5; + return; + end + case 'n' + if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'null') + val = []; + pos = pos + 4; + return; + end + end + error_pos('Value expected at position %d',inStr); +%%------------------------------------------------------------------------- + +function error_pos(msg, inStr) + global pos len + poShow = max(min([pos-15 pos-1 pos pos+20],len),1); + if poShow(3) == poShow(2) + poShow(3:4) = poShow(2)+[0 -1]; % display nothing after + end + msg = [sprintf(msg, pos) ': ' ... + inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; + error( ['JSONparser:invalidFormat: ' msg] ); + +%%------------------------------------------------------------------------- + +function str = valid_field(str) +global isoct +% From MATLAB doc: field names must begin with a letter, which may be +% followed by any combination of letters, digits, and underscores. +% Invalid characters will be converted to underscores, and the prefix +% "x0x[Hex code]_" will be added if the first character is not a letter. + pos=regexp(str,'^[^A-Za-z]','once'); + if(~isempty(pos)) + if(~isoct && str(1)+0 > 255) + str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); + else + str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); + end + end + if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) + return; + end + if(~isoct) + str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); + else + pos=regexp(str,'[^0-9A-Za-z_]'); + if(isempty(pos)) + return; + end + str0=str; + pos0=[0 pos(:)' length(str)]; + str=''; + for i=1:length(pos) + str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; + end + if(pos(end)~=length(str)) + str=[str str0(pos0(end-1)+1:pos0(end))]; + end + end + %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; + +%%------------------------------------------------------------------------- +function endpos = matching_quote(str,pos) +len=length(str); +while(pos1 && str(pos-1)=='\')) + endpos=pos; + return; + end + end + pos=pos+1; +end +error('unmatched quotation mark'); +%%------------------------------------------------------------------------- +function [endpos, e1l, e1r, maxlevel] = matching_bracket(str,pos) +global arraytoken +level=1; +maxlevel=level; +endpos=0; +bpos=arraytoken(arraytoken>=pos); +tokens=str(bpos); +len=length(tokens); +pos=1; +e1l=[]; +e1r=[]; +while(pos<=len) + c=tokens(pos); + if(c==']') + level=level-1; + if(isempty(e1r)) + e1r=bpos(pos); + end + if(level==0) + endpos=bpos(pos); + return + end + end + if(c=='[') + if(isempty(e1l)) + e1l=bpos(pos); + end + level=level+1; + maxlevel=max(maxlevel,level); + end + if(c=='"') + pos=matching_quote(tokens,pos+1); + end + pos=pos+1; +end +if(endpos==0) + error('unmatched "]"'); +end diff --git a/jsonlab-1.5/loadubjson.m b/jsonlab-1.5/loadubjson.m new file mode 100644 index 0000000..91e68fa --- /dev/null +++ b/jsonlab-1.5/loadubjson.m @@ -0,0 +1,457 @@ +function data = loadubjson(fname,varargin) +% +% data=loadubjson(fname,opt) +% or +% data=loadubjson(fname,'param1',value1,'param2',value2,...) +% +% parse a JSON (JavaScript Object Notation) file or string +% +% authors:Qianqian Fang (q.fang neu.edu) +% created on 2013/08/01 +% +% $Id$ +% +% input: +% fname: input file name, if fname contains "{}" or "[]", fname +% will be interpreted as a UBJSON string +% opt: a struct to store parsing options, opt can be replaced by +% a list of ('param',value) pairs - the param string is equivallent +% to a field in opt. opt can have the following +% fields (first in [.|.] is the default) +% +% opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat +% for each element of the JSON data, and group +% arrays based on the cell2mat rules. +% opt.IntEndian [B|L]: specify the endianness of the integer fields +% in the UBJSON input data. B - Big-Endian format for +% integers (as required in the UBJSON specification); +% L - input integer fields are in Little-Endian order. +% opt.NameIsString [0|1]: for UBJSON Specification Draft 8 or +% earlier versions (JSONLab 1.0 final or earlier), +% the "name" tag is treated as a string. To load +% these UBJSON data, you need to manually set this +% flag to 1. +% +% output: +% dat: a cell array, where {...} blocks are converted into cell arrays, +% and [...] are converted to arrays +% +% examples: +% obj=struct('string','value','array',[1 2 3]); +% ubjdata=saveubjson('obj',obj); +% dat=loadubjson(ubjdata) +% dat=loadubjson(['examples' filesep 'example1.ubj']) +% dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1) +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +global pos inStr len esc index_esc len_esc isoct arraytoken fileendian systemendian + +if(regexp(fname,'[\{\}\]\[]','once')) + string=fname; +elseif(exist(fname,'file')) + fid = fopen(fname,'rb'); + string = fread(fid,inf,'uint8=>char')'; + fclose(fid); +else + error('input file does not exist'); +end + +pos = 1; len = length(string); inStr = string; +isoct=exist('OCTAVE_VERSION','builtin'); +arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); +jstr=regexprep(inStr,'\\\\',' '); +escquote=regexp(jstr,'\\"'); +arraytoken=sort([arraytoken escquote]); + +% String delimiters and escape chars identified to improve speed: +esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); +index_esc = 1; len_esc = length(esc); + +opt=varargin2struct(varargin{:}); +fileendian=upper(jsonopt('IntEndian','B',opt)); +[os,maxelem,systemendian]=computer; + +jsoncount=1; +while pos <= len + switch(next_char) + case '{' + data{jsoncount} = parse_object(opt); + case '[' + data{jsoncount} = parse_array(opt); + otherwise + error_pos('Outer level structure must be an object or an array'); + end + jsoncount=jsoncount+1; +end % while + +jsoncount=length(data); +if(jsoncount==1 && iscell(data)) + data=data{1}; +end + +%%------------------------------------------------------------------------- +function object = parse_object(varargin) + parse_char('{'); + object = []; + type=''; + count=-1; + if(next_char == '$') + type=inStr(pos+1); % TODO + pos=pos+2; + end + if(next_char == '#') + pos=pos+1; + count=double(parse_number()); + end + if next_char ~= '}' + num=0; + while 1 + if(jsonopt('NameIsString',0,varargin{:})) + str = parseStr(varargin{:}); + else + str = parse_name(varargin{:}); + end + if isempty(str) + error_pos('Name of value at position %d cannot be empty'); + end + %parse_char(':'); + val = parse_value(varargin{:}); + num=num+1; + object.(valid_field(str))=val; + if next_char == '}' || (count>=0 && num>=count) + break; + end + %parse_char(','); + end + end + if(count==-1) + parse_char('}'); + end + if(isstruct(object)) + object=struct2jdata(object); + end + +%%------------------------------------------------------------------------- +function [cid,len]=elem_info(type) +id=strfind('iUIlLdD',type); +dataclass={'int8','uint8','int16','int32','int64','single','double'}; +bytelen=[1,1,2,4,8,4,8]; +if(id>0) + cid=dataclass{id}; + len=bytelen(id); +else + error_pos('unsupported type at position %d'); +end +%%------------------------------------------------------------------------- + + +function [data, adv]=parse_block(type,count,varargin) +global pos inStr isoct fileendian systemendian +[cid,len]=elem_info(type); +datastr=inStr(pos:pos+len*count-1); +if(isoct) + newdata=int8(datastr); +else + newdata=uint8(datastr); +end +id=strfind('iUIlLdD',type); +if(fileendian~=systemendian) + newdata=swapbytes(typecast(newdata,cid)); +end +data=typecast(newdata,cid); +adv=double(len*count); + +%%------------------------------------------------------------------------- + + +function object = parse_array(varargin) % JSON array is written in row-major order +global pos inStr + parse_char('['); + object = cell(0, 1); + dim=[]; + type=''; + count=-1; + if(next_char == '$') + type=inStr(pos+1); + pos=pos+2; + end + if(next_char == '#') + pos=pos+1; + if(next_char=='[') + dim=parse_array(varargin{:}); + count=prod(double(dim)); + else + count=double(parse_number()); + end + end + if(~isempty(type)) + if(count>=0) + [object, adv]=parse_block(type,count,varargin{:}); + if(~isempty(dim)) + object=reshape(object,dim); + end + pos=pos+adv; + return; + else + endpos=matching_bracket(inStr,pos); + [cid,len]=elem_info(type); + count=(endpos-pos)/len; + [object, adv]=parse_block(type,count,varargin{:}); + pos=pos+adv; + parse_char(']'); + return; + end + end + if next_char ~= ']' + while 1 + val = parse_value(varargin{:}); + object{end+1} = val; + if next_char == ']' + break; + end + %parse_char(','); + end + end + if(jsonopt('SimplifyCell',0,varargin{:})==1) + try + oldobj=object; + object=cell2mat(object')'; + if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) + object=oldobj; + elseif(size(object,1)>1 && ismatrix(object)) + object=object'; + end + catch + end + end + if(count==-1) + parse_char(']'); + end + +%%------------------------------------------------------------------------- + +function parse_char(c) + global pos inStr len + skip_whitespace; + if pos > len || inStr(pos) ~= c + error_pos(sprintf('Expected %c at position %%d', c)); + else + pos = pos + 1; + skip_whitespace; + end + +%%------------------------------------------------------------------------- + +function c = next_char + global pos inStr len + skip_whitespace; + if pos > len + c = []; + else + c = inStr(pos); + end + +%%------------------------------------------------------------------------- + +function skip_whitespace + global pos inStr len + while pos <= len && isspace(inStr(pos)) + pos = pos + 1; + end + +%%------------------------------------------------------------------------- +function str = parse_name(varargin) + global pos inStr + bytelen=double(parse_number()); + if(length(inStr)>=pos+bytelen-1) + str=inStr(pos:pos+bytelen-1); + pos=pos+bytelen; + else + error_pos('End of file while expecting end of name'); + end +%%------------------------------------------------------------------------- + +function str = parseStr(varargin) + global pos inStr + % len, ns = length(inStr), keyboard + type=inStr(pos); + if type ~= 'S' && type ~= 'C' && type ~= 'H' + error_pos('String starting with S expected at position %d'); + else + pos = pos + 1; + end + if(type == 'C') + str=inStr(pos); + pos=pos+1; + return; + end + bytelen=double(parse_number()); + if(length(inStr)>=pos+bytelen-1) + str=inStr(pos:pos+bytelen-1); + pos=pos+bytelen; + else + error_pos('End of file while expecting end of inStr'); + end + +%%------------------------------------------------------------------------- + +function num = parse_number(varargin) + global pos inStr isoct fileendian systemendian + id=strfind('iUIlLdD',inStr(pos)); + if(isempty(id)) + error_pos('expecting a number at position %d'); + end + type={'int8','uint8','int16','int32','int64','single','double'}; + bytelen=[1,1,2,4,8,4,8]; + datastr=inStr(pos+1:pos+bytelen(id)); + if(isoct) + newdata=int8(datastr); + else + newdata=uint8(datastr); + end + if(fileendian~=systemendian) + newdata=swapbytes(typecast(newdata,type{id})); + end + num=typecast(newdata,type{id}); + pos = pos + bytelen(id)+1; + +%%------------------------------------------------------------------------- + +function val = parse_value(varargin) + global pos inStr + + switch(inStr(pos)) + case {'S','C','H'} + val = parseStr(varargin{:}); + return; + case '[' + val = parse_array(varargin{:}); + return; + case '{' + val = parse_object(varargin{:}); + return; + case {'i','U','I','l','L','d','D'} + val = parse_number(varargin{:}); + return; + case 'T' + val = true; + pos = pos + 1; + return; + case 'F' + val = false; + pos = pos + 1; + return; + case {'Z','N'} + val = []; + pos = pos + 1; + return; + end + error_pos('Value expected at position %d'); +%%------------------------------------------------------------------------- + +function error_pos(msg) + global pos inStr len + poShow = max(min([pos-15 pos-1 pos pos+20],len),1); + if poShow(3) == poShow(2) + poShow(3:4) = poShow(2)+[0 -1]; % display nothing after + end + msg = [sprintf(msg, pos) ': ' ... + inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; + error( ['JSONparser:invalidFormat: ' msg] ); + +%%------------------------------------------------------------------------- + +function str = valid_field(str) +global isoct +% From MATLAB doc: field names must begin with a letter, which may be +% followed by any combination of letters, digits, and underscores. +% Invalid characters will be converted to underscores, and the prefix +% "x0x[Hex code]_" will be added if the first character is not a letter. + pos=regexp(str,'^[^A-Za-z]','once'); + if(~isempty(pos)) + if(~isoct) + str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); + else + str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); + end + end + if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) + return; + end + if(~isoct) + str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); + else + pos=regexp(str,'[^0-9A-Za-z_]'); + if(isempty(pos)) + return; + end + str0=str; + pos0=[0 pos(:)' length(str)]; + str=''; + for i=1:length(pos) + str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; + end + if(pos(end)~=length(str)) + str=[str str0(pos0(end-1)+1:pos0(end))]; + end + end + %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; + +%%------------------------------------------------------------------------- +function endpos = matching_quote(str,pos) +len=length(str); +while(pos1 && str(pos-1)=='\')) + endpos=pos; + return; + end + end + pos=pos+1; +end +error('unmatched quotation mark'); +%%------------------------------------------------------------------------- +function [endpos, e1l, e1r, maxlevel] = matching_bracket(str,pos) +global arraytoken +level=1; +maxlevel=level; +endpos=0; +bpos=arraytoken(arraytoken>=pos); +tokens=str(bpos); +len=length(tokens); +pos=1; +e1l=[]; +e1r=[]; +while(pos<=len) + c=tokens(pos); + if(c==']') + level=level-1; + if(isempty(e1r)) + e1r=bpos(pos); + end + if(level==0) + endpos=bpos(pos); + return + end + end + if(c=='[') + if(isempty(e1l)) + e1l=bpos(pos); + end + level=level+1; + maxlevel=max(maxlevel,level); + end + if(c=='"') + pos=matching_quote(tokens,pos+1); + end + pos=pos+1; +end +if(endpos==0) + error('unmatched "]"'); +end + diff --git a/jsonlab-1.5/mergestruct.m b/jsonlab-1.5/mergestruct.m new file mode 100644 index 0000000..5448c88 --- /dev/null +++ b/jsonlab-1.5/mergestruct.m @@ -0,0 +1,33 @@ +function s=mergestruct(s1,s2) +% +% s=mergestruct(s1,s2) +% +% merge two struct objects into one +% +% authors:Qianqian Fang (q.fang neu.edu) +% date: 2012/12/22 +% +% input: +% s1,s2: a struct object, s1 and s2 can not be arrays +% +% output: +% s: the merged struct object. fields in s1 and s2 will be combined in s. +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(~isstruct(s1) || ~isstruct(s2)) + error('input parameters contain non-struct'); +end +if(length(s1)>1 || length(s2)>1) + error('can not merge struct arrays'); +end +fn=fieldnames(s2); +s=s1; +for i=1:length(fn) + s=setfield(s,fn{i},getfield(s2,fn{i})); +end + diff --git a/jsonlab-1.5/savejson.m b/jsonlab-1.5/savejson.m new file mode 100644 index 0000000..0583ce4 --- /dev/null +++ b/jsonlab-1.5/savejson.m @@ -0,0 +1,552 @@ +function json=savejson(rootname,obj,varargin) +% +% json=savejson(rootname,obj,filename) +% or +% json=savejson(rootname,obj,opt) +% json=savejson(rootname,obj,'param1',value1,'param2',value2,...) +% +% convert a MATLAB object (cell, struct or array) into a JSON (JavaScript +% Object Notation) string +% +% author: Qianqian Fang (q.fang neu.edu) +% created on 2011/09/09 +% +% $Id$ +% +% input: +% rootname: the name of the root-object, when set to '', the root name +% is ignored, however, when opt.ForceRootName is set to 1 (see below), +% the MATLAB variable name will be used as the root name. +% obj: a MATLAB object (array, cell, cell array, struct, struct array, +% class instance). +% filename: a string for the file name to save the output JSON data. +% opt: a struct for additional options, ignore to use default values. +% opt can have the following fields (first in [.|.] is the default) +% +% opt.FileName [''|string]: a file name to save the output JSON data +% opt.FloatFormat ['%.10g'|string]: format to show each numeric element +% of a 1D/2D array; +% opt.ArrayIndent [1|0]: if 1, output explicit data array with +% precedent indentation; if 0, no indentation +% opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D +% array in JSON array format; if sets to 1, an +% array will be shown as a struct with fields +% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for +% sparse arrays, the non-zero elements will be +% saved to _ArrayData_ field in triplet-format i.e. +% (ix,iy,val) and "_ArrayIsSparse_" will be added +% with a value of 1; for a complex array, the +% _ArrayData_ array will include two columns +% (4 for sparse) to record the real and imaginary +% parts, and also "_ArrayIsComplex_":1 is added. +% opt.ParseLogical [0|1]: if this is set to 1, logical array elem +% will use true/false rather than 1/0. +% opt.SingletArray [0|1]: if this is set to 1, arrays with a single +% numerical element will be shown without a square +% bracket, unless it is the root object; if 0, square +% brackets are forced for any numerical arrays. +% opt.SingletCell [1|0]: if 1, always enclose a cell with "[]" +% even it has only one element; if 0, brackets +% are ignored when a cell has only 1 element. +% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson +% will use the name of the passed obj variable as the +% root object name; if obj is an expression and +% does not have a name, 'root' will be used; if this +% is set to 0 and rootname is empty, the root level +% will be merged down to the lower level. +% opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern +% to represent +/-Inf. The matched pattern is '([-+]*)Inf' +% and $1 represents the sign. For those who want to use +% 1e999 to represent Inf, they can set opt.Inf to '$11e999' +% opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern +% to represent NaN +% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), +% for example, if opt.JSONP='foo', the JSON data is +% wrapped inside a function call as 'foo(...);' +% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson +% back to the string form +% opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode. +% opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs) +% +% opt can be replaced by a list of ('param',value) pairs. The param +% string is equivallent to a field in opt and is case sensitive. +% output: +% json: a string in the JSON format (see http://json.org) +% +% examples: +% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... +% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... +% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... +% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... +% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... +% 'SpecialData',[nan, inf, -inf]); +% savejson('jmesh',jsonmesh) +% savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g') +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(nargin==1) + varname=inputname(1); + obj=rootname; + if(isempty(varname)) + varname='root'; + end + rootname=varname; +else + varname=inputname(2); +end +if(length(varargin)==1 && ischar(varargin{1})) + opt=struct('filename',varargin{1}); +else + opt=varargin2struct(varargin{:}); +end +opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +if(isfield(opt,'norowbracket')) + warning('Option ''NoRowBracket'' is depreciated, please use ''SingletArray'' and set its value to not(NoRowBracket)'); + if(~isfield(opt,'singletarray')) + opt.singletarray=not(opt.norowbracket); + end +end +rootisarray=0; +rootlevel=1; +forceroot=jsonopt('ForceRootName',0,opt); +if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || ... + iscell(obj) || isobject(obj)) && isempty(rootname) && forceroot==0) + rootisarray=1; + rootlevel=0; +else + if(isempty(rootname)) + rootname=varname; + end +end +if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) + rootname='root'; +end + +whitespaces=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +if(jsonopt('Compact',0,opt)==1) + whitespaces=struct('tab','','newline','','sep',','); +end +if(~isfield(opt,'whitespaces_')) + opt.whitespaces_=whitespaces; +end + +nl=whitespaces.newline; + +json=obj2json(rootname,obj,rootlevel,opt); +if(rootisarray) + json=sprintf('%s%s',json,nl); +else + json=sprintf('{%s%s%s}\n',nl,json,nl); +end + +jsonp=jsonopt('JSONP','',opt); +if(~isempty(jsonp)) + json=sprintf('%s(%s);%s',jsonp,json,nl); +end + +% save to a file if FileName is set, suggested by Patrick Rapin +filename=jsonopt('FileName','',opt); +if(~isempty(filename)) + if(jsonopt('SaveBinary',0,opt)==1) + fid = fopen(filename, 'wb'); + fwrite(fid,json); + else + fid = fopen(filename, 'wt'); + fwrite(fid,json,'char'); + end + fclose(fid); +end + +%%------------------------------------------------------------------------- +function txt=obj2json(name,item,level,varargin) + +if(iscell(item)) + txt=cell2json(name,item,level,varargin{:}); +elseif(isstruct(item)) + txt=struct2json(name,item,level,varargin{:}); +elseif(ischar(item)) + txt=str2json(name,item,level,varargin{:}); +elseif(isobject(item)) + txt=matlabobject2json(name,item,level,varargin{:}); +else + txt=mat2json(name,item,level,varargin{:}); +end + +%%------------------------------------------------------------------------- +function txt=cell2json(name,item,level,varargin) +txt={}; +if(~iscell(item)) + error('input is not a cell'); +end + +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); +ws=jsonopt('whitespaces_',struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')),varargin{:}); +padding0=repmat(ws.tab,1,level); +padding2=repmat(ws.tab,1,level+1); +nl=ws.newline; +bracketlevel=~jsonopt('singletcell',1,varargin{:}); +if(len>bracketlevel) + if(~isempty(name)) + txt={padding0, '"', checkname(name,varargin{:}),'": [', nl}; name=''; + else + txt={padding0, '[', nl}; + end +elseif(len==0) + if(~isempty(name)) + txt={padding0, '"' checkname(name,varargin{:}) '": []'}; name=''; + else + txt={padding0, '[]'}; + end +end +for i=1:dim(1) + if(dim(1)>1) + txt(end+1:end+3)={padding2,'[',nl}; + end + for j=1:dim(2) + txt{end+1}=obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:}); + if(j1) + txt(end+1:end+3)={nl,padding2,']'}; + end + if(ibracketlevel) + txt(end+1:end+3)={nl,padding0,']'}; +end +txt = sprintf('%s',txt{:}); + +%%------------------------------------------------------------------------- +function txt=struct2json(name,item,level,varargin) +txt={}; +if(~isstruct(item)) + error('input is not a struct'); +end +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); +forcearray= (len>1 || (jsonopt('SingletArray',0,varargin{:})==1 && level>0)); +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +padding0=repmat(ws.tab,1,level); +padding2=repmat(ws.tab,1,level+1); +padding1=repmat(ws.tab,1,level+(dim(1)>1)+forcearray); +nl=ws.newline; + +if(isempty(item)) + if(~isempty(name)) + txt={padding0, '"', checkname(name,varargin{:}),'": []'}; + else + txt={padding0, '[]'}; + end + txt = sprintf('%s',txt{:}); + return; +end +if(~isempty(name)) + if(forcearray) + txt={padding0, '"', checkname(name,varargin{:}),'": [', nl}; + end +else + if(forcearray) + txt={padding0, '[', nl}; + end +end +for j=1:dim(2) + if(dim(1)>1) + txt(end+1:end+3)={padding2,'[',nl}; + end + for i=1:dim(1) + names = fieldnames(item(i,j)); + if(~isempty(name) && len==1 && ~forcearray) + txt(end+1:end+5)={padding1, '"', checkname(name,varargin{:}),'": {', nl}; + else + txt(end+1:end+3)={padding1, '{', nl}; + end + if(~isempty(names)) + for e=1:length(names) + txt{end+1}=obj2json(names{e},item(i,j).(names{e}),... + level+(dim(1)>1)+1+forcearray,varargin{:}); + if(e1) + txt(end+1:end+3)={nl,padding2,']'}; + end + if(j1) + txt={padding1, '"', checkname(name,varargin{:}),'": [', nl}; + end +else + if(len>1) + txt={padding1, '[', nl}; + end +end +for e=1:len + val=escapejsonstring(item(e,:)); + if(len==1) + obj=['"' checkname(name,varargin{:}) '": ' '"',val,'"']; + if(isempty(name)) + obj=['"',val,'"']; + end + txt(end+1:end+2)={padding1, obj}; + else + txt(end+1:end+4)={padding0,'"',val,'"'}; + end + if(e==len) + sep=''; + end + txt{end+1}=sep; +end +if(len>1) + txt(end+1:end+3)={nl,padding1,']'}; +end +txt = sprintf('%s',txt{:}); + +%%------------------------------------------------------------------------- +function txt=mat2json(name,item,level,varargin) +if(~isnumeric(item) && ~islogical(item)) + error('input is not an array'); +end +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +padding1=repmat(ws.tab,1,level); +padding0=repmat(ws.tab,1,level+1); +nl=ws.newline; +sep=ws.sep; + +if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... + (isempty(item) && any(size(item))) ||jsonopt('ArrayToStruct',0,varargin{:})) + if(isempty(name)) + txt=sprintf('%s{%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... + padding1,nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); + else + txt=sprintf('%s"%s": {%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... + padding1,checkname(name,varargin{:}),nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); + end +else + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0 && level>0) + numtxt=regexprep(regexprep(matdata2json(item,level+1,varargin{:}),'^\[',''),']',''); + else + numtxt=matdata2json(item,level+1,varargin{:}); + end + if(isempty(name)) + txt=sprintf('%s%s',padding1,numtxt); + else + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0) + txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); + else + txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); + end + end + return; +end +dataformat='%s%s%s%s%s'; + +if(issparse(item)) + [ix,iy]=find(item); + data=full(item(find(item))); + if(~isreal(item)) + data=[real(data(:)),imag(data(:))]; + if(size(item,1)==1) + % Kludge to have data's 'transposedness' match item's. + % (Necessary for complex row vector handling below.) + data=data'; + end + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); + end + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsSparse_": ','1', sep); + if(size(item,1)==1) + % Row vector, store only column indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([iy(:),data'],level+2,varargin{:}), nl); + elseif(size(item,2)==1) + % Column vector, store only row indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([ix,data],level+2,varargin{:}), nl); + else + % General case, store row and column indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([ix,iy,data],level+2,varargin{:}), nl); + end +else + if(isreal(item)) + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json(item(:)',level+2,varargin{:}), nl); + else + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([real(item(:)) imag(item(:))],level+2,varargin{:}), nl); + end +end +txt=sprintf('%s%s%s',txt,padding1,'}'); + +%%------------------------------------------------------------------------- +function txt=matlabobject2json(name,item,level,varargin) +if numel(item) == 0 %empty object + st = struct(); +else + % "st = struct(item);" would produce an inmutable warning, because it + % make the protected and private properties visible. Instead we get the + % visible properties + propertynames = properties(item); + for p = 1:numel(propertynames) + for o = numel(item):-1:1 % aray of objects + st(o).(propertynames{p}) = item(o).(propertynames{p}); + end + end +end +txt=struct2json(name,st,level,varargin{:}); + +%%------------------------------------------------------------------------- +function txt=matdata2json(mat,level,varargin) + +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +tab=ws.tab; +nl=ws.newline; + +if(size(mat,1)==1) + pre=''; + post=''; + level=level-1; +else + pre=sprintf('[%s',nl); + post=sprintf('%s%s]',nl,repmat(tab,1,level-1)); +end + +if(isempty(mat)) + txt='null'; + return; +end +floatformat=jsonopt('FloatFormat','%.10g',varargin{:}); +%if(numel(mat)>1) + formatstr=['[' repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf('],%s',nl)]]; +%else +% formatstr=[repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf(',\n')]]; +%end + +if(nargin>=2 && size(mat,1)>1 && jsonopt('ArrayIndent',1,varargin{:})==1) + formatstr=[repmat(tab,1,level) formatstr]; +end + +txt=sprintf(formatstr,mat'); +txt(end-length(nl):end)=[]; +if(islogical(mat) && jsonopt('ParseLogical',0,varargin{:})==1) + txt=regexprep(txt,'1','true'); + txt=regexprep(txt,'0','false'); +end +%txt=regexprep(mat2str(mat),'\s+',','); +%txt=regexprep(txt,';',sprintf('],\n[')); +% if(nargin>=2 && size(mat,1)>1) +% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); +% end +txt=[pre txt post]; +if(any(isinf(mat(:)))) + txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); +end +if(any(isnan(mat(:)))) + txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); +end + +%%------------------------------------------------------------------------- +function newname=checkname(name,varargin) +isunpack=jsonopt('UnpackHex',1,varargin{:}); +newname=name; +if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) + return +end +if(isunpack) + isoct=jsonopt('IsOctave',0,varargin{:}); + if(~isoct) + newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); + else + pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); + pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); + if(isempty(pos)) + return; + end + str0=name; + pos0=[0 pend(:)' length(name)]; + newname=''; + for i=1:length(pos) + newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; + end + if(pos(end)~=length(name)) + newname=[newname str0(pos0(end-1)+1:pos0(end))]; + end + end +end + +%%------------------------------------------------------------------------- +function newstr=escapejsonstring(str) +newstr=str; +isoct=exist('OCTAVE_VERSION','builtin'); +if(isoct) + vv=sscanf(OCTAVE_VERSION,'%f'); + if(vv(1)>=3.8) + isoct=0; + end +end +if(isoct) + escapechars={'\\','\"','\/','\a','\f','\n','\r','\t','\v'}; + for i=1:length(escapechars); + newstr=regexprep(newstr,escapechars{i},escapechars{i}); + end + newstr=regexprep(newstr,'\\\\(u[0-9a-fA-F]{4}[^0-9a-fA-F]*)','\$1'); +else + escapechars={'\\','\"','\/','\a','\b','\f','\n','\r','\t','\v'}; + for i=1:length(escapechars); + newstr=regexprep(newstr,escapechars{i},regexprep(escapechars{i},'\\','\\\\')); + end + newstr=regexprep(newstr,'\\\\(u[0-9a-fA-F]{4}[^0-9a-fA-F]*)','\\$1'); +end diff --git a/jsonlab-1.5/saveubjson.m b/jsonlab-1.5/saveubjson.m new file mode 100644 index 0000000..66b3d2c --- /dev/null +++ b/jsonlab-1.5/saveubjson.m @@ -0,0 +1,562 @@ +function json=saveubjson(rootname,obj,varargin) +% +% json=saveubjson(rootname,obj,filename) +% or +% json=saveubjson(rootname,obj,opt) +% json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...) +% +% convert a MATLAB object (cell, struct or array) into a Universal +% Binary JSON (UBJSON) binary string +% +% author: Qianqian Fang (q.fang neu.edu) +% created on 2013/08/17 +% +% $Id$ +% +% input: +% rootname: the name of the root-object, when set to '', the root name +% is ignored, however, when opt.ForceRootName is set to 1 (see below), +% the MATLAB variable name will be used as the root name. +% obj: a MATLAB object (array, cell, cell array, struct, struct array, +% class instance) +% filename: a string for the file name to save the output UBJSON data +% opt: a struct for additional options, ignore to use default values. +% opt can have the following fields (first in [.|.] is the default) +% +% opt.FileName [''|string]: a file name to save the output JSON data +% opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D +% array in JSON array format; if sets to 1, an +% array will be shown as a struct with fields +% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for +% sparse arrays, the non-zero elements will be +% saved to _ArrayData_ field in triplet-format i.e. +% (ix,iy,val) and "_ArrayIsSparse_" will be added +% with a value of 1; for a complex array, the +% _ArrayData_ array will include two columns +% (4 for sparse) to record the real and imaginary +% parts, and also "_ArrayIsComplex_":1 is added. +% opt.ParseLogical [1|0]: if this is set to 1, logical array elem +% will use true/false rather than 1/0. +% opt.SingletArray [0|1]: if this is set to 1, arrays with a single +% numerical element will be shown without a square +% bracket, unless it is the root object; if 0, square +% brackets are forced for any numerical arrays. +% opt.SingletCell [1|0]: if 1, always enclose a cell with "[]" +% even it has only one element; if 0, brackets +% are ignored when a cell has only 1 element. +% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson +% will use the name of the passed obj variable as the +% root object name; if obj is an expression and +% does not have a name, 'root' will be used; if this +% is set to 0 and rootname is empty, the root level +% will be merged down to the lower level. +% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), +% for example, if opt.JSON='foo', the JSON data is +% wrapped inside a function call as 'foo(...);' +% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson +% back to the string form +% +% opt can be replaced by a list of ('param',value) pairs. The param +% string is equivallent to a field in opt and is case sensitive. +% output: +% json: a binary string in the UBJSON format (see http://ubjson.org) +% +% examples: +% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... +% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... +% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... +% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... +% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... +% 'SpecialData',[nan, inf, -inf]); +% saveubjson('jsonmesh',jsonmesh) +% saveubjson('jsonmesh',jsonmesh,'meshdata.ubj') +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(nargin==1) + varname=inputname(1); + obj=rootname; + if(isempty(varname)) + varname='root'; + end + rootname=varname; +else + varname=inputname(2); +end +if(length(varargin)==1 && ischar(varargin{1})) + opt=struct('filename',varargin{1}); +else + opt=varargin2struct(varargin{:}); +end +opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +if(isfield(opt,'norowbracket')) + warning('Option ''NoRowBracket'' is depreciated, please use ''SingletArray'' and set its value to not(NoRowBracket)'); + if(~isfield(opt,'singletarray')) + opt.singletarray=not(opt.norowbracket); + end +end +rootisarray=0; +rootlevel=1; +forceroot=jsonopt('ForceRootName',0,opt); +if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || ... + iscell(obj) || isobject(obj)) && isempty(rootname) && forceroot==0) + rootisarray=1; + rootlevel=0; +else + if(isempty(rootname)) + rootname=varname; + end +end +if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) + rootname='root'; +end +json=obj2ubjson(rootname,obj,rootlevel,opt); +if(~rootisarray) + json=['{' json '}']; +end + +jsonp=jsonopt('JSONP','',opt); +if(~isempty(jsonp)) + json=[jsonp '(' json ')']; +end + +% save to a file if FileName is set, suggested by Patrick Rapin +filename=jsonopt('FileName','',opt); +if(~isempty(filename)) + fid = fopen(filename, 'wb'); + fwrite(fid,json); + fclose(fid); +end + +%%------------------------------------------------------------------------- +function txt=obj2ubjson(name,item,level,varargin) + +if(iscell(item)) + txt=cell2ubjson(name,item,level,varargin{:}); +elseif(isstruct(item)) + txt=struct2ubjson(name,item,level,varargin{:}); +elseif(ischar(item)) + txt=str2ubjson(name,item,level,varargin{:}); +elseif(isobject(item)) + txt=matlabobject2ubjson(name,item,level,varargin{:}); +else + txt=mat2ubjson(name,item,level,varargin{:}); +end + +%%------------------------------------------------------------------------- +function txt=cell2ubjson(name,item,level,varargin) +txt=''; +if(~iscell(item)) + error('input is not a cell'); +end + +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +bracketlevel=~jsonopt('singletcell',1,varargin{:}); +len=numel(item); % let's handle 1D cell first +if(len>bracketlevel) + if(~isempty(name)) + txt=[N_(checkname(name,varargin{:})) '[']; name=''; + else + txt='['; + end +elseif(len==0) + if(~isempty(name)) + txt=[N_(checkname(name,varargin{:})) 'Z']; name=''; + else + txt='Z'; + end +end +for j=1:dim(2) + if(dim(1)>1) + txt=[txt '[']; + end + for i=1:dim(1) + txt=[txt obj2ubjson(name,item{i,j},level+(len>bracketlevel),varargin{:})]; + end + if(dim(1)>1) + txt=[txt ']']; + end +end +if(len>bracketlevel) + txt=[txt ']']; +end + +%%------------------------------------------------------------------------- +function txt=struct2ubjson(name,item,level,varargin) +txt=''; +if(~isstruct(item)) + error('input is not a struct'); +end +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); +forcearray= (len>1 || (jsonopt('SingletArray',0,varargin{:})==1 && level>0)); + +if(~isempty(name)) + if(forcearray) + txt=[N_(checkname(name,varargin{:})) '[']; + end +else + if(forcearray) + txt='['; + end +end +for j=1:dim(2) + if(dim(1)>1) + txt=[txt '[']; + end + for i=1:dim(1) + names = fieldnames(item(i,j)); + if(~isempty(name) && len==1 && ~forcearray) + txt=[txt N_(checkname(name,varargin{:})) '{']; + else + txt=[txt '{']; + end + if(~isempty(names)) + for e=1:length(names) + txt=[txt obj2ubjson(names{e},item(i,j).(names{e}),... + level+(dim(1)>1)+1+forcearray,varargin{:})]; + end + end + txt=[txt '}']; + end + if(dim(1)>1) + txt=[txt ']']; + end +end +if(forcearray) + txt=[txt ']']; +end + +%%------------------------------------------------------------------------- +function txt=str2ubjson(name,item,level,varargin) +txt=''; +if(~ischar(item)) + error('input is not a string'); +end +item=reshape(item, max(size(item),[1 0])); +len=size(item,1); + +if(~isempty(name)) + if(len>1) + txt=[N_(checkname(name,varargin{:})) '[']; + end +else + if(len>1) + txt='['; + end +end +for e=1:len + val=item(e,:); + if(len==1) + obj=[N_(checkname(name,varargin{:})) '' '',S_(val),'']; + if(isempty(name)) + obj=['',S_(val),'']; + end + txt=[txt,'',obj]; + else + txt=[txt,'',['',S_(val),'']]; + end +end +if(len>1) + txt=[txt ']']; +end + +%%------------------------------------------------------------------------- +function txt=mat2ubjson(name,item,level,varargin) +if(~isnumeric(item) && ~islogical(item)) + error('input is not an array'); +end + +if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... + (isempty(item) && any(size(item))) ||jsonopt('ArrayToStruct',0,varargin{:})) + cid=I_(uint32(max(size(item)))); + if(isempty(name)) + txt=['{' N_('_ArrayType_'),S_(class(item)),N_('_ArraySize_'),I_a(size(item),cid(1)) ]; + else + if(isempty(item)) + txt=[N_(checkname(name,varargin{:})),'Z']; + return; + else + txt=[N_(checkname(name,varargin{:})),'{',N_('_ArrayType_'),S_(class(item)),N_('_ArraySize_'),I_a(size(item),cid(1))]; + end + end +else + if(isempty(name)) + txt=matdata2ubjson(item,level+1,varargin{:}); + else + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0) + numtxt=regexprep(regexprep(matdata2ubjson(item,level+1,varargin{:}),'^\[',''),']',''); + txt=[N_(checkname(name,varargin{:})) numtxt]; + else + txt=[N_(checkname(name,varargin{:})),matdata2ubjson(item,level+1,varargin{:})]; + end + end + return; +end +if(issparse(item)) + [ix,iy]=find(item); + data=full(item(find(item))); + if(~isreal(item)) + data=[real(data(:)),imag(data(:))]; + if(size(item,1)==1) + % Kludge to have data's 'transposedness' match item's. + % (Necessary for complex row vector handling below.) + data=data'; + end + txt=[txt,N_('_ArrayIsComplex_'),'T']; + end + txt=[txt,N_('_ArrayIsSparse_'),'T']; + if(size(item,1)==1) + % Row vector, store only column indices. + txt=[txt,N_('_ArrayData_'),... + matdata2ubjson([iy(:),data'],level+2,varargin{:})]; + elseif(size(item,2)==1) + % Column vector, store only row indices. + txt=[txt,N_('_ArrayData_'),... + matdata2ubjson([ix,data],level+2,varargin{:})]; + else + % General case, store row and column indices. + txt=[txt,N_('_ArrayData_'),... + matdata2ubjson([ix,iy,data],level+2,varargin{:})]; + end +else + if(isreal(item)) + txt=[txt,N_('_ArrayData_'),... + matdata2ubjson(item(:)',level+2,varargin{:})]; + else + txt=[txt,N_('_ArrayIsComplex_'),'T']; + txt=[txt,N_('_ArrayData_'),... + matdata2ubjson([real(item(:)) imag(item(:))],level+2,varargin{:})]; + end +end +txt=[txt,'}']; + +%%------------------------------------------------------------------------- +function txt=matlabobject2ubjson(name,item,level,varargin) +if numel(item) == 0 %empty object + st = struct(); +else + % "st = struct(item);" would produce an inmutable warning, because it + % make the protected and private properties visible. Instead we get the + % visible properties + propertynames = properties(item); + for p = 1:numel(propertynames) + for o = numel(item):-1:1 % aray of objects + st(o).(propertynames{p}) = item(o).(propertynames{p}); + end + end +end +txt=struct2ubjson(name,st,level,varargin{:}); + +%%------------------------------------------------------------------------- +function txt=matdata2ubjson(mat,level,varargin) +if(isempty(mat)) + txt='Z'; + return; +end +type=''; +hasnegtive=(mat<0); +if(isa(mat,'integer') || isinteger(mat) || (isfloat(mat) && all(mod(mat(:),1) == 0))) + if(isempty(hasnegtive)) + if(max(mat(:))<=2^8) + type='U'; + end + end + if(isempty(type)) + % todo - need to consider negative ones separately + id= histc(abs(max(mat(:))),[0 2^7 2^15 2^31 2^63]); + if(isempty(id~=0)) + error('high-precision data is not yet supported'); + end + key='iIlL'; + type=key(id~=0); + end + txt=[I_a(mat(:),type,size(mat))]; +elseif(islogical(mat)) + logicalval='FT'; + if(numel(mat)==1) + txt=logicalval(mat+1); + else + txt=['[$U#' I_a(size(mat),'l') typecast(swapbytes(uint8(mat(:)')),'uint8')]; + end +else + if(numel(mat)==1) + txt=['[' D_(mat) ']']; + else + txt=D_a(mat(:),'D',size(mat)); + end +end + +%txt=regexprep(mat2str(mat),'\s+',','); +%txt=regexprep(txt,';',sprintf('],[')); +% if(nargin>=2 && size(mat,1)>1) +% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); +% end +if(any(isinf(mat(:)))) + txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); +end +if(any(isnan(mat(:)))) + txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); +end + +%%------------------------------------------------------------------------- +function newname=checkname(name,varargin) +isunpack=jsonopt('UnpackHex',1,varargin{:}); +newname=name; +if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) + return +end +if(isunpack) + isoct=jsonopt('IsOctave',0,varargin{:}); + if(~isoct) + newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); + else + pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); + pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); + if(isempty(pos)) + return; + end + str0=name; + pos0=[0 pend(:)' length(name)]; + newname=''; + for i=1:length(pos) + newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; + end + if(pos(end)~=length(name)) + newname=[newname str0(pos0(end-1)+1:pos0(end))]; + end + end +end +%%------------------------------------------------------------------------- +function val=N_(str) +val=[I_(int32(length(str))) str]; +%%------------------------------------------------------------------------- +function val=S_(str) +if(length(str)==1) + val=['C' str]; +else + val=['S' I_(int32(length(str))) str]; +end +%%------------------------------------------------------------------------- +function val=I_(num) +if(~isinteger(num)) + error('input is not an integer'); +end +if(num>=0 && num<255) + val=['U' data2byte(swapbytes(cast(num,'uint8')),'uint8')]; + return; +end +key='iIlL'; +cid={'int8','int16','int32','int64'}; +for i=1:4 + if((num>0 && num<2^(i*8-1)) || (num<0 && num>=-2^(i*8-1))) + val=[key(i) data2byte(swapbytes(cast(num,cid{i})),'uint8')]; + return; + end +end +error('unsupported integer'); + +%%------------------------------------------------------------------------- +function val=D_(num) +if(~isfloat(num)) + error('input is not a float'); +end + +if(isa(num,'single')) + val=['d' data2byte(swapbytes(num),'uint8')]; +else + val=['D' data2byte(swapbytes(num),'uint8')]; +end +%%------------------------------------------------------------------------- +function data=I_a(num,type,dim,format) +id=find(ismember('iUIlL',type)); + +if(id==0) + error('unsupported integer array'); +end + +% based on UBJSON specs, all integer types are stored in big endian format + +if(id==1) + data=data2byte(swapbytes(int8(num)),'uint8'); + blen=1; +elseif(id==2) + data=data2byte(swapbytes(uint8(num)),'uint8'); + blen=1; +elseif(id==3) + data=data2byte(swapbytes(int16(num)),'uint8'); + blen=2; +elseif(id==4) + data=data2byte(swapbytes(int32(num)),'uint8'); + blen=4; +elseif(id==5) + data=data2byte(swapbytes(int64(num)),'uint8'); + blen=8; +end + +if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) + format='opt'; +end +if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) + if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) + cid=I_(uint32(max(dim))); + data=['$' type '#' I_a(dim,cid(1)) data(:)']; + else + data=['$' type '#' I_(int32(numel(data)/blen)) data(:)']; + end + data=['[' data(:)']; +else + data=reshape(data,blen,numel(data)/blen); + data(2:blen+1,:)=data; + data(1,:)=type; + data=data(:)'; + data=['[' data(:)' ']']; +end +%%------------------------------------------------------------------------- +function data=D_a(num,type,dim,format) +id=find(ismember('dD',type)); + +if(id==0) + error('unsupported float array'); +end + +if(id==1) + data=data2byte(swapbytes(single(num)),'uint8'); +elseif(id==2) + data=data2byte(swapbytes(double(num)),'uint8'); +end + +if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) + format='opt'; +end +if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) + if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) + cid=I_(uint32(max(dim))); + data=['$' type '#' I_a(dim,cid(1)) data(:)']; + else + data=['$' type '#' I_(int32(numel(data)/(id*4))) data(:)']; + end + data=['[' data]; +else + data=reshape(data,(id*4),length(data)/(id*4)); + data(2:(id*4+1),:)=data; + data(1,:)=type; + data=data(:)'; + data=['[' data(:)' ']']; +end +%%------------------------------------------------------------------------- +function bytes=data2byte(varargin) +bytes=typecast(varargin{:}); +bytes=bytes(:)'; diff --git a/jsonlab-1.5/struct2jdata.m b/jsonlab-1.5/struct2jdata.m new file mode 100644 index 0000000..8980dfe --- /dev/null +++ b/jsonlab-1.5/struct2jdata.m @@ -0,0 +1,96 @@ +function newdata=struct2jdata(data,varargin) +% +% newdata=struct2jdata(data,opt,...) +% +% convert a JData object (in the form of a struct array) into an array +% +% authors:Qianqian Fang (q.fang neu.edu) +% +% input: +% data: a struct array. If data contains JData keywords in the first +% level children, these fields are parsed and regrouped into a +% data object (arrays, trees, graphs etc) based on JData +% specification. The JData keywords are +% "_ArrayType_", "_ArraySize_", "_ArrayData_" +% "_ArrayIsSparse_", "_ArrayIsComplex_" +% opt: (optional) a list of 'Param',value pairs for additional options +% The supported options include +% 'Recursive', if set to 1, will apply the conversion to +% every child; 0 to disable +% +% output: +% newdata: the covnerted data if the input data does contain a JData +% structure; otherwise, the same as the input. +% +% examples: +% obj=struct('_ArrayType_','double','_ArraySize_',[2 3], +% '_ArrayIsSparse_',1 ,'_ArrayData_',null); +% ubjdata=struct2jdata(obj); +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +fn=fieldnames(data); +newdata=data; +len=length(data); +if(jsonopt('Recursive',0,varargin{:})==1) + for i=1:length(fn) % depth-first + for j=1:len + if(isstruct(getfield(data(j),fn{i}))) + newdata(j)=setfield(newdata(j),fn{i},jstruct2array(getfield(data(j),fn{i}))); + end + end + end +end +if(~isempty(strmatch('x0x5F_ArrayType_',fn)) && ~isempty(strmatch('x0x5F_ArrayData_',fn))) + newdata=cell(len,1); + for j=1:len + ndata=cast(data(j).x0x5F_ArrayData_,data(j).x0x5F_ArrayType_); + iscpx=0; + if(~isempty(strmatch('x0x5F_ArrayIsComplex_',fn))) + if(data(j).x0x5F_ArrayIsComplex_) + iscpx=1; + end + end + if(~isempty(strmatch('x0x5F_ArrayIsSparse_',fn))) + if(data(j).x0x5F_ArrayIsSparse_) + if(~isempty(strmatch('x0x5F_ArraySize_',fn))) + dim=double(data(j).x0x5F_ArraySize_); + if(iscpx && size(ndata,2)==4-any(dim==1)) + ndata(:,end-1)=complex(ndata(:,end-1),ndata(:,end)); + end + if isempty(ndata) + % All-zeros sparse + ndata=sparse(dim(1),prod(dim(2:end))); + elseif dim(1)==1 + % Sparse row vector + ndata=sparse(1,ndata(:,1),ndata(:,2),dim(1),prod(dim(2:end))); + elseif dim(2)==1 + % Sparse column vector + ndata=sparse(ndata(:,1),1,ndata(:,2),dim(1),prod(dim(2:end))); + else + % Generic sparse array. + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3),dim(1),prod(dim(2:end))); + end + else + if(iscpx && size(ndata,2)==4) + ndata(:,3)=complex(ndata(:,3),ndata(:,4)); + end + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3)); + end + end + elseif(~isempty(strmatch('x0x5F_ArraySize_',fn))) + if(iscpx && size(ndata,2)==2) + ndata=complex(ndata(:,1),ndata(:,2)); + end + ndata=reshape(ndata(:),data(j).x0x5F_ArraySize_); + end + newdata{j}=ndata; + end + if(len==1) + newdata=newdata{1}; + end +end \ No newline at end of file diff --git a/jsonlab-1.5/varargin2struct.m b/jsonlab-1.5/varargin2struct.m new file mode 100644 index 0000000..9d4acf7 --- /dev/null +++ b/jsonlab-1.5/varargin2struct.m @@ -0,0 +1,40 @@ +function opt=varargin2struct(varargin) +% +% opt=varargin2struct('param1',value1,'param2',value2,...) +% or +% opt=varargin2struct(...,optstruct,...) +% +% convert a series of input parameters into a structure +% +% authors:Qianqian Fang (q.fang neu.edu) +% date: 2012/12/22 +% +% input: +% 'param', value: the input parameters should be pairs of a string and a value +% optstruct: if a parameter is a struct, the fields will be merged to the output struct +% +% output: +% opt: a struct where opt.param1=value1, opt.param2=value2 ... +% +% license: +% BSD License, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +len=length(varargin); +opt=struct; +if(len==0) return; end +i=1; +while(i<=len) + if(isstruct(varargin{i})) + opt=mergestruct(opt,varargin{i}); + elseif(ischar(varargin{i}) && i Set Path ...). + +2) Open the Simulink library browser, and look for "Real-Time Pacer" in the + list of blocksets. + +For an example model that uses these blocks, see realtime_pacer_example.mdl + +---- + diff --git a/src/RealTime_Pacer/license.txt b/src/RealTime_Pacer/license.txt new file mode 100644 index 0000000..cae4cd5 --- /dev/null +++ b/src/RealTime_Pacer/license.txt @@ -0,0 +1,27 @@ +Copyright (c) 2016, The MathWorks, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * In all cases, the software is, and all modifications and derivatives + of the software shall be, licensed to you solely for use in conjunction + with MathWorks products and service offerings. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/src/RealTime_Pacer/msfun_realtime_elapsed.m b/src/RealTime_Pacer/msfun_realtime_elapsed.m new file mode 100644 index 0000000..dd7747a --- /dev/null +++ b/src/RealTime_Pacer/msfun_realtime_elapsed.m @@ -0,0 +1,61 @@ +function msfun_realtime_elapsed(block) +% Help for Writing Level-2 M-File S-Functions: +% web([docroot '/toolbox/simulink/sfg/f7-67622.html'] +% http://www.mathworks.com/access/helpdesk/help/toolbox/simulink/sfg/f7-67622.html + +% Copyright 2009, The MathWorks, Inc. + +% instance variables +myRealTimeBaseline = 0; + +setup(block); + +%% --------------------------------------------------- + function setup(block) + % Register the number of ports. + block.NumInputPorts = 0; + block.NumOutputPorts = 1; + + block.SetPreCompOutPortInfoToDynamic; + block.OutputPort(1).Dimensions = 1; + block.OutputPort(1).SamplingMode = 'sample'; + + % Set up the states + block.NumContStates = 0; + block.NumDworks = 0; + + % Register the parameters. + block.NumDialogPrms = 0; % scale factor + + % Block is fixed in minor time step, i.e., it is only executed on major + % time steps. With a fixed-step solver, the block runs at the fastest + % discrete rate. + block.SampleTimes = [0 1]; + + block.SetAccelRunOnTLC(false); % run block in interpreted mode even w/ Acceleration + + % methods called at run-time + block.RegBlockMethod('Start', @Start); + block.RegBlockMethod('Outputs', @Output); + block.RegBlockMethod('SimStatusChange', @SimStatusChange); + end + +%% + function Start(block) %#ok + myRealTimeBaseline = tic; + end + +%% + function Output(block) + block.OutputPort(1).Data = toc(myRealTimeBaseline); + end + +%% + function SimStatusChange(block, status) %#ok + if status == 1, % resume + myRealTimeBaseline = tic; + end + end + +end + diff --git a/src/RealTime_Pacer/msfun_realtime_pacer.m b/src/RealTime_Pacer/msfun_realtime_pacer.m new file mode 100644 index 0000000..1cb5675 --- /dev/null +++ b/src/RealTime_Pacer/msfun_realtime_pacer.m @@ -0,0 +1,115 @@ +function msfun_realtime_pacer(block) +% Help for Writing Level-2 M-File S-Functions: +% web([docroot '/toolbox/simulink/sfg/f7-67622.html'] +% http://www.mathworks.com/access/helpdesk/help/toolbox/simulink/sfg/f7-67622.html + +% Copyright 2009, The MathWorks, Inc. + +% instance variables +mySimTimePerRealTime = 1; +myRealTimeBaseline = 0; +mySimulationTimeBaseline = 0; +myResetBaseline = true; +myTotalBurnedTime = 0; +myNumUpdates = 0; + +setup(block); + +%% --------------------------------------------------- + function setup(block) + % Register the number of ports. + block.NumInputPorts = 0; + block.NumOutputPorts = 0; + + % Set up the states + block.NumContStates = 0; + block.NumDworks = 0; + + % Register the parameters. + block.NumDialogPrms = 1; % scale factor + block.DialogPrmsTunable = {'Nontunable'}; + + % Block is fixed in minor time step, i.e., it is only executed on major + % time steps. With a fixed-step solver, the block runs at the fastest + % discrete rate. + block.SampleTimes = [0 1]; + + block.SetAccelRunOnTLC(false); % run block in interpreted mode even w/ Acceleration + + % methods called during update diagram/compilation. + block.RegBlockMethod('CheckParameters', @CheckPrms); + + % methods called at run-time + block.RegBlockMethod('Start', @Start); + block.RegBlockMethod('Update', @Update); + block.RegBlockMethod('SimStatusChange', @SimStatusChange); + block.RegBlockMethod('Terminate', @Terminate); + end + +%% + function CheckPrms(block) + try + validateattributes(block.DialogPrm(1).Data, {'double'},{'real', 'scalar', '>', 0}); + catch %#ok + throw(MSLException(block.BlockHandle, ... + 'Simulink:Parameters:BlkParamUndefined', ... + 'Enter a number greater than 0')); + end + end + +%% + function Start(block) + mySimTimePerRealTime = block.DialogPrm(1).Data; + myTotalBurnedTime = 0; + myNumUpdates = 0; + myResetBaseline = true; + if strcmp(pause('query'),'off') + fprintf('%s: Enabling MATLAB PAUSE command\n', getfullname(block.BlockHandle)); + pause('on'); + end + end + +%% + function Update(block) + if myResetBaseline + myRealTimeBaseline = tic; + mySimulationTimeBaseline = block.CurrentTime; + myResetBaseline = false; + else + if isinf(mySimTimePerRealTime) + return; + end + elapsedRealTime = toc(myRealTimeBaseline); + differenceInSeconds = ((block.CurrentTime - mySimulationTimeBaseline) / mySimTimePerRealTime) - elapsedRealTime; + if differenceInSeconds >= 0 + pause(differenceInSeconds); + myTotalBurnedTime = myTotalBurnedTime + differenceInSeconds; + myNumUpdates = myNumUpdates + 1; + end + end + end + +%% + function SimStatusChange(block, status) + if status == 0, + % simulation paused + fprintf('%s: Pausing real time execution of the model (simulation time = %g sec)\n', ... + getfullname(block.BlockHandle), block.CurrentTime); + elseif status == 1 + % Simulation resumed + fprintf('%s: Continuing real time execution of the model\n', ... + getfullname(block.BlockHandle)); + myResetBaseline = true; + end + end + +%% + function Terminate(block) + if myNumUpdates > 0 + fprintf('%s: Average idle real time per major time step = %g sec\n', ... + getfullname(block.BlockHandle), myTotalBurnedTime / myNumUpdates); + end + end + +end + diff --git a/src/RealTime_Pacer/realtime_pacer_example.mdl b/src/RealTime_Pacer/realtime_pacer_example.mdl new file mode 100644 index 0000000..d70a558 --- /dev/null +++ b/src/RealTime_Pacer/realtime_pacer_example.mdl @@ -0,0 +1,840 @@ +Model { + Name "realtime_pacer_example" + Version 7.5 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.29" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "windows-1252" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + MaxMDLFileLineLength 120 + Created "Mon Oct 04 11:17:27 2010" + Creator "gvallabh" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "gvallabh" + ModifiedDateFormat "%" + LastModifiedDate "Thu Oct 21 14:49:56 2010" + RTWModifiedTimeStamp 209573288 + ModelVersionFormat "1.%" + ConfigurationManager "None" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "none" + WideLines off + ShowLineDimensions off + ShowPortDataTypes off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip off + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "normal" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect on + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 1 + Version "1.10.0" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 2 + Version "1.10.0" + StartTime "0.0" + StopTime "5" + AbsTol "auto" + FixedStep "0.05" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + Solver "ode3" + SolverName "ode3" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 3 + Version "1.10.0" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xFinal" + InitialState "xInitial" + LimitDataPoints on + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 4 + Version "1.10.0" + Array { + Type "Cell" + Dimension 7 + Cell "BooleansAsBitfields" + Cell "PassReuseOutputArgsAs" + Cell "PassReuseOutputArgsThreshold" + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "OptimizeModelRefInitCode" + Cell "NoFixptDivByZeroProtection" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType on + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + EnforceIntegerDowncast on + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero off + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + } + Simulink.DebuggingCC { + $ObjectID 5 + Version "1.10.0" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "warning" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "UseLocalSettings" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + SolverPrmCheckMsg "warning" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "error" + MultiTaskCondExecSysMsg "error" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "Use local settings" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + } + Simulink.HardwareCC { + $ObjectID 6 + Version "1.10.0" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown off + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 7 + Version "1.10.0" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 8 + Version "1.10.0" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 9 + Version "1.10.0" + Array { + Type "Cell" + Dimension 6 + Cell "IncludeHyperlinkInReport" + Cell "GenerateTraceInfo" + Cell "GenerateTraceReport" + Cell "GenerateTraceReportSl" + Cell "GenerateTraceReportSf" + Cell "GenerateTraceReportEml" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 10 + Version "1.10.0" + Array { + Type "Cell" + Dimension 19 + Cell "IgnoreCustomStorageClasses" + Cell "IgnoreTestpoints" + Cell "InsertBlockDesc" + Cell "SFDataObjDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrFcnArg" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + Cell "ReqsInCode" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + SimulinkBlockComments on + EnableCustomComments off + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 11 + Version "1.10.0" + Array { + Type "Cell" + Dimension 17 + Cell "GeneratePreprocessorConditionals" + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "ModelStepFunctionPrototypeControlCompliant" + Cell "CPPClassGenCompliant" + Cell "MultiInstanceERTCode" + Cell "PurelyIntegerCode" + Cell "SupportNonFinite" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + Cell "SupportNonInlinedSFcns" + Cell "PortableWordSizes" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_table_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + TargetFunctionLibrary "ANSI_C" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + ERTCodeCoverageTool "None" + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + PortableWordSizes off + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition " [ 520, 285, 1543, 940 ] " + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 1 + } + WSMdlFileData "DataTag0" + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + BlockParameterDefaults { + Block { + BlockType Clock + DisplayTime off + } + Block { + BlockType Display + Format "short" + Decimation "10" + Floating off + SampleTime "-1" + } + Block { + BlockType Scope + ModelBased off + TickLabels "OneTimeTick" + ZoomMode "on" + Grid "on" + TimeRange "auto" + YMin "-5" + YMax "5" + SaveToWorkspace off + SaveName "ScopeData" + LimitDataPoints on + MaxDataPoints "5000" + Decimation "1" + SampleInput off + SampleTime "-1" + } + Block { + BlockType Sin + SineType "Time based" + TimeSource "Use simulation time" + SampleTime "-1" + VectorParams1D on + } + Block { + BlockType Sum + IconShape "rectangular" + Inputs "++" + CollapseMode "All dimensions" + CollapseDim "1" + InputSameDT on + AccumDataTypeStr "Inherit: Inherit via internal rule" + OutMin "[]" + OutMax "[]" + OutDataTypeMode "Same as first input" + OutDataType "fixdt(1,16,0)" + OutScaling "[]" + OutDataTypeStr "Inherit: Same as first input" + LockScale off + RndMeth "Floor" + SaturateOnIntegerOverflow on + SampleTime "-1" + } + } + System { + Name "realtime_pacer_example" + Location [745, 193, 1567, 855] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark 43 + Block { + BlockType Clock + Name "Clock" + SID 6 + Position [90, 245, 110, 265] + Decimation "10" + } + Block { + BlockType Display + Name "Elapsed Real Time" + SID 36 + Ports [1] + Position [275, 320, 365, 350] + Decimation "2" + Lockdown off + } + Block { + BlockType Reference + Name "Elapsed Real Time1" + SID 43 + Ports [0, 1] + Position [65, 306, 165, 364] + BackgroundColor "yellow" + ShowName off + LibraryVersion "1.9" + SourceBlock "realtime_pacer_lib/Elapsed Real Time" + SourceType "RealTime_Elapsed" + } + Block { + BlockType Display + Name "Elapsed Simulation Time" + SID 5 + Ports [1] + Position [275, 240, 365, 270] + Decimation "2" + Lockdown off + } + Block { + BlockType Reference + Name "Real-Time Pacer" + SID 30 + Ports [] + Position [65, 54, 167, 111] + BackgroundColor "yellow" + DropShadow on + ShowName off + LibraryVersion "1.9" + SourceBlock "realtime_pacer_lib/Real-Time Pacer" + SourceType "RealTime_Pacer" + simTimePerRealTime "1" + } + Block { + BlockType Scope + Name "Scope1" + SID 17 + Ports [1] + Position [295, 169, 325, 201] + Floating off + Location [188, 390, 512, 629] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + SaveName "ScopeData1" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Scope + Name "Scope2" + SID 32 + Ports [1] + Position [505, 399, 535, 431] + Floating off + Location [86, 193, 679, 505] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + YMin "-0.08" + YMax "-0.01" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Sin + Name "Sine Wave1" + SID 27 + Ports [0, 1] + Position [90, 170, 120, 200] + Amplitude "1" + Bias "0" + Frequency "2*pi*0.5" + Phase "0" + Samples "10" + Offset "0" + SampleTime "0" + } + Block { + BlockType Sum + Name "Subtract" + SID 42 + Ports [2, 1] + Position [245, 397, 275, 428] + Inputs "+-" + InputSameDT off + OutDataTypeMode "Inherit via internal rule" + OutDataType "fixdt(1, 16)" + OutScaling "2^-10" + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + Port { + PortNumber 1 + Name "Simulated - Real Time (seconds)" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + } + Line { + SrcBlock "Clock" + SrcPort 1 + Points [90, 0] + Branch { + DstBlock "Elapsed Simulation Time" + DstPort 1 + } + Branch { + Points [0, 150] + DstBlock "Subtract" + DstPort 1 + } + } + Line { + SrcBlock "Sine Wave1" + SrcPort 1 + DstBlock "Scope1" + DstPort 1 + } + Line { + Name "Simulated - Real Time (seconds)" + Labels [1, 1] + SrcBlock "Subtract" + SrcPort 1 + DstBlock "Scope2" + DstPort 1 + } + Line { + SrcBlock "Elapsed Real Time1" + SrcPort 1 + Points [50, 0] + Branch { + DstBlock "Elapsed Real Time" + DstPort 1 + } + Branch { + Points [0, 85] + DstBlock "Subtract" + DstPort 2 + } + } + Annotation { + Position [256, 349] + } + } +} +MatData { + NumRecords 1 + DataRecord { + Tag DataTag0 + Data " %)30 . P 8 ( @ % \" $ ! 0 % 0 !@ $ , 3F%M90" + " 5F%L=64 X P !@ @ $ 4 ( 0 , ! ! P!687( #@ #@ & \" 8" + " !0 @ ! 0 $ \"0 @ " + } +} diff --git a/src/RealTime_Pacer/realtime_pacer_help.html b/src/RealTime_Pacer/realtime_pacer_help.html new file mode 100644 index 0000000..7e343db --- /dev/null +++ b/src/RealTime_Pacer/realtime_pacer_help.html @@ -0,0 +1,40 @@ + + + +

RealTime Pacer

+

Slow down a simulation to track real (i.e., wall clock) elapsed time.

+ +

Description

+

The RealTime Pacer block slows down ("paces") simulation time to track real elapsed time. The degree of slowdown +is controllable via the Speedup parameter. To use this block, copy it anywhere in your model (it does not need +to be at the top level).

+

Some points to keep in mind when using the RealTime Pacer block:

+
    +
  1. The block relies on slowing down a simulation to make it match real time. If your model involves a lot of + computation so that 1 second of simulation time requires more than 1 second of real time, this block will not + have any effect.
  2. +
  3. The block uses the MATLAB PAUSE function to slow down the simulation. The PAUSE command gives + up the processor during the pause, so system performance does not degrade.
  4. +
  5. The matching between simulation time and elapsed real time is approximate, with expected differences on + the order of 10 to 30 milliseconds. This limitation is due to difficulties of precise timing with a multitasking + operating system.
  6. +
  7. The block does not support code generation.
  8. +
+The RealTime Pacer block works on all supported Simulink platforms. + +

Parameters

+

Speedup

+Speedup specifies the ratio between simulation time and real time. +
    +
  • Speedup can be any real value greater than zero. A value less than 1 forces the real elapsed time to be greater + than the simulation time. For example, with a speedup of 0.5, 1 second of simulation time takes 2 seconds of real time.
  • +
  • Speedup = N specifies that N seconds of simulation time correspond to one second of real time
  • +
  • Speedup = inf specifies that the simulation should run normally, at full speed
  • +
+ +

Inputs and Outputs

+None. +
+ + + diff --git a/src/RealTime_Pacer/realtime_pacer_lib.mdl.r2010a b/src/RealTime_Pacer/realtime_pacer_lib.mdl.r2010a new file mode 100644 index 0000000..086e624 --- /dev/null +++ b/src/RealTime_Pacer/realtime_pacer_lib.mdl.r2010a @@ -0,0 +1,652 @@ +Library { + Name "realtime_pacer_lib" + Version 7.5 + MdlSubVersion 0 + SavedCharacterEncoding "windows-1252" + LibraryType "BlockLibrary" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + MaxMDLFileLineLength 120 + Created "Tue Oct 19 16:12:24 2010" + Creator "gvallabh" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "gvallabh" + ModifiedDateFormat "%" + LastModifiedDate "Thu Oct 21 14:48:03 2010" + RTWModifiedTimeStamp 209573280 + ModelVersionFormat "1.%" + ConfigurationManager "None" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "none" + WideLines off + ShowLineDimensions off + ShowPortDataTypes off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip off + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + RecordCoverage off + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "normal" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect on + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 1 + Version "1.10.0" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 2 + Version "1.10.0" + StartTime "0.0" + StopTime "10.0" + AbsTol "auto" + FixedStep "auto" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + Solver "ode45" + SolverName "ode45" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 3 + Version "1.10.0" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xFinal" + InitialState "xInitial" + LimitDataPoints on + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 4 + Version "1.10.0" + Array { + Type "Cell" + Dimension 7 + Cell "BooleansAsBitfields" + Cell "PassReuseOutputArgsAs" + Cell "PassReuseOutputArgsThreshold" + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "OptimizeModelRefInitCode" + Cell "NoFixptDivByZeroProtection" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType on + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + EnforceIntegerDowncast on + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero off + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + } + Simulink.DebuggingCC { + $ObjectID 5 + Version "1.10.0" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "warning" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "UseLocalSettings" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + SolverPrmCheckMsg "warning" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "error" + MultiTaskCondExecSysMsg "error" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "Use local settings" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + } + Simulink.HardwareCC { + $ObjectID 6 + Version "1.10.0" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown off + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 7 + Version "1.10.0" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 8 + Version "1.10.0" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 9 + Version "1.10.0" + Array { + Type "Cell" + Dimension 6 + Cell "IncludeHyperlinkInReport" + Cell "GenerateTraceInfo" + Cell "GenerateTraceReport" + Cell "GenerateTraceReportSl" + Cell "GenerateTraceReportSf" + Cell "GenerateTraceReportEml" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 10 + Version "1.10.0" + Array { + Type "Cell" + Dimension 19 + Cell "IgnoreCustomStorageClasses" + Cell "IgnoreTestpoints" + Cell "InsertBlockDesc" + Cell "SFDataObjDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrFcnArg" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + Cell "ReqsInCode" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + SimulinkBlockComments on + EnableCustomComments off + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 11 + Version "1.10.0" + Array { + Type "Cell" + Dimension 17 + Cell "GeneratePreprocessorConditionals" + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "ModelStepFunctionPrototypeControlCompliant" + Cell "CPPClassGenCompliant" + Cell "MultiInstanceERTCode" + Cell "PurelyIntegerCode" + Cell "SupportNonFinite" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + Cell "SupportNonInlinedSFcns" + Cell "PortableWordSizes" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_table_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + TargetFunctionLibrary "ANSI_C" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + ERTCodeCoverageTool "None" + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + PortableWordSizes off + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition " [ 520, 285, 1400, 915 ] " + } + PropName "ConfigurationSets" + } + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + BlockParameterDefaults { + Block { + BlockType "M-S-Function" + FunctionName "mlfile" + DisplayMFileStacktrace on + } + } + System { + Name "realtime_pacer_lib" + Location [222, 287, 618, 534] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark 3 + Block { + BlockType "M-S-Function" + Name "Elapsed Real Time" + SID 3 + Ports [0, 1] + Position [200, 81, 300, 139] + BackgroundColor "yellow" + ShowName off + FunctionName "msfun_realtime_elapsed" + MaskType "RealTime_Elapsed" + MaskDescription "Output the elapsed real (wall clock) time in seconds since the start or most recent conti" + "nuation of the simulation.\n\nThe accuracy of the elapsed time calculation is limited by the timing-related jitt" + "er in a multitasking operating system (typically between 10 and 30 milliseconds)." + MaskDisplay "disp('Elapsed Real Time')" + MaskIconFrame on + MaskIconOpaque on + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + } + Block { + BlockType "M-S-Function" + Name "Real-Time Pacer" + SID 2 + Ports [] + Position [50, 79, 152, 136] + BackgroundColor "yellow" + DropShadow on + ShowName off + FunctionName "msfun_realtime_pacer" + Parameters "simTimePerRealTime" + MaskType "RealTime_Pacer" + MaskDescription "Slow down a simulation to track real (i.e., wall clock) elapsed time. \n\n\"Speedup\" spe" + "cifies the ratio between simulation time and real time \n• Speedup = N => N sec. of simulation time per sec. of " + "real time\n• Speedup can be fractional (e.g., 0.5, 1.3). \n• Speedup = inf => allow simulation to run at full sp" + "eed\n\nClick on the Help button for details.\n " + MaskHelp "web('realtime_pacer_help.html', '-helpbrowser')" + MaskPromptString "Speedup (Simulation Time / Real Time):" + MaskStyleString "edit" + MaskTunableValueString "on" + MaskEnableString "on" + MaskVisibilityString "on" + MaskToolTipString "on" + MaskVariables "simTimePerRealTime=@1;" + MaskDisplay "fprintf('Real-Time Pacer\\nSpeedup = %g', simTimePerRealTime)" + MaskIconFrame on + MaskIconOpaque on + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + MaskValueString "1" + } + Annotation { + Name "Real-Time Pacer Library" + Position [183, 36] + FontName "Arial" + FontSize 12 + FontWeight "bold" + } + } +} diff --git a/src/RealTime_Pacer/realtime_pacer_lib.slx b/src/RealTime_Pacer/realtime_pacer_lib.slx new file mode 100644 index 0000000000000000000000000000000000000000..bae0b58176b3e66377c98db487538741a17811da GIT binary patch literal 16143 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 literal 0 HcmV?d00001 diff --git a/src/RealTime_Pacer/slblocks.m b/src/RealTime_Pacer/slblocks.m new file mode 100644 index 0000000..61f2fba --- /dev/null +++ b/src/RealTime_Pacer/slblocks.m @@ -0,0 +1,5 @@ +function blkStruct = slblocks + +blkStruct.Name = 'Real-Time Pacer'; +blkStruct.OpenFcn = 'realtime_pacer_lib'; +blkStruct.MaskInitialization = ''; diff --git a/src/at.m b/src/at.m new file mode 100644 index 0000000..dc2d3e3 --- /dev/null +++ b/src/at.m @@ -0,0 +1,16 @@ +%at(x, ...) returns a circular access on x, by ... +%example: x = [1 2; 3 4]; at(x, 3, 4) == 2 + +function got = at(x, varargin) + idx = varargin; + for k = 1:length(idx) + if idx{k} ~= ':' + idx{k} = mod(idx{k} - 1, size(x, k)) + 1; + end + end + if ~isempty(x) + got = x(idx{:}); + else + got = 0; + end +end \ No newline at end of file diff --git a/src/clickableLegend.m b/src/clickableLegend.m new file mode 100644 index 0000000..1dd5dc1 --- /dev/null +++ b/src/clickableLegend.m @@ -0,0 +1,200 @@ +function varargout = clickableLegend(varargin) +% clickableLegend Interactive legend for toggling or highlighting graphics +% +% clickableLegend is a wrapper around the LEGEND function that provides +% interactive display toggling or highlighting of lines or patches in a MATLAB +% plot. It enables you to, +% * Toggle (hide/show) a graphics object (or group) by clicking on an +% associated text label in the legend +% * Highlight and identify a graphics object (or group) by clicking it. +% +% Its usage is the same as the
LEGEND function with additional +% optional parameters. For further information please see the LEGEND documentation. +% +% ADDITIONAL ARGUMENTS specific to clickableLegend: +% These are passed in as parameter-value pairs +% +% * groups: A vector specifying the group membership for every line object. +% The grouping parameter lets you have a group of lines represented and +% controlled by one entry in the legend. This can be useful if you would +% like to highlight or hide a group of lines by clicking on one legend entry. +% CONSIDERATIONS: +% # The number of unique entries in the group vector must match the +% number of strings in the legend +% # When passing a vector of line/patch handles as the first input +% argument, the vector should contain all lines/patches whose group +% membership is included in the group vector. ie. the length of the +% vector of handles must match that of the length of the group vector. +% +% * displayedLines: A vector of indices corresponding to the lines or groups that +% should be displayed initially. This option is useful if there are too +% many lines in the figure and you are only interested in looking at a +% few at first. +% Example: clickableLegend(..., 'displayedLines', [4 5 6]) +% +% * plotOptions: A cell array of parameter value pairs that define +% properties of the graphics objects in the legend. This can be useful, +% for example, to ensure consistent marker sizes within the legend. +% +% Notes: +% 1. If you save the figure and re-load it, the toggling functionality +% is not automatically re-enabled. To restore it, simply call clickableLegend +% with no arguments. +% +% 2. To prevent the axis from automatically scaling every time a line is +% turned on and off, issue the command: axis manual +% +% Example 1: +% z = peaks(100); +% plot(z(:,26:5:50)) +% grid on; +% axis manual; +% clickableLegend({'Line1','Line2','Line3','Line4','Line5'}, 'Location', 'NorthWest'); +% +% Example 2: +% f = plot([1:10;1:2:20]','x'); hold on; +% g = plot(sin([1:10;1:2:20]'),'r-'); +% h = plot(11:20,rand(5,10)*5,'b:'); +% clickableLegend([f;g;h], {'Line1','Line2','Line3'},... +% 'groups', [1 1 2 2 3 3 3 3 3], 'displayedLines', [2 3]); +% +% hgsave(gcf, 'testfig.fig'); +% hgload testfig.fig +% clickableLegend +% +% See also legend, clickableLegend_examples + +% Copyright 2009-2014 MathWorks, Inc. + +% Extract any arguments for clickableLegend +[dispinds, groupmem, plotOptions, varargin] = ... + extractOptionalArgs(varargin{:}); + +% Process group memberships +[groups, plotObj, varargin] = processGroups(groupmem, varargin{:}); + +% Create legend +[varargout{1:nargout(@legend)}] = legend(varargin{:}); + +% Extract what is needed for the rest of the function and fix varargout +[leghan, objhan, plothan] = varargout{1:3}; +% objhan: strings +% plothan: graphics objects +varargout = varargout(1:nargout); + +if isempty(groupmem) % Default group membership + groupmem = 1:length(plothan); + plotObj = plothan; + groups = groupmem; +end + +if ~isempty(dispinds) % DisplayedLines parameter was specified + hidden = true(1, length(plothan)); + dispinds(dispinds>length(plothan)) = []; + hidden(dispinds) = false; +end + +% Set the callbacks & plot options +for i = 1:length(plothan) + set(objhan(i), 'HitTest', 'on', 'ButtonDownFcn',... + @(varargin)togglevisibility(objhan(i),plotObj(groupmem==groups(i))),... + 'UserData', true); + if ~isempty(dispinds) && hidden(i) + togglevisibility(objhan(i), plotObj(groupmem==groups(i))); + end + set(plotObj(groupmem==groups(i)), 'HitTest', 'on', 'ButtonDownFcn', ... + @(varargin)highlightObject(objhan(i),plothan(i),... + plotObj(groupmem==groups(i)),plotOptions),... + 'UserData', false); + if ~isempty(plotOptions) + set(plothan(i), plotOptions{:}); + end +end + + +function togglevisibility(hObject, obj) +if get(hObject, 'UserData') % It is on, turn it off + set(hObject, 'Color', (get(hObject, 'Color') + 1)/1.5, 'UserData', false); + set(obj,'HitTest','off','Visible','off','handlevisibility','off'); +else + set(hObject, 'Color', get(hObject, 'Color')*1.5 - 1, 'UserData', true); + set(obj, 'HitTest','on','visible','on','handlevisibility','on'); +end + +function highlightObject(lTextObj, lMarkerObj, plotObj, plotOptions) +lw = get(plotObj,'LineWidth'); +if ~iscell(lw), lw = {lw}; end; +ms = get(plotObj,'MarkerSize'); +if ~iscell(ms), ms = {ms}; end; + +if ~get(plotObj(1), 'UserData') % It is not selected, highlight it + %set(hObject, 'FontWeight', 'bold'); + set(lTextObj, 'EdgeColor', 'k'); + set(plotObj, {'LineWidth', 'MarkerSize'}, [cellfun(@(x)x+2, lw, 'Uniformoutput', false) cellfun(@(x)x+2, ms, 'uniformoutput', false)]); + set(plotObj, 'UserData', true); +else + %set(hObject, 'FontWeight', 'normal'); + set(lTextObj, 'EdgeColor', 'none'); + set(plotObj, {'LineWidth', 'MarkerSize'}, [cellfun(@(x)x-2, lw, 'Uniformoutput', false) cellfun(@(x)x-2, ms, 'uniformoutput', false)]); + set(plotObj, 'UserData', false); +end +if ~isempty(plotOptions) + set(lMarkerObj, plotOptions{:}); +end + +function [dispinds, groupmem, plotOpt, varargin] = extractOptionalArgs(varargin) +% Extract the displayedlines and/or groups arguments if specified + +ind = find(strcmpi(varargin,'DisplayedLines')); +if ~isempty(ind) + assert(ind 1 && ishandle(varargin{1}(1)) + if strcmpi(get(varargin{1}(1),'Type'),'axes') + hAxes = varargin{1}(1); + obj = flipud([findobj(hAxes,'Type','line');findobj(hAxes,'Type','patch')]); + else % It's a line/patch + obj = varargin{1}; + [~,firstmem] = ismember(groups, groupmem); + %for i = 1:length(groups) + % firstmem(i) = find(groupmem==groups(i),1); + %end + varargin{1} = obj(firstmem); + end +else + hAxes = gca; + obj = flipud([findobj(hAxes,'Type','line');findobj(hAxes,'Type','patch')]); +end \ No newline at end of file diff --git a/src/convp.m b/src/convp.m new file mode 100644 index 0000000..e8ccc89 --- /dev/null +++ b/src/convp.m @@ -0,0 +1,14 @@ +%iterates the convolution n times on poly (power of n) +%y = convp(x, n) +%Ex: conv(conv(x, x), x) == convp(x, 3) +function y = convp(x, n) + assert(n >= 0, 'convp n must be >= 0'); + if n == 0 + y = 1; + else + y = x; + end + for i = 2:n + y = conv(y, x); + end +end \ No newline at end of file diff --git a/src/inpaint_nans.m b/src/inpaint_nans.m new file mode 100644 index 0000000..2460b51 --- /dev/null +++ b/src/inpaint_nans.m @@ -0,0 +1 @@ +function B=inpaint_nans(A,method) % INPAINT_NANS: in-paints over nans in an array % usage: B=INPAINT_NANS(A) % default method % usage: B=INPAINT_NANS(A,method) % specify method used % % Solves approximation to one of several pdes to % interpolate and extrapolate holes in an array % % arguments (input): % A - nxm array with some NaNs to be filled in % % method - (OPTIONAL) scalar numeric flag - specifies % which approach (or physical metaphor to use % for the interpolation.) All methods are capable % of extrapolation, some are better than others. % There are also speed differences, as well as % accuracy differences for smooth surfaces. % % methods {0,1,2} use a simple plate metaphor. % method 3 uses a better plate equation, % but may be much slower and uses % more memory. % method 4 uses a spring metaphor. % method 5 is an 8 neighbor average, with no % rationale behind it compared to the % other methods. I do not recommend % its use. % % method == 0 --> (DEFAULT) see method 1, but % this method does not build as large of a % linear system in the case of only a few % NaNs in a large array. % Extrapolation behavior is linear. % % method == 1 --> simple approach, applies del^2 % over the entire array, then drops those parts % of the array which do not have any contact with % NaNs. Uses a least squares approach, but it % does not modify known values. % In the case of small arrays, this method is % quite fast as it does very little extra work. % Extrapolation behavior is linear. % % method == 2 --> uses del^2, but solving a direct % linear system of equations for nan elements. % This method will be the fastest possible for % large systems since it uses the sparsest % possible system of equations. Not a least % squares approach, so it may be least robust % to noise on the boundaries of any holes. % This method will also be least able to % interpolate accurately for smooth surfaces. % Extrapolation behavior is linear. % % Note: method 2 has problems in 1-d, so this % method is disabled for vector inputs. % % method == 3 --+ See method 0, but uses del^4 for % the interpolating operator. This may result % in more accurate interpolations, at some cost % in speed. % % method == 4 --+ Uses a spring metaphor. Assumes % springs (with a nominal length of zero) % connect each node with every neighbor % (horizontally, vertically and diagonally) % Since each node tries to be like its neighbors, % extrapolation is as a constant function where % this is consistent with the neighboring nodes. % % method == 5 --+ See method 2, but use an average % of the 8 nearest neighbors to any element. % This method is NOT recommended for use. % % % arguments (output): % B - nxm array with NaNs replaced % % % Example: % [x,y] = meshgrid(0:.01:1); % z0 = exp(x+y); % znan = z0; % znan(20:50,40:70) = NaN; % znan(30:90,5:10) = NaN; % znan(70:75,40:90) = NaN; % % z = inpaint_nans(znan); % % % See also: griddata, interp1 % % Author: John D'Errico % e-mail address: woodchips@rochester.rr.com % Release: 2 % Release date: 4/15/06 % I always need to know which elements are NaN, % and what size the array is for any method [n,m]=size(A); A=A(:); nm=n*m; k=isnan(A(:)); % list the nodes which are known, and which will % be interpolated nan_list=find(k); known_list=find(~k); % how many nans overall nan_count=length(nan_list); % convert NaN indices to (r,c) form % nan_list==find(k) are the unrolled (linear) indices % (row,column) form [nr,nc]=ind2sub([n,m],nan_list); % both forms of index in one array: % column 1 == unrolled index % column 2 == row index % column 3 == column index nan_list=[nan_list,nr,nc]; % supply default method if (nargin<2) || isempty(method) method = 0; elseif ~ismember(method,0:5) error 'If supplied, method must be one of: {0,1,2,3,4,5}.' end % for different methods switch method case 0 % The same as method == 1, except only work on those % elements which are NaN, or at least touch a NaN. % is it 1-d or 2-d? if (m == 1) || (n == 1) % really a 1-d case work_list = nan_list(:,1); work_list = unique([work_list;work_list - 1;work_list + 1]); work_list(work_list <= 1) = []; work_list(work_list >= nm) = []; nw = numel(work_list); u = (1:nw)'; fda = sparse(repmat(u,1,3),bsxfun(@plus,work_list,-1:1), ... repmat([1 -2 1],nw,1),nw,nm); else % a 2-d case % horizontal and vertical neighbors only talks_to = [-1 0;0 -1;1 0;0 1]; neighbors_list=identify_neighbors(n,m,nan_list,talks_to); % list of all nodes we have identified all_list=[nan_list;neighbors_list]; % generate sparse array with second partials on row % variable for each element in either list, but only % for those nodes which have a row index > 1 or < n L = find((all_list(:,2) > 1) & (all_list(:,2) < n)); nl=length(L); if nl>0 fda=sparse(repmat(all_list(L,1),1,3), ... repmat(all_list(L,1),1,3)+repmat([-1 0 1],nl,1), ... repmat([1 -2 1],nl,1),nm,nm); else fda=spalloc(n*m,n*m,size(all_list,1)*5); end % 2nd partials on column index L = find((all_list(:,3) > 1) & (all_list(:,3) < m)); nl=length(L); if nl>0 fda=fda+sparse(repmat(all_list(L,1),1,3), ... repmat(all_list(L,1),1,3)+repmat([-n 0 n],nl,1), ... repmat([1 -2 1],nl,1),nm,nm); end end % eliminate knowns rhs=-fda(:,known_list)*A(known_list); k=find(any(fda(:,nan_list(:,1)),2)); % and solve... B=A; B(nan_list(:,1))=fda(k,nan_list(:,1))\rhs(k); case 1 % least squares approach with del^2. Build system % for every array element as an unknown, and then % eliminate those which are knowns. % Build sparse matrix approximating del^2 for % every element in A. % is it 1-d or 2-d? if (m == 1) || (n == 1) % a 1-d case u = (1:(nm-2))'; fda = sparse(repmat(u,1,3),bsxfun(@plus,u,0:2), ... repmat([1 -2 1],nm-2,1),nm-2,nm); else % a 2-d case % Compute finite difference for second partials % on row variable first [i,j]=ndgrid(2:(n-1),1:m); ind=i(:)+(j(:)-1)*n; np=(n-2)*m; fda=sparse(repmat(ind,1,3),[ind-1,ind,ind+1], ... repmat([1 -2 1],np,1),n*m,n*m); % now second partials on column variable [i,j]=ndgrid(1:n,2:(m-1)); ind=i(:)+(j(:)-1)*n; np=n*(m-2); fda=fda+sparse(repmat(ind,1,3),[ind-n,ind,ind+n], ... repmat([1 -2 1],np,1),nm,nm); end % eliminate knowns rhs=-fda(:,known_list)*A(known_list); k=find(any(fda(:,nan_list),2)); % and solve... B=A; B(nan_list(:,1))=fda(k,nan_list(:,1))\rhs(k); case 2 % Direct solve for del^2 BVP across holes % generate sparse array with second partials on row % variable for each nan element, only for those nodes % which have a row index > 1 or < n % is it 1-d or 2-d? if (m == 1) || (n == 1) % really just a 1-d case error('Method 2 has problems for vector input. Please use another method.') else % a 2-d case L = find((nan_list(:,2) > 1) & (nan_list(:,2) < n)); nl=length(L); if nl>0 fda=sparse(repmat(nan_list(L,1),1,3), ... repmat(nan_list(L,1),1,3)+repmat([-1 0 1],nl,1), ... repmat([1 -2 1],nl,1),n*m,n*m); else fda=spalloc(n*m,n*m,size(nan_list,1)*5); end % 2nd partials on column index L = find((nan_list(:,3) > 1) & (nan_list(:,3) < m)); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,3), ... repmat(nan_list(L,1),1,3)+repmat([-n 0 n],nl,1), ... repmat([1 -2 1],nl,1),n*m,n*m); end % fix boundary conditions at extreme corners % of the array in case there were nans there if ismember(1,nan_list(:,1)) fda(1,[1 2 n+1])=[-2 1 1]; end if ismember(n,nan_list(:,1)) fda(n,[n, n-1,n+n])=[-2 1 1]; end if ismember(nm-n+1,nan_list(:,1)) fda(nm-n+1,[nm-n+1,nm-n+2,nm-n])=[-2 1 1]; end if ismember(nm,nan_list(:,1)) fda(nm,[nm,nm-1,nm-n])=[-2 1 1]; end % eliminate knowns rhs=-fda(:,known_list)*A(known_list); % and solve... B=A; k=nan_list(:,1); B(k)=fda(k,k)\rhs(k); end case 3 % The same as method == 0, except uses del^4 as the % interpolating operator. % del^4 template of neighbors talks_to = [-2 0;-1 -1;-1 0;-1 1;0 -2;0 -1; ... 0 1;0 2;1 -1;1 0;1 1;2 0]; neighbors_list=identify_neighbors(n,m,nan_list,talks_to); % list of all nodes we have identified all_list=[nan_list;neighbors_list]; % generate sparse array with del^4, but only % for those nodes which have a row & column index % >= 3 or <= n-2 L = find( (all_list(:,2) >= 3) & ... (all_list(:,2) <= (n-2)) & ... (all_list(:,3) >= 3) & ... (all_list(:,3) <= (m-2))); nl=length(L); if nl>0 % do the entire template at once fda=sparse(repmat(all_list(L,1),1,13), ... repmat(all_list(L,1),1,13) + ... repmat([-2*n,-n-1,-n,-n+1,-2,-1,0,1,2,n-1,n,n+1,2*n],nl,1), ... repmat([1 2 -8 2 1 -8 20 -8 1 2 -8 2 1],nl,1),nm,nm); else fda=spalloc(n*m,n*m,size(all_list,1)*5); end % on the boundaries, reduce the order around the edges L = find((((all_list(:,2) == 2) | ... (all_list(:,2) == (n-1))) & ... (all_list(:,3) >= 2) & ... (all_list(:,3) <= (m-1))) | ... (((all_list(:,3) == 2) | ... (all_list(:,3) == (m-1))) & ... (all_list(:,2) >= 2) & ... (all_list(:,2) <= (n-1)))); nl=length(L); if nl>0 fda=fda+sparse(repmat(all_list(L,1),1,5), ... repmat(all_list(L,1),1,5) + ... repmat([-n,-1,0,+1,n],nl,1), ... repmat([1 1 -4 1 1],nl,1),nm,nm); end L = find( ((all_list(:,2) == 1) | ... (all_list(:,2) == n)) & ... (all_list(:,3) >= 2) & ... (all_list(:,3) <= (m-1))); nl=length(L); if nl>0 fda=fda+sparse(repmat(all_list(L,1),1,3), ... repmat(all_list(L,1),1,3) + ... repmat([-n,0,n],nl,1), ... repmat([1 -2 1],nl,1),nm,nm); end L = find( ((all_list(:,3) == 1) | ... (all_list(:,3) == m)) & ... (all_list(:,2) >= 2) & ... (all_list(:,2) <= (n-1))); nl=length(L); if nl>0 fda=fda+sparse(repmat(all_list(L,1),1,3), ... repmat(all_list(L,1),1,3) + ... repmat([-1,0,1],nl,1), ... repmat([1 -2 1],nl,1),nm,nm); end % eliminate knowns rhs=-fda(:,known_list)*A(known_list); k=find(any(fda(:,nan_list(:,1)),2)); % and solve... B=A; B(nan_list(:,1))=fda(k,nan_list(:,1))\rhs(k); case 4 % Spring analogy % interpolating operator. % list of all springs between a node and a horizontal % or vertical neighbor hv_list=[-1 -1 0;1 1 0;-n 0 -1;n 0 1]; hv_springs=[]; for i=1:4 hvs=nan_list+repmat(hv_list(i,:),nan_count,1); k=(hvs(:,2)>=1) & (hvs(:,2)<=n) & (hvs(:,3)>=1) & (hvs(:,3)<=m); hv_springs=[hv_springs;[nan_list(k,1),hvs(k,1)]]; end % delete replicate springs hv_springs=unique(sort(hv_springs,2),'rows'); % build sparse matrix of connections, springs % connecting diagonal neighbors are weaker than % the horizontal and vertical springs nhv=size(hv_springs,1); springs=sparse(repmat((1:nhv)',1,2),hv_springs, ... repmat([1 -1],nhv,1),nhv,nm); % eliminate knowns rhs=-springs(:,known_list)*A(known_list); % and solve... B=A; B(nan_list(:,1))=springs(:,nan_list(:,1))\rhs; case 5 % Average of 8 nearest neighbors % generate sparse array to average 8 nearest neighbors % for each nan element, be careful around edges fda=spalloc(n*m,n*m,size(nan_list,1)*9); % -1,-1 L = find((nan_list(:,2) > 1) & (nan_list(:,3) > 1)); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([-n-1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % 0,-1 L = find(nan_list(:,3) > 1); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([-n, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % +1,-1 L = find((nan_list(:,2) < n) & (nan_list(:,3) > 1)); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([-n+1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % -1,0 L = find(nan_list(:,2) > 1); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([-1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % +1,0 L = find(nan_list(:,2) < n); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % -1,+1 L = find((nan_list(:,2) > 1) & (nan_list(:,3) < m)); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([n-1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % 0,+1 L = find(nan_list(:,3) < m); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([n, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % +1,+1 L = find((nan_list(:,2) < n) & (nan_list(:,3) < m)); nl=length(L); if nl>0 fda=fda+sparse(repmat(nan_list(L,1),1,2), ... repmat(nan_list(L,1),1,2)+repmat([n+1, 0],nl,1), ... repmat([1 -1],nl,1),n*m,n*m); end % eliminate knowns rhs=-fda(:,known_list)*A(known_list); % and solve... B=A; k=nan_list(:,1); B(k)=fda(k,k)\rhs(k); end % all done, make sure that B is the same shape as % A was when we came in. B=reshape(B,n,m); % ==================================================== % end of main function % ==================================================== % ==================================================== % begin subfunctions % ==================================================== function neighbors_list=identify_neighbors(n,m,nan_list,talks_to) % identify_neighbors: identifies all the neighbors of % those nodes in nan_list, not including the nans % themselves % % arguments (input): % n,m - scalar - [n,m]=size(A), where A is the % array to be interpolated % nan_list - array - list of every nan element in A % nan_list(i,1) == linear index of i'th nan element % nan_list(i,2) == row index of i'th nan element % nan_list(i,3) == column index of i'th nan element % talks_to - px2 array - defines which nodes communicate % with each other, i.e., which nodes are neighbors. % % talks_to(i,1) - defines the offset in the row % dimension of a neighbor % talks_to(i,2) - defines the offset in the column % dimension of a neighbor % % For example, talks_to = [-1 0;0 -1;1 0;0 1] % means that each node talks only to its immediate % neighbors horizontally and vertically. % % arguments(output): % neighbors_list - array - list of all neighbors of % all the nodes in nan_list if ~isempty(nan_list) % use the definition of a neighbor in talks_to nan_count=size(nan_list,1); talk_count=size(talks_to,1); nn=zeros(nan_count*talk_count,2); j=[1,nan_count]; for i=1:talk_count nn(j(1):j(2),:)=nan_list(:,2:3) + ... repmat(talks_to(i,:),nan_count,1); j=j+nan_count; end % drop those nodes which fall outside the bounds of the % original array L = (nn(:,1)<1)|(nn(:,1)>n)|(nn(:,2)<1)|(nn(:,2)>m); nn(L,:)=[]; % form the same format 3 column array as nan_list neighbors_list=[sub2ind([n,m],nn(:,1),nn(:,2)),nn]; % delete replicates in the neighbors list neighbors_list=unique(neighbors_list,'rows'); % and delete those which are also in the list of NaNs. neighbors_list=setdiff(neighbors_list,nan_list,'rows'); else neighbors_list=[]; end \ No newline at end of file diff --git a/src/lowpf.m b/src/lowpf.m new file mode 100644 index 0000000..09e7af5 --- /dev/null +++ b/src/lowpf.m @@ -0,0 +1,6 @@ +% applies a low pass filter +% [y, n] = lowpf(x, cutoff_frequency) +function [y, n] = lowpf(x, fc) + n = floor(sqrt(0.1024 + fc^2)/fc); + y = filter((1/n)*ones(1,n), 1, x); +end \ No newline at end of file diff --git a/src/mqnr1.m b/src/mqnr1.m new file mode 100644 index 0000000..88e872d --- /dev/null +++ b/src/mqnr1.m @@ -0,0 +1,27 @@ +%Gz = mqnr(y, u, T) não recursivo +function Gz = mqnr(y, u, T) + n = size(y, 1); + for i = 1:size(y, 2) + Y=[]; + fi=[]; + for k=2:n + y1 = y(k-1, i); + u1 = at(u, k-1, i); + Y = [Y; y(k, i)]; + fi = [fi; -y1 u1]; + end + teta(:, i) = (fi'*fi)\fi'*Y; + end; + + uxi = (1:size(u, 2))'; + + for i = 1:size(y, 2) + a1=teta(1, i); + b1=teta(2, i); + + z = tf('z', T, 'variable', 'z^-1'); + j = at(uxi, i); + Gz(i, j) = b1/(1 + a1*z^-1); + Gz(i, j).ioDelay = 1; + end +end diff --git a/src/mqnr2.m b/src/mqnr2.m new file mode 100644 index 0000000..3e04a5f --- /dev/null +++ b/src/mqnr2.m @@ -0,0 +1,31 @@ +%Gz = mqnr(y, u, T) não recursivo +function Gz = mqnr2(y, u, T) + n = size(y, 1); + for i = 1:size(y, 2) + Y=[]; + fi=[]; + for k=3:n + y1 = y(k-1, i); + y2 = y(k-2, i); + u1 = at(u, k-1, i); + u2 = at(u, k-2, i); + Y = [Y; y(k, i)]; + fi = [fi; -y1 -y2 u1 u2]; + end + teta(:, i) = (fi'*fi)\fi'*Y; + end; + + uxi = (1:size(u, 2))'; + + for i = 1:size(y, 2) + a1=teta(1, i); + a2=teta(2, i); + b1=teta(3, i); + b2=teta(4, i); + + z = tf('z', T, 'variable', 'z^-1'); + j = at(uxi, i); + Gz(i, j) = (b1 + b2*z^-1)/(1 + a1*z^-1 + a2*z^-2); + Gz(i, j).ioDelay = 1; + end +end \ No newline at end of file diff --git a/src/plot_fft.m b/src/plot_fft.m new file mode 100644 index 0000000..47ce4f8 --- /dev/null +++ b/src/plot_fft.m @@ -0,0 +1,20 @@ +%plots the normalized fft removing the DC bias +%[handle, maximum_frequency] = plot_fft(y, sampling_frequency) +function [hf, fmax] = plot_fft(X, Fs, varargin) + X = inpaint_nans(X); + L = length(X); + M = floor(L/2); + Y = fft(X - repmat(mean(X), size(X, 1), 1)); + P2 = abs(Y/L); + P1 = P2(1:M+1, :); + p = repmat(max(P1), size(P1, 1), 1); + P1 = P1./p; + P1(1, :) = []; + f = Fs*(1:M)/L; + hf = plot(f,P1,varargin{:}); + title('Fourier Normalizado (AC)') + xlabel('f (Hz)') + ylabel('| FFT |') + [~, index] = max(P1); + fmax = f(index); +end \ No newline at end of file diff --git a/src/plotudo.m b/src/plotudo.m new file mode 100644 index 0000000..b5e6d70 --- /dev/null +++ b/src/plotudo.m @@ -0,0 +1,160 @@ +%[fh1 fh2] = plotudo(t, y, r, e, u, pwm, ...) +%plotudo(t, y, r, e, u, pwm, 1) plota -yD, eD, eI +%plotudo(t, y, r, e, u, pwm, ~, 1) plota fft +%plotudo(t, y, r, e, u, pwm, ~, ~, 1) plota yyaxis +%plotudo(t, y, r, e, u, pwm, ~, ~, ~, t0) tempo zero ? em t0 +function [hf, hfu] = plotudo(t, y, r, e, u, pwm, varargin) + hf = []; + hfu = []; + + T = mean(diff(t)); + ko = round(t(1)/T) + 1; + kf = round(t(end)/T) + 1; + y = y(ko:kf, :); + r = r(ko:kf, :); + e = e(ko:kf, :); + u = u(ko:kf, :); + pwm = pwm(ko:kf, :); + t = t - t(1); + + default = {0, 0, 1, 1}; + custom = [varargin default{(1 + length(varargin)):end}]; + [verbose, fft, yy, start] = custom{:}; + t = t - t(start); + + if verbose + dt = repmat(diff(t)', 1, size(e, 2)); + yD = diff(y)./dt; + yD(end + 1, :) = NaN; + eD = diff(e)./dt; + eD(end + 1, :) = NaN; + eI(1, :) = nan([1, size(e, 2)]); + eI = [eI; cumsum((dt.*(e(1:end-1, :) + e(2:end, :))/2))]; + end + + if ~yy + for k = 1:size(y, 2) + hf(k) = figure; + ax1 = subplot(2, 1, 1); + hold on + grid on + xlabel('Tempo (s)') + if k == 1 + title('') + else + title(sprintf('%d', k)) + end + stairs(t', at(r, ':', k), 'r--', 'LineWidth', 0.5) + stairs(t', y(:, k), 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + stairs(t', at(r, ':', k), 'r--', 'LineWidth', 0.5); + hold off + legend('r', 'y', 'Location', 'Best'); + legend('boxoff'); + + ax2 = subplot(2, 1, 2); + hold on + grid on + xlabel('Tempo (s)') + if verbose + stairs(t', at(u, ':', k), 'k', 'LineWidth', 0.5); + stairs(t', at(pwm, ':', k), 'ko', 'MarkerSize', 2.5, 'LineWidth', 0.5); + stairs(t', at(e, ':', k), 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + stairs(t', at(eI, ':', k), 'LineWidth', 0.5, 'Color', [0.9290 0.6940 0.1250]); + stairs(t', at(eD, ':', k), 'LineWidth', 0.5, 'Color', [0.850 0.325 0.098]); + stairs(t', at(-yD, ':', k), 'o', 'MarkerSize', 2.5, 'LineWidth', 0.5, 'Color', [0.850 0.325 0.098]); + plot(t, zeros(size(t)), 'r--', 'LineWidth', 0.5); + legend('u', 'pwm', 'e', 'eI', 'eD', '-yD'); + else + stairs(t', at(u, ':', k), 'k', 'LineWidth', 0.5); + stairs(t', at(pwm, ':', k), 'ko', 'MarkerSize', 2.5, 'LineWidth', 0.5); + %HARD CODE CORE CODE CORE CODE + stairs(t', at(e, ':', k), 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + plot(t, zeros(size(t)), 'r--', 'LineWidth', 0.5); + legend('u', 'pwm', 'e', 'Location', 'Best'); + legend('boxoff') + end + hold off + linkaxes([ax1 ax2], 'x') + subplot(2, 1, 1) + end + else + %BUG: só normaliza com degrais + %r = r*median(y)/median(r); + + for k = 1:size(y, 2) + hf(k) = figure; + set(hf(k),'defaultAxesColorOrder',[0.6*[0 0.447 0.741]; [0 0 0]]); + + yyaxis left + hold on + %grid on + xlabel('Tempo (s)') + if k == 1 + title('') + else + title(sprintf('%d', k)) + end + stairs(t', at(r, ':', k), 'r--', 'LineWidth', 0.5); + stairs(t', y(:, k), 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); +% hold off +% legend('r', 'y', 'Location', 'Best'); +% legend('boxoff'); + + yyaxis right + hold on + %grid on + xlabel('Tempo (s)') + if verbose + stairs(t', at(u, ':', k), 'k', 'LineWidth', 0.5); + %stairs(t', at(pwm, ':', k), 'ko', 'MarkerSize', 2.5, 'LineWidth', 0.5); + stairs(t', at(e, ':', k), 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + stairs(t', at(eI, ':', k), 'LineWidth', 0.5, 'Color', [0.9290 0.6940 0.1250]); + stairs(t', at(eD, ':', k), 'LineWidth', 0.5, 'Color', [0.850 0.325 0.098]); + stairs(t', at(-yD, ':', k), 'o', 'MarkerSize', 2.5, 'LineWidth', 0.5, 'Color', [0.850 0.325 0.098]); + plot(t, zeros(size(t)), 'r--', 'LineWidth', 0.5); + legend('u', 'e', 'eI', 'eD', '-yD'); + else + stairs(t', at(u, ':', k), 'k', 'LineWidth', 0.5); + stairs(t', at(pwm, ':', k), 'ko', 'MarkerSize', 2.5, 'LineWidth', 0.5); + end + legend('r', 'y', 'u', 'pwm', 'Location', 'Best'); + legend('boxoff') + hold off + end + end + xlim([t(1) t(end)]) + + %FOURIER + if fft + for k = 1:size(y, 2) + hfu(k) = figure; + colormap('default') + hold on + %grid on + if verbose + plot_fft( y( ':', k), 1/T, 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + plot_fft(at(r, ':', k), 1/T, 'r--', 'LineWidth', 0.5); + plot_fft(at(u, ':', k), 1/T, 'k', 'LineWidth', 0.5); + plot_fft(at(pwm, ':', k), 1/T, 'ko', 'MarkerSize', 4, 'LineWidth', 0.5); + plot_fft(at(e, ':', k), 1/T, 'x', 'MarkerSize', 4, 'Color', [0 0.447 0.741]); + plot_fft(at(eI, ':', k), 1/T, 'x', 'MarkerSize', 4, 'Color', [0.9290 0.6940 0.1250]); + plot_fft(at(eD, ':', k), 1/T, 'x', 'MarkerSize', 4, 'Color', [0.850 0.325 0.098]); + plot_fft(at(-yD, ':', k), 1/T, 'o', 'MarkerSize', 4, 'Color', [0.850 0.325 0.098]); + legend('y', 'r', 'u', 'pwm', 'e', 'eI', 'eD', '-yD'); + else + plot_fft( y( ':', k), 1/T, 'LineWidth', 1.5, 'Color', [0 0.447 0.741]); + plot_fft(at(r, ':', k), 1/T, 'r--', 'LineWidth', 0.5); + plot_fft(at(u, ':', k), 1/T, 'k', 'LineWidth', 0.5); + plot_fft(at(pwm, ':', k), 1/T, 'ko', 'MarkerSize', 4, 'LineWidth', 0.5); + legend('y', 'r', 'u', 'pwm', 'Location', 'Best'); + legend('boxoff') + end + if k == 1 + title('') + else + title(sprintf('%d', k)) + end + hold off + end + end +end \ No newline at end of file diff --git a/src/qshift.m b/src/qshift.m new file mode 100644 index 0000000..286f1a7 --- /dev/null +++ b/src/qshift.m @@ -0,0 +1,29 @@ +%shifts and adds signal x, using a poly of backward shifts +%if poly is of order n, and there is no fill, will drop the first n values +%if there is a fill, it could be 0: to fill with zeros OR 1: to circshift +%poly could also be a Lag Operator Polynominal +%y = qshift(x, poly, fill?) +%Ex: diff(x) == qshift(x, [1 -1]) +%see also: LagOp +function y = qshift(x, poly, varargin) + if isa(poly, 'LagOp') + n = poly.Degree + 1; + polyarr = zeros([1, n]); + for i = 1:n + polyarr(i) = poly.Coefficients{i-1}; + end + poly = polyarr; + end + n = length(poly); + y = zeros(size(x)); + for i = 1:n + y = y + poly(i)*wshift('1d', x, -(i-1)); + end + if nargin == 3 + if varargin{1} == 0 + y(1:n-1) = 0; + end + else + y(1:n-1) = []; + end +end \ No newline at end of file diff --git a/src/readlino.m b/src/readlino.m new file mode 100644 index 0000000..c31e5c7 --- /dev/null +++ b/src/readlino.m @@ -0,0 +1,9 @@ +%readlino(serial_port) +function y = readlino(s) + flushinput(s); + flushoutput(s); + fwrite(s, '7', 'uint8'); + fwrite(s, 10, 'uint8'); + resposta = fread(s, 2); + y = double(bitor(bitshift(uint16(resposta(1)),8),uint16(resposta(2)))); +end \ No newline at end of file diff --git a/src/readsim.m b/src/readsim.m new file mode 100644 index 0000000..e5c1f1a --- /dev/null +++ b/src/readsim.m @@ -0,0 +1,18 @@ +%simulates Gz by global y, v, k +function yk = readsim(Gz) + global y pwm k + yk = nan(1, size(Gz, 1)); + idv = 1:size(Gz, 2); + for i=1:size(Gz, 1) + [NUM, DEM] = tfdata(Gz(i), 'v'); + Nnum = length(DEM); + Ndem = length(NUM); + d = totaldelay(Gz(i, at(idv, i))); + if k > d + yk(1, i) = -DEM(2:Ndem)*at(y, k-1: -1: k-Ndem+1, i) ... + +NUM(1:Nnum)*at(pwm, k-d-Ndem+Nnum: -1: k-d-Ndem+1, i); + else + yk(1, i) = at(y, k-1, i); + end + end +end \ No newline at end of file diff --git a/src/relay_info.m b/src/relay_info.m new file mode 100644 index 0000000..656fea2 --- /dev/null +++ b/src/relay_info.m @@ -0,0 +1,63 @@ +function [Gjw, w, d, a, eps] = relay_info(y, u, T, varargin) + %[Gjw, w] = relay_info(y, u, T) + try %cleaning this once + n = length(y); + settled = (1:n > 0)'; % no shame + u = u - mean(u(settled)); + spin = round(2*u/(peak2peak(u))); +% spin = round(2*(u - mean(u))/(peak2peak(u))); + e = mean(y(settled))-y; + edg = settled.*[0; diff(spin)]/2; + bet = logical(edg) | logical(circshift(edg, -1)); +% figure +% hold on +% plot(spin) +% plot(edg) + if nargin < 4 + d = mean((u(logical(edg)) - mean(u)).*edg(logical(edg))); + else + d = varargin{1}; + end + epsaux = e(bet).*(edg(bet) + circshift(edg(bet), -1)); + if ~isempty(epsaux) % todo: if find 1 cycle + eo = mean(e(settled)); + eps = max(0, mean(epsaux)); + end + % for measuring a, find the corresponding peak in beetween two edges! + edg_id = sign(edg).*sign(spin.*settled).*(1:n)'; + edg_id(edg_id == 0) = []; + edg_delta = []; + aaux = []; + for ide = 1:length(edg_id)-1 + fst = edg_id(ide); + lst = edg_id(ide+1)-1; + edg_delta = [edg_delta; lst - fst + 1]; + aaux(ide, 1) = max(sign(edg(fst))*e(fst:lst)); + end + if ~isempty(aaux) % todo: if find 1 cycle + a = median(aaux); + else + a = peak2peak(e(round(end/2):end))/2; + end + + if ~mod(length(edg_delta), 2) + edg_delta(end) = []; + end + edg_delta = qshift(edg_delta, [1, 1]); + w = 2*pi/(mean(edg_delta)*T); +% w = 2*pi*medfreq(u-mean(u), 1/T) %which one is less worst? +% w = pi*maxfreq(u)/T; + Gjw = -pi/(4*d)*sqrt(a^2 - eps^2) - 1j*pi/(4*d)*eps; +% Gjw = -1/(2*d/(pi*a)*(sqrt(1 - ((eps + eo)/a)^2) + sqrt(1 - ((eps - eo)/a)^2)) - 1j*4*d*eps/(pi*a^2)); + %Lh = (asin(eps/a)/w); % this is what the delay was supposed to be + %L = 2*T*finddelay(y, u) - Lh; % the rest is lag + %L = T; % let's hard code here + disp([' d = ' num2str(d) ', eps = ' num2str(eps) ', eo = ' num2str(eo) ', a = ' num2str(a) ',' 10 ' w = ' num2str(w) ', Gjw = ' num2str(abs(Gjw)) ' <' num2str(angle(Gjw)) 10]) + catch ME % todo: find the Black Swan + eps = NaN; + a = NaN; + Gjw = NaN; + w = NaN; + disp(['Broke! ' ME.message]) + end +end \ No newline at end of file diff --git a/src/startcom.m b/src/startcom.m new file mode 100644 index 0000000..bec72f9 --- /dev/null +++ b/src/startcom.m @@ -0,0 +1,37 @@ +%Attempts to connect with plant or model, in that order +%[stop, read, write] = startcom(COM) +%[stop, read, write] = startcom(COM, Gz) +function [stop, read, write, plant] = startcom(COM, varargin) + if nargin >= 2 + Gz = varargin{1}; + end + if nargin >= 3 + noise_amp = varargin{2}; + else + noise_amp = 0; + end + try + s = serial(COM,'BaudRate',19200); + s.terminator = 'LF'; + s.RecordDetail = 'verbose'; + s.RecordName = 'comlog.txt'; + out = instrfind(s); + if strcmp(out.status, 'closed') + fclose(instrfind); + fopen(s); + end + record(s, 'off'); + read = @() readlino(s); + write = @(duty) writelino(s, duty); + stop = @() stopino(s); + plant = true; + read(); + catch ME1 + errors = textscan(ME1.message, '%[^\n]', 1); + disp([errors{end}{:}]); Gz + read = @() readsim(Gz) + noise_amp*randn(); + write = @(duty) writesim(duty); + stop = 0; + plant = false; + end +end \ No newline at end of file diff --git a/src/step_info.m b/src/step_info.m new file mode 100644 index 0000000..c30f1b4 --- /dev/null +++ b/src/step_info.m @@ -0,0 +1,18 @@ +function [Mu, ts, tr, tp, itae] = step_info(y, u, T, varargin) + %[Gjw, w] = step_info(y, u, T) + zero = find(u, 1); + fim = length(u); + t = 0:T:(fim-1)*T; + [ymax, peak] = max(y); + ymed = median(y); + sett = fim - find(flip(y) > 1.02*ymed | flip(y) < 0.98*ymed, 1); + ts = T*(sett - zero); + rise = find(y > ymed, 1); + tr = T*(rise - zero); + Mu = 100*(ymax - ymed)/ymed; + tp = T*(peak - zero); + itae = sum(abs(y - ymed).*(t'))*T; + umax = max(u); + umed = median(u); + disp([' Mu = ' num2str(Mu) ', ts = ' num2str(ts) ', tr = ' num2str(tr) ', tp = ' num2str(tp) ', itae = ' num2str(itae) ', uo = ' num2str(u(zero)) ', udc = ' num2str(umed)]) +end \ No newline at end of file diff --git a/src/stopino.m b/src/stopino.m new file mode 100644 index 0000000..19fe892 --- /dev/null +++ b/src/stopino.m @@ -0,0 +1,7 @@ +%stopino(serial_port) +function stopino(s) + flushinput(s); + flushoutput(s); + fwrite(s, '2', 'uint8'); + fwrite(s, 10, 'uint8'); +end \ No newline at end of file diff --git a/src/subsp.m b/src/subsp.m new file mode 100644 index 0000000..0f199f8 --- /dev/null +++ b/src/subsp.m @@ -0,0 +1,14 @@ +%substitution of a poly on x through poly a. result is a new poly on y +%y = subsp(x, a) +%Ex: subsp([1 0 1 0], [1 -1]) == [1 -3 4 -2] +function y = subsp(x, a) + n = length(x); + m = length(a); + o = (n-1)*(m-1) + 1; + y = zeros(n, o); + for i = 1:(n-1) + y(i, i:o) = x(i)*convp(a, n-i); + end + y = sum(y); + y(end) = x(end) + y(end); +end \ No newline at end of file diff --git a/src/toString.m b/src/toString.m new file mode 100644 index 0000000..c36a0f0 --- /dev/null +++ b/src/toString.m @@ -0,0 +1,586 @@ +function str = toString(var, varargin) +% TOSTRING produce string representation of any datatype +% +% S = TOSTRING(A) produces a string representation of A, where +% class(A) can be one of +% +% double, single +% logical, +% char, +% int8, uint8 +% int16, uint16 +% int32, uint32 +% int64, uint64 +% cell, +% struct, +% function_handle, +% (user-implemented class name) +% +% The default string represenation is as verbose as possible. +% That means the contents of structure fields, cell array +% entries, etc. are representated in fully expanded form. +% +% S = TOSTRING(A, 'disp') produces a string representaion that +% is identical to what the command 'disp(A)' would produce. +% +% S = TOSTRING(A, 'compact') or S = TOSTRING(A, N) (with N a positive +% integer) limits the number of digits displayed in numerical arrays +% to either 4 ('compact') or N. +% +% +% EXAMPLE 1: +% +% >> a = struct('someField', uint32(10*rand(2)), 'otherField', {{[]}}); +% >> S = toString(a) +% +% S = +% +% 1x1 struct: +% someField: [9 7] +% [2 2] +% otherField: { [] } +% +% +% >> S = toString(a, 'disp') +% +% S = +% +% someField: [2x2 uint32] +% otherField: [] +% +% +% EXAMPLE 2: +% +% >> a = rand(2,2,2,2); +% >> S = toString(rand(2,2,3,2) +% +% S = +% +% (:,:,1,1) = +% [5.501563428984222e-01 5.870447045314168e-01] +% [6.224750860012275e-01 2.077422927330285e-01] +% +% (:,:,1,2) = +% [4.356986841038991e-01 9.233796421032439e-01] +% [3.111022866504128e-01 4.302073913295840e-01] +% +% +% (:,:,2,1) = +% [3.012463302794907e-01 2.304881602115585e-01] +% [4.709233485175907e-01 8.443087926953891e-01] +% +% (:,:,2,2) = +% [1.848163201241361e-01 9.797483783560852e-01] +% [9.048809686798929e-01 4.388699731261032e-01] +% +% +% EXAMPLE 3: +% +% >> a = cellfun(@(~)rand(3), cell(2), 'UniformOutput',false); +% >> a{end} = cell(2); +% >> a{end}{end} = @sin; +% >> S = toString(a, 2) +% +% S = +% +% { [0.01 0.92 0.42] [0.61 0.24 0.77] } +% { [0.60 0.00 0.46] [0.19 0.92 0.19] } +% { [0.39 0.46 0.77] [0.74 0.27 0.29] } +% { } +% { [0.32 0.04 0.47] { [] [] } } +% { [0.78 0.18 0.15] { [] @sin } } +% { [0.47 0.72 0.34] } +% +% +% See also disp, num2str, func2str, sprintf. + + + +% If you find this work useful and want to make a donation: +% https://www.paypal.me/RodyO/3.5 + + + +% Please report bugs and inquiries to: +% +% Name : Rody P.S. Oldenhuis +% E-mail : oldenhuis@gmail.com (personal) +% oldenhuis@luxspace.lu (professional) +% Affiliation: LuxSpace sàrl +% Licence : BSD + + +% If you find this work useful and want to show your appreciation: +% https://www.paypal.me/RodyO/3.5 + + +% Authors +%{ +Rody Oldenhuis (oldenhuis@gmail.com) +Clark Williams (rich.dick.clark@gmail.com) +%} + + +% Changelog +%{ +2014/February/14 (Rody Oldenhuis) +- CHANGED: Included "Authors" field, donation link, etc. +- CHANGED: Removed constructor from enum types, as it cannot be called directly +- CHANGED: Made enum types respond differently to "compact" notation +- FIXED: Integer types with user-defined accuracy never not assigned +- FIXED: warning about integers with user-defined accuracy was issued also on + recursive call (relevant for user-defined classes). +- FIXED: missing space in class header + +2014/February/13 (Clark Williams / Rody Oldenhuis) +- NEW: support for enum types + +2012/October/12 (Rody Oldenhuis) +- NEW: support for sparse matrices + +2012/October/11 (Rody Oldenhuis) +- First version + +%} + + + +% If you find this work useful and want to make a donation: +% https://www.paypal.me/RodyO/3.5 + + + + %% Initialize + + multiD = false; + numDigits = inf; % maximum precision + if nargin >= 2 + if ischar(varargin{1}) + + switch lower(varargin{1}) + + % return same as disp would print + case 'disp' + str = evalc('disp(var)'); + % instead of char(10) as \n, output multi-row char array + C = textscan(str, '%s',... + 'delimiter', '\r\n',... + 'MultipleDelimsAsOne', true); + str = char(C{1}); + return; + + % return same as disp would print + case 'compact' + numDigits = 4; % + + % RECURSIVE CALL (FOR MULTI-D ARRAYS) + % LEAVE UNDOCUMENTED + case 'recursive_call' + multiD = true; + indexString = varargin{2}; + numDigits = varargin{3}; + + otherwise + error(... + 'toString:unknown_option',... + 'Unknown option: %s.', varargin{1}); + end + + % Manually pass number of digits + elseif isscalar(varargin{1}) && isnumeric(varargin{1}) + numDigits = max(0, round(varargin{1})); + + else + error(... + 'toString:invalid_second_argument',... + 'Second argument to toString must be a string.'); + end + end + + + %% Generate strings + + % handle multi-D variables + if ~isstruct(var) % NOT for structures + if ndims(var)>=3 + + a = repmat({':'}, 1,ndims(var)-3); + + str = []; + for ii = 1:size(var,3) + if ~multiD % first call + str = char(... + str, ... + toString( ... + squeeze(var(:,:,ii,a{:})), ... + 'recursive_call', ['(:,:,' num2str(ii)],... + numDigits)... + ); + + else % subsequent calls + str = char(... + str, ... + toString( ... + squeeze(var(:,:,ii,a{:})), ... + 'recursive_call', [indexString ',', num2str(ii)],... + numDigits), ... + ''); + end + end + + return + + elseif multiD % last call + str = char(... + [indexString ') = '],... + toString(var, numDigits)); + return + + end + end + + % Empties first + if isempty(var) + + if ischar(var) + str = '""'; + + elseif iscell(var) + str = '{}'; + + % FIXME: delegate this somehow to where structs are handled + elseif isstruct(var) + fn = fieldnames(var); + if ~isempty(fn) + str = char(... + 'empty struct with fields:',... + fn{:}); + else + str = 'empty struct'; + end + + else + str = '[]'; + + end + + return + end + + % simplest case: char + if ischar(var) + quote = repmat('"', size(var,1),1); + str = [quote var quote]; + return + end + + % ordinary numeric or logical array can be handled by num2str + if isnumeric(var) || islogical(var) + + % integers + if isinteger(var) || islogical(var) + + str = num2str(var); + if isfinite(numDigits) + warning(... + 'toString:numdigits_on_int',... + 'The number of digits only applies to non-integer data. Ignoring...'); + end + + else + if ~isfinite(numDigits) + if issparse(var) + % just use the disp version + str = toString(var, 'disp'); + + else + if isa(var, 'double') + str = num2str(var, '%+17.15e '); + elseif isa(var, 'single') + str = num2str(var, '%+9.7e '); + else + error(... + 'toString:unknown_class',... + ['Unsupported numeric class: ''', class(var), '''.']); + end + end + else + frmt = ['%' num2str(numDigits+2) '.' num2str(numDigits), 'f ']; + if issparse(var) + % just use the disp version + str = evalc('disp(var)'); + + % apply the correct number of digits + str = textscan(str, '%s %f', ... + 'delimiter', ' \r\n',... + 'MultipleDelimsAsOne', true); + str{2} = num2str(str{2}, frmt); + str = [char(str{1}) repmat(' ', size(str{1},1),1) str{2}]; + + else + str = num2str(var, frmt); + end + + end + end + + if numel(var) > 1 + brO = repmat('[',size(str,1),1); + brC = brO; brC(:) = ']'; + str = [brO str brC]; + end + + return; + + end + + % Cell arrays + if iscell(var) + + strreps = cellfun(@(x)toString(x,numDigits), var, 'UniformOutput', false); + + rows = max(cellfun(@(x)size(x,1), strreps),[],2); + cols = max(cellfun(@(x)size(x,2), strreps),[],1); + + str = []; + for ii = 1:size(strreps,1) + + space = repmat(' ', rows(ii),2); + braceO = repmat('{', rows(ii),1); + braceC = braceO; braceC(:) = '}'; + + newentry = braceO; + for jj = 1:size(strreps,2) + newentry = [... + newentry,... + space,... + center(strreps{ii,jj}, rows(ii), cols(jj))]; %#ok FIXME: growing array + end + newentry = [newentry space braceC]; %#ok FIXME: growing array + + emptyline = ['{' repmat(' ', 1,size(newentry,2)-2) '}']; + if ii == 1 + str = char(newentry); + + else + if rows(ii) == 1 + str = char(str, newentry); + else + str = char(str, emptyline, newentry); + end + end + + end + + return + end + + % function handles + if isa(var, 'function_handle') + str = func2str(var); + if str(1) ~= '@' + str = ['@' str]; end + return + end + + % structures + if isstruct(var) + + fn = fieldnames(var); + + sz = num2str(size(var).'); + sz(:,2) = 'x'; sz = sz.'; + sz = sz(:).'; sz(end) = []; + + if isempty(fn) + if numel(var) == 0 + str = 'empty struct'; + else + str = [sz ' struct with no fields.']; + end + + elseif numel(var) == 1 + str = [sz ' struct:']; + str = append_list(var, str,fn,numDigits); + + else + str = char(... + [sz ' struct array with fields:'],... + fn{:}); + end + + return; + end + + + % If we end up here, we've been given a classdef'ed object + % -------------------------------------------------------- + + name = class(var); + + supers = superclasses(var); + methds = methods(var); + props = properties(var); + evnts = events(var); + enums = enumeration(var); + + % We'll be calling toString recursively; kill this warning, because it + % doesn't apply to this case + warnState = warning('off', 'toString:numdigits_on_int'); + + % Compact display for enums + if isfinite(numDigits) && ~isempty(enums) + str = [name '.' char(var)]; + % Don't forget to reinstate this warning + warnint(warnState); + return + end + + % Class header + if numel(supers) > 1 + supers = [ + cellfun(@(x) [x ' -> '], supers(1:end-1), 'UniformOutput', false) + supers(end)]; + supers = [supers{:}]; + elseif ~isempty(supers) + supers = supers{:}; + end + if (isempty(supers)) % BUGFIX: (Clark) empties were not handled nicely + str = ['class ' name ', no subclasses.']; + else + str = ['class ' name ', subclass of ' supers]; + end + + % Properties + if ~isempty(props) + str = char(str, '', 'Properties:', '------------'); + str = append_list(var, str,props, numDigits); + else + str = char(str, '','', '<< No public properties >>'); + end + + % Methods + if ~isempty(methds) + str = char(str, '', '', 'Methods:', '------------'); + + % NOTE: remove constructur for enums + if ~isempty(enums) + methds = methds(~strcmpi(methds, name)); end + + methds = append_string(right_align(methds), '()'); + str = char(str, methds{:}); + else + str = char(str, '','', '<< No public methods >>'); + end + + % Enumerations + if ~isempty(enums) + str = char(str, '', '', 'Enumerations:', '------------'); + + enumlabels = cell(size(enums)); + for k = 1 : numel(enums) + % BUGFIX: (Clark) highlight current value + if var == enums(k) + enumlabels{k} = ['<<' char(enums(k)) '>>']; + else + + enumlabels{k} = [' ' char(enums(k)) ' ']; + end + end + enumlabels = right_align(enumlabels); + + str = char(str, enumlabels{:}); + else + str = char(str, '','', '<< No public enumerations >>'); + end + + % Events + if ~isempty(evnts) + str = char(str, '','', 'Events:', '------------'); + evnts = right_align(evnts); + str = char(str, evnts{:}); + else + str = char(str, '','', '<< No public events >>'); + end + + % Don't forget to reinstate this warning + warning(warnState); + +end + + + +% STRING MANIPULATION +% -------------------------------------------------- + + +% pad (cell) string with spaces according to required field width +function str = prepend_space(fw, str) + if iscell(str) + str = cellfun(@(x) prepend_space(fw,x), str, 'UniformOutput', false); + else + str = [repmat(' ', size(str,1),fw-length(str)) str]; + end +end + + +% make a displayable "block" of a single key and possibly many values +function str = make_block(key, value) + + if size(value,1) > 1 + key = [key; repmat(' ', size(value,1)-1, size(key,2))]; end + + str = [key value]; +end + + +% right-align all entries in a cell string +function list = right_align(list) + list = prepend_space(max(cellfun(@length,list)), list); +end + + +% center-align (horizontal and vertical) a character array +% according to given block size +function str = center(str, rows,cols) + + [sz1, sz2] = size(str); + + if sz2 < cols || sz1 < rows + + ctr = max(1, ceil([rows/2-(sz1-1)/2 cols/2-(sz2-1)/2])); + newstr = repmat(' ', rows,cols); + + for ii = 1:sz1 + newstr(ctr(1)+ii-1, (0:length(str(ii,:))-1)+ctr(2) ) = str(ii,:); end + + str = newstr; + end + +end + + +% append a string to every entry in a cell string +function list = append_string(list, string) + if iscell(list) + list = cellfun(@(x) [x string], list, 'UniformOutput', false); + else + list = [list string]; + end +end + + +% append a set of keys and their evaluated values to a list +function str = append_list(var, str,list,numDigits) + + for ii = 1:size(list,1) + list{ii,2} = toString(var.(list{ii,1}),numDigits); end + + list(:,1) = append_string(right_align(list(:,1)), ': '); + + for ii = 1:size(list,1) + str = char(str, make_block(list{ii,:})); end + +end + + diff --git a/src/writelino.m b/src/writelino.m new file mode 100644 index 0000000..7b37a8b --- /dev/null +++ b/src/writelino.m @@ -0,0 +1,8 @@ +%writelino(serial_port, duty_percent) +function writelino(s, value) + flushinput(s); + flushoutput(s); + fwrite(s, '5', 'uint8'); + fwrite(s, value, 'uint8'); + fwrite(s, 10, 'uint8'); +end \ No newline at end of file diff --git a/src/writesim.m b/src/writesim.m new file mode 100644 index 0000000..e345f61 --- /dev/null +++ b/src/writesim.m @@ -0,0 +1,3 @@ +%nop +function writesim(~) +end \ No newline at end of file diff --git a/triangularPulseInv.m b/triangularPulseInv.m new file mode 100644 index 0000000..e067407 --- /dev/null +++ b/triangularPulseInv.m @@ -0,0 +1,9 @@ +%TRIANGULARPULSEINV x = triangularPulseInv( a, b, c, y ) +function x = triangularPulseInv( a, b, c, y ) + if y > 1 || y < 0 + x = [NaN NaN]; + else + x = [a + y*(b - a) b + (1 - y)*(c - b)]; + end +end + diff --git a/ventilador.m b/ventilador.m new file mode 100644 index 0000000..5f8db34 --- /dev/null +++ b/ventilador.m @@ -0,0 +1,137 @@ +function ventilador(block) + +%MSFUNTMPL_BASIC A Template for a Level-2 MATLAB S-Function +% The MATLAB S-function is written as a MATLAB function with the +% same name as the S-function. Replace 'msfuntmpl_basic' with the +% name of your S-function. +% +% It should be noted that the MATLAB S-function is very similar +% to Level-2 C-Mex S-functions. You should be able to get more +% information for each of the block methods by referring to the +% documentation for C-Mex S-functions. +% +% Copyright 2003-2010 The MathWorks, Inc. + +%% +%% The setup method is used to set up the basic attributes of the +%% S-function such as ports, parameters, etc. Do not add any other +%% calls to the main body of the function. +%% +addpath(genpath('src')); % add readlino and writelino functions +setup(block); + +%endfunction + +%% Function: setup =================================================== +%% Abstract: +%% Set up the basic characteristics of the S-function block such as: +%% - Input ports +%% - Output ports +%% - Dialog parameters +%% - Options +%% +%% Required : Yes +%% C-Mex counterpart: mdlInitializeSizes +%% +function setup(block) +beep off + +% Register number of ports +block.NumInputPorts = 1; +block.NumOutputPorts = 1; + +% Setup port properties to be inherited or dynamic +block.SetPreCompInpPortInfoToDynamic; +block.SetPreCompOutPortInfoToDynamic; + +% Override input port properties +block.InputPort(1).Dimensions = 1; +block.InputPort(1).DatatypeID = 0; % double +block.InputPort(1).Complexity = 'Real'; +block.InputPort(1).DirectFeedthrough = true; + +% Override output port properties +block.OutputPort(1).Dimensions = 1; +block.OutputPort(1).DatatypeID = 0; % double +block.OutputPort(1).Complexity = 'Real'; + +% Register parameters +block.NumDialogPrms = 1; + +% Register sample times +% [0 offset] : Continuous sample time +% [positive_num offset] : Discrete sample time +% +% [-1, 0] : Inherited sample time +% [-2, 0] : Variable sample time +block.SampleTimes = [-1 0]; + +% Specify the block simStateCompliance. The allowed values are: +% 'UnknownSimState', < The default setting; warn and assume DefaultSimState +% 'DefaultSimState', < Same sim state as a built-in block +% 'HasNoSimState', < No sim state +% 'CustomSimState', < Has GetSimState and SetSimState methods +% 'DisallowSimState' < Error out when saving or restoring the model sim state +block.SimStateCompliance = 'DefaultSimState'; + +%% ----------------------------------------------------------------- +%% The MATLAB S-function uses an internal registry for all +%% block methods. You should register all relevant methods +%% (optional and required) as illustrated below. You may choose +%% any suitable name for the methods and implement these methods +%% as local functions within the same file. See comments +%% provided for each function for more information. +%% ----------------------------------------------------------------- + +block.RegBlockMethod('Start', @Start); +block.RegBlockMethod('Outputs', @Outputs); % Required +block.RegBlockMethod('Terminate', @Terminate); % Required + +%end setup + +%% +%% Start: +%% Functionality : Called once at start of model execution. If you +%% have states that should be initialized once, this +%% is the place to do it. +%% Required : No +%% C-MEX counterpart: mdlStart +%% +function Start(block) +COM = block.DialogPrm(1).Data; % get the COM port number +s = serial(COM,'BaudRate',19200); % create the serial handler +s.terminator = 'LF'; +out = instrfind(s); +if strcmp(out.status, 'closed') + fclose(instrfind); + fopen(s); +end +set_param(block.BlockHandle, 'UserData', s); + +%end Start + +%% +%% Outputs: +%% Functionality : Called to generate block outputs in +%% simulation step +%% Required : Yes +%% C-MEX counterpart: mdlOutputs +%% +function Outputs(block) +s = get_param(block.BlockHandle, 'UserData'); % get serial handler +writelino(s, block.InputPort(1).Data) % write to plant +block.OutputPort(1).Data = readlino(s); % read from plant + +%end Outputs + +%% +%% Terminate: +%% Functionality : Called at the end of simulation for cleanup +%% Required : Yes +%% C-MEX counterpart: mdlTerminate +%% +function Terminate(block) +s = get_param(block.BlockHandle, 'UserData'); % get serial handler +stopino(s); + +%end Terminate \ No newline at end of file