From a84c3a8c5dd39ea37037e4391adcba2a26819cd9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 1 Nov 2012 19:54:40 +0000 Subject: [PATCH] Updates to Users Guide. Double-click on waterfall sets Tol to a reduced (mode-dependent) value. Tol is saved/restored on program restart. Added digital gain slider for setting input level. Garbage decode "15P6715P67WCV" is rejected. Arrays ss and c0 are copied and saved when newdat=1. Further processing is done on the copies. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2712 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- WSJT-X_Quick_Start_Guide.docx | Bin 177888 -> 178587 bytes getfile.cpp | 1 + lib/decode9.f90 | 1 + lib/decoder.f90 | 16 ++++++++++++---- lib/jt9sim.f90 | 6 +++--- lib/symspec.f90 | 5 +++-- mainwindow.cpp | 34 ++++++++++++++++++++++++++++++---- mainwindow.h | 16 +++++++--------- mainwindow.ui | 21 ++++++++++++++++++++- plotter.cpp | 5 +++++ plotter.h | 3 ++- soundin.cpp | 9 +++++++-- widegraph.cpp | 4 ++-- wsjtx.iss | 2 +- 14 files changed, 94 insertions(+), 29 deletions(-) diff --git a/WSJT-X_Quick_Start_Guide.docx b/WSJT-X_Quick_Start_Guide.docx index 029fc6c0536d03f3badb999d4477987da666ad5e..c7a58f8e8db1f46e0deececf211510df07c7a451 100644 GIT binary patch delta 15985 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 M6!Nw49|*|*0#e3jTL1t6 delta 15271 zcma*OQyMOP&kwuB(xapz)Y|E`EB?tR%0`90``j_4F0FbC^r>nV@K$!rD!y zbTb*+6KaK!+mcvYl9<~Fam?1#TGT4R!G_l@AV~BNn@rFa9woY@U|CGo$x_ z%dAFOeH$9p2|PoAFeHkd{H70F`j_@Hw4NFgjva| zpVI`D6SUft`a0a~CF}zsLIkaP%{J1{d;?7;A zQblpo%@2G}UL{JB21K6sK#r~@|HGC(s@Lo_tl zM#Y>c+VE4Q{N24G1?F-#yNidEGA8F|WtG@PCUnH}BEF2%hC?K(5 zP5~A6vxFblYRz6_J};n*)VqjypL@pJj_tzX0_M8)&TnzIHr892)_`b#23&U?ECr=P zYOQvplWnqkta^HWT#Y#S`5A!~MlPF(CGzSsM+e%-oi3Utn=<3=@0pbuTt7Fv_tv9* zyT(;()^h4pOF+GAZax3)S|;Nyrh}4RDI|ROK-)$}`_6%W zbH3mrZQ4c{2iNlB#tx!rnoI1!;yfZUu)3pt{VCI%q~_2MQd#0_4}rf(Zw zeunzRRqbAGnU}wl_@HTrNiRYV7Z0Vp05gZsbWG>fad)F@+?xD96OvPherYzHJd6GH zHO8wR4#ns#SxH!SHr{(wmFM-uNWK>TVXO&^%OCO7=9Dk{ozEv6qtWLYo?*zh*edm7 zKGdQp!3=PQ{_QEm0yrw`H8Q8uO!+}Ky&`nx^)EbB?2hM={ zT&z(Vl}S!P~JVBR0NI2AAE?`&^yCb zUz6O?FNlvFqAd0Alx%~5!|RAMcIpJ6^-g3>r*Ud<7-DCrD!_ROp+VJP)49lPLSY;W zcbT(!6c`6iA_`-gVo$%tRyve~tg{O0*3>7yA&2<0!IL?nny3fjy^5k402BCdS1Y&X zFnVxir20_{?gG|uv(Iz=xRUiak?t5&9XOJW1iLSNuZX_wZR9_~P(yxRZS3kk-}(s0AEYbScjnU6VY?jsm5`KBnSi>-R4h zBy0G_%q!HL^Nz%NSu@n=fYCPwKPawqL}~R;&V{w~5k+)(%%aajmsj6tA>dE%buJV9 zJm1|~p?7m;`cHp;uf=8JQ|Sj(mQk-j%$>2VG9XX6p;WIG2%6Apa_>YbQ2zOR_(kxu zQuao~_`6<~c30mg1udNR`$mI?d`)?NM1$alc8`egudOiX_Zs^^2JqrZDG5*oD4JBUFef4_=Bky@(U}87_msr6O)$F7lVlJ8ho6(0VJ^fx?{ys;5B8i z0;-l;Po`y>3~u0D;GQFyQN23SBiKp^v7WeDW6g!fC1zrl+R`CV@Z#qrrPu!X{%F1Z zTBF|51nuBD=IcEm5{UA2jIMz(_KX{?6)Wxr@yt5!^)7wV_D9tIsdPWPgt5usZL7*< zw!URji2G8%blm2}&z4)+3bGTLg!l|uWM+L){JL*oggS*vH~DLG@;y4P8Z@svg)}5N z2~|C9Ys|LuM*;C$2U-lnK_N+a^j8q;1ZS)j^d>|w3Z@EE(Px zs2H|blOL1oGZ23T7FHiZ{n^1j(6_x7;0cfYi^=bz`E1HlT?|g$5`e*>I5NkATtgWf zTs9E_?ze3etCRIHJZr_2+SX}urMtqpt4)5bK2&fusUg6t+r9xD9Ph!3bnZg>`xbRVKu1Z3mNEge-oLskes|C37#p7jgu z^gTY5!U69)<#{X`e_<`Ulg|yy>$ZcS&C#8#A{|cr1e>I?N@5wg1O{4yj|ot0QyF6- zZl8VWgZy9^vK4iRhgs_FkTKJ!3}2M&J9RU#S!d(>L)piz^91-itbbuz{uhNm)n&QX z;yO!5CvX^aVss$;clfF;4JF#wSPx^zM@f|f-fDse7IZ{pOcDolWLMilK6Uu3mS=Xc8=m83WX}8)4Xl$ zKx2B4C8uBqgcNA@W!ZF8qC-Y;ho)#J`h^RT3s61e*q^42F7kd|C0`Tqa19R=vchIt z$5@?xz_$FIR2bgPrhstc2=2GtwW78=LJfA^mdCb}eGhqk^`5t>*OpY&;c`{$)v@EW zeusKpV?~aB*%1rta*OU)1ERX99krJ6VfZKbBm;ODvo+xW|(Db*fG8}0r7dzl8&?8orFNdZT!X~-QGq_PZ=flh>$?$@$=kD;iC?;Nt%%t zOC@sRGHAZkWvNJ}*EO%_@aau;`Vl^;Yh%=ZXmXa&<^BCbC|}#`o(TV zyg}D-$DKC}KLTBxlY+$$Vtb+WTE>!Mv8j@!r}5;$9@r|q1khzzU2||3#-HbxspmdF ziJGo!pKPiui-HaGR%V8C?6_OOp?|=vcOe=Jy>QMYMS$Pn@q|QHF>MBi1{M?)I}gn* zVFR%#L*&Gye0FpB`ps&`8Eh*e$FfgOciE47_m{lwTcg;4cxMU0g zsT(&BP|Z;VfIuC_f&|=>9Crf(4$Jjw`b%cS6F-`S&kzG09x_s7R*M`#fYycNgh(-b z@w*6pJ-+2^pMiTus6nQm4%SA@NNLOxiF5ir7{Xz9(!^J9|y zh5h5M0U4yZMNdOa)_@Kh+g56oEuW%0!KGT3xqIJmMqC8)JlHqbP(`*r)5nblT|X{a z1Fu|`x}^A3+g!hr$i zC~eevB7E@1eqw zXG>Ze;S&gnDx0p=a3$#)&2%3p&RBmFmJP!qyQ+B??6dzvANaIb);q*%&Sd1(zgOt4 zLa7EqJ{4_QZc|Lejd)lWyW?t3C^PbrKFs1rb3U;)5#+2g_REgeBr3A@tP13d>x83Nf#0bceJk#+YyVad3;9f;8@*VY77hZl)v_~ zeu12Ui#FFjHE>|6!O10n|4{1%y#y>Vi@2mIC!y~5#FeD+*uk`qaZ0wd|69QWw3jbv z_H3Oe3De4sYUeI1~!jx~sS-U>NAM)dRo7v-cu>q&4G91X!+!2)PA`QO;A&JZ; zqeC`}GucJu7ml^kYZz*{Y0?*ap)bgl!Q9_R9*q8xE1a2{TE8<-HShu9POlg1qmLe~ zKBbw9Y~U_>zvCtcL>V*-jb)fe=6M6wAw7gfn!ZBLE)g?SO}e85NLZ}ni<&vW2D*Um zE}o%(7!c+{sqn=1j`ajnhIlybXIzd9aTDinxtX9E2Uobdc=ONhyiZb)BEE!o93IDx zVaaeG7qf|v`5%WyR$ua^sT%s|iO)EeS zjtQo+e*`7K=`K?y;SMk^hr)T@!;Ml0QE4%GV&7~Vp5~FxrR|bjEYBIRrQ^%i$JtH? z)&oW0WsYjWPmBz~kLI>F|JT@pB(2Xs*AJMkii(rU3Bq&0uIaK1%L^cRS_IPR4 zY;?G`+&+n+n2@=RbE*M(8)@84PtJMT1qye%Eo~VO(tOTau^$BOFcya+46-^gAu0~c zxn3?l6iWOFK@hTW{`CGsKFx_)x8olgq^ft}CGf?8{k0aiIiV(loa80toCg-dJtI7%nTggPbrOezDEWXfFx1m$PwY$1=(sU8FZ>IZOLif? zSMS}_8}(BX=LttC7GZ=lMo47-XpnAil-~@b>jz3sF_RFp(GK>X>i{KCd7y8!9xW(H zIQ)&H=b-@Ep4?aLHS3q~_OWd!7yY;S?J8}m4{hT9!E(s z7Gm_eM`-0#(c@*I*>9#`+hc@*WSOMOXb-}N0u;GjfLZhG8d7KVlRngvIR!%E=E+9I z;=3B>q9pgyu939>(RTZ9zX;mQ^4QaO>Jz(_AGEUf4va5EHa4%l*O^9-aLGrsBFwEi6f8b}r(q1vat89-@r0*b%4%Vh%9U zoEKd|$;-mqv@Q5wBE>!Q$f)uQi*kF5$3_NHrPOnP*W zf`KNeQa>@_i9Vou?#9!dahQ_wi8Gcecu4xp51-~@t6!5{MGX|;jvsxSHM`ns*8wNzq`oEZyj7q?;RC7p6chhBb5_Alg;yz)IA2~zTOt{ z7Fg7e?>=wIi9WHT{0Dk7%~rx{WIhzy0C`eG6dlga`2I-P+0;hrx@QW^X8nYrz`nBT zNF7Rw2nN!;I#2BqA_7EJVhph35#y`+aOyS_B>?PX3OBmU>e_r9d zqRSVPdU!DiL3IjlOU~kt0(A3Bj9rE;eOTn%dG&Wt`~ns%8U6X(IOTl59Hb}E>i*2Y zaZW2Eb+BprHLZ`_Z-%B-b0Q8wrVtWOvmAZ&pq6K(_&{@Ur1U&)fat^sK;pqVxK7w3 zfjQX4=_wx;>D4(aXM(FUn&S1T8+&$zlOT$ZpQWO<4Ewdk9AZ~5b=_U)67Lx>S3 zNYijiWYNn8l^$>KwM<(*2`kBzKOU8~?Ql##4+>~caZ5J?Lc3}|E0y-6OU0MOXLh>T zi7a7f1(3#E7i^~ z3N)D9xUjmE25aNAa}A{UV68+IQO*cD?f(PIKo2rKeut7D9mxxD#?`+Q*iN#XB&>fMcMFnhCn|-xRzJ(d z0sJe%64>)G^j3eaUlOHO7(v_k=j44*ktS=cj;*nx#pkLSufQ6pi2hvqYYN`^4jX72 z2UR1(9VB;Ww9cY`j4Uj-=%s`v5#6>vsOrMm%i=moeU$`(@TUkmUAJf^`|-G7kT0M$ zW)?qTJe?jI+KG?SH&KpPbz^A9`f2bI~K=S0=#v-8ZTXuw4nNQfYnQIV;;LQmJQ zAZjcQQ7_s0n(E*__xJpy&yp$k&s!k~B}-Ykzau%zl#EkNI*#R6qh2d#i~@RUCd6o2 zU=aLufm1FyiU|N~-##{oudISK?M{r`D=-No<6MReFo@53CMANZqj$ae3&NLW9I$bP z)?9F+9;8E{mh43>{8aQq6frm7kuXH`BvuD@?5<13l-~z$dtJ2MPDf``v>lX1H~OLx z%gFe*JxEvV1>nGm_y-I@E)ft$wm(vY`d7E^35^p_6OvGKylk$g{gUij@pP zc6M)yV7v+8!sxWRZBgkvrq4TU`C=1)_lXgB0w0=@yEmZNy z>g;9gG$a9TLM3eSY;WL_Dm2dt;$wIJ@0Z?a0_!_n&vMO|Ad1X;OU7S%_TCg*)Tk92 zc>rZy3uVu}M;jyqy-y%Si~QcnhKDGYuGFqwMyJrQO2dRUOC{iWPC$Q=m@}q-cSS-5 zb+K8_$QFozw9^nY;_@$_Tx^{ZU!dFE2$y9Kl3?(~L7d{9L^s#@qd`=loA(9;eB1s^ zGa0QycwSUTZiKz?3xUU6WD1w=NIQ(=MR>A>X}Wg_^S9W#WG-R*wd>QL2Yvi7+X8() z#F{+?rgA5)Feu=0xJeU^<1OnVb)ORL{0J% zp=>`eT0vUH6#UE&O$*cSS~Z@;6eiiIFJO>YO!ZPAv>)h149)QKWY3jK#R2zm#{ZtT zl)#8E+>S#mo*T-%aZermqr|fU1=IyQq&LOsc^AtS6k6WrZSM>aYLI4gLC~`yD3-Pl zejGr5(44*)wO&(@_{){O6-hz<)K|%+M-0rZnp&;1Ddr8N=Svr7-%K{&q2~b% z*0l6qRLC_8UW94otHf7Yd#>{DPPSj!aLNN$rFMv;l}l_>n698M#&nb04tUzeZX1zZ zj+@g#YKj_?}g}QJNq%Y|GIyYh+I;vvUxyWGr zbx{R_dw|3a4WmV?4hUC5?xfL52tG-Q#rdZB(~hA591Wd*BK?fM2ac4$VCJIMg$#-sMU&^J0~t@RVK@n=tC!z?1bb$NXcv>}9D>gZUZs>Mw^t!I{e8$daOUr*)1%QJ4|sZ)w0KB+FVpS$m3b@bwbM6c63|V z5a_&(GzF5Tp8jiFgkW_}oujBiz-5cyyu9wRo#wKW@BUB)L`-o)w5oPfyL6Bzn6o~o zk>AdA+2K~H^PR=WaG5<5!g0%&Dk$vIz$J@won0`>E9RNAQdQp8;dyB-L1JtA>+Sh= z^a1v`tfQRjK(C`zTU`~fVJWitHR=tfM z2T&&BFw|B7|E>a<9rKX=k|NYeP+)>?Wr-k@_Nsye>*H%MeocvTQe_ulth^WSp_B-H zjFkvy7i8-rL|K6BzS27cqH_Ilo{X;2HrONSP(Qcw6I0?Yv}f!E{7`#avTE{VUxeOX z4}Y1#tMTL{a`jd`@qX#1u)nR&LXj9aRq7Hm*$FGq;>|T|nYM9CE&CfcS2Z9etW-vF zR-uRWhpkc2f%KuH(3#|xr%4j#hJ$um@;8omh^TR!D6PZ*#=7&A3mrZ{=74mp5I+#X zfQQX7mgYN1vhWA3N5?l4NboIv_$@tX>n%M1#T>?Qr{nMy3N%$#Jink zycLmlv;X(~tt6AFJ7XcDH3BwnWebDudT_9|cjLKzKqoje6BI&|+h%!7`kc{_Ud?3y zzJhn&7;#5fDvYgbVn2xF73h0)6l+AVP)wO}a!&g2xs+u!^p{sQR}tMs0+%L*%gQt< zdN7d9(_0JfmGwC;O?N&U=g7OwiR1?a5x6GR0?p*e7ZYBHX9IaU5rmWR(%EC+H`z4J zhQZj=pFPVBR>&N51Pxf&p%ZLI(U9H+@LS%(6}4^QO04}&I8lhBK%ii@eJr6;75y`TbwD+` zo~&@S0o@mBM+jqT0&r+PvfeV5cmJp0lc1L45OI_;&*MX~RsHP+{dlLCALsmt(G3gq zbSj)raywejoW|PVwusg5^LHoQmq};Wh4M}0Ug#j#eUTvg@{bZUnuci>XHxUDR5~ow z5vN}zjO0Pfk^kgy|6Sg-9wNmq`9Wveopq^Xa{5-@75;HVpq}GMGUTm$dYkP6xsH8{ zf*Hn0XJ4q9bduT(t(mqC`V79AdBb=%_gH1QO!lL8s#7AjpYG*AovTJc#7D8?Uv%YP z)!8@<4Xg1cn#IGEh^A#L6t3$tu|vu_?TKu3WR@5cEO(pw%?wF@Dji>2Lhzpl`XdC-HfZj^#!YXSHPHzBhd&*DCS4Y8IT5Nn)4*ymPlV)!;e)G!npHL?0>{OYO|G?unW^*VV`(KdcqgA3ZGn4O>Br%jm|UZWn@` zl4ULzQNoxnXxX)GoRluwo<%FT$iO$5LL+U%tRl5PUM4TErmn~ciht0yRgz2)T1Gs6 zU9ig0=CT_tR$7T_$+-NtwledwxBzr%PKiZ2es3ROh++Qb`%hw80ahc@U_mpLT~y6p z)%FQ4Wzj}=;*3r)$}gl6Z&N<{jPI9)V+MO@w%xCZvvr9sJc2T@Q~oO>FKZH#17pKa z4(4rt7@{wT|N83+hL%HwhYkP&GLmuBVjG1b>#VE_3`tFPk^5e=dumL*i|73g#u-zL>sPq zd_2#@>sg4@QLZ+FE%VrHHjr;x0O)O7mO76}%2#V#Ig!0I!@kHB)^HTnKgOoFKR5x@ z8pi)>&eHnv?yA_QjkWiaDH0n@6}9cdQ)*}x){B14g6g4Q zK27iFL0>Ff^9$7(s8s#@_!#SG?l7nnnF$mr`982 zCS6;+s`eu1ZSJe)7*zM;dS5naCm8naq0BeW3A+G|6pnIuA_|T?EmugAToe)LNgxE! z0YyHmrARayJ+(o_fxRDA#t}2wi$o+21hXR#hNJG;Rgy#QXP{2ecKJP9S3bmQn1>VD zNSsClZW5PFyPcol1xpb5Er7hqm#rInD_JGcZ>@L4DIAh=60p&R^S5ol-mBi>C1L7> z^F3hqu_hedYYjaQ`4?L{Yp@Dc9vc`(C{0X^tXanryj}-7fy7bE1K%`!X3lubvo!g& zg#=L%^E=dk?HwQqrbV6|3cvi>sHdxeKGGo$ZpIolBMk^4C_z z7gX4F3sYX9Ty>azb7gyac4SK)K`Xy<8dJ>3%N zRl{K$7%y^+C#%A^*UszB?@ECAPP%iuzv0)`>-89YUJT5@f-;~s;qb`QKI;KK-zz%g zF)mzin^k}T_8v&@j;|;uTd;zK&m6Q4N@|DGh8+bje*MeX#Tn7;=)%s2raT$okD(_ZJfr?-8Hxn`b*?T`@CFGpb$@bhRfc z5_IjCWsqEgA+_-)M4TceyiUU%UwP`q&=*6N)C1?DiK2gC_Ihh&W=`qzHv!sRR%8tr zm`dtE85>{h=sk3G`1A^Bb!VY0LE>6xu)!gQB8FhvWBPC5_r&#m*Q7hWJLL|DsX_YW z>K(P~xrSiHW>g@UH_Xo!2finQ%pp0C7)|y!}? z+?vH;vDpk_aD9e?fhVE1kdp~x2$AwdWJo^w*)}C&)ssCg; zP3cbX7TwN~Eu$1c_9vRc-EI>JV^-+*2%sk#b`jZ~Om+Ae)4oP1KWbFol~P}Awq{vf z3Q8$0e%$KPO+llP3SsIJ1N5$CKWJSv>1HwKed7mq}BE}>2 zyk`|?EpNZJ}avL{GyffL)< zE7_(4E!39yQ=C5zTcGYJ|3g*S0!O#GW=rG*g(Iqu41rB6{~7g?GUSeI{^% zmJ{7kf;@_Df#+WxY$7fYd7;%+wF|pc{uk4GPKff~h&L#B_FPh1zaE+XiwE^*JS)KD zG6xn|a3)U+I{8-^gI<0MoZfec65E*`-abqGA1?&szo7nOSs?$Vbw{!XuN3e=zOUg3 za=PL_)T&cqu#A7IG#rHmAH>bDp)w?U@bp6*tAXgr71Jaslbj zLgKSw%^C~;G3);G0s;R2B6HvUPco&$|4lxF*80yHK!Y{1{%4wrXaUU8wj2MU{;#F} z|56&#YX*op6P*-a7Ka-Y;60Pi^+yO2pOY&R_7~F)oNgm{W|h|aX+m7UFf0Qy-av52 z5R!wt>s!35g8uD~mjMt$h@ zWV3zblMH@`0&`2L#R+L(aVY5n?Ceih*PZ&tJ5A$tZzDMBpLgc37 zHRt=>c~SD40*ejNpJAlA58^;hcO#|M5*nzgFf(uK3f42sE58|yE$(%_m(jzu(fR9H zdZ1PX>|{e<$mKV5w;B&(7H=$x80Q;jbkm3NgTo#+Hc^LsJcLxF)Q3LoZF`EVrg>8X zMwb5mMYZ1TtT4|&D*l5;R$1m|5Z%`-yiU{^8RYb|vTUcxhtP$-!bs!2G0l@1T@~=c z##nPjyz3b0;@Y=n3+4+_5SXY}6oIrzm6xWW>*V$!LUlgg@0;QH=P*;Uq33C_{Wqgy zcMl&??H_^(qGmm^)!8T%vQ?)l{#DtY`I!5DI8hQr7X|;>TsQcF_m~rv+KF3#e||!y z(h?<4oY_quJQOcTm`kYQ>$~5uB(Xr}X_erFC9Tf*@(?w4$J8XbSvLv_Fxiaki!qB@ z_PV95F0aZ9D1(tLZ^_boP)@D8%i0lnPf53zf>Ap7_||ED`%SsI7mt8dOv~g`dH=G! zLhHuPcM!vUknIQ(FsaL{1f;`O(Sy%Q!K0eDm1J_A%?%{E=5Jbn=T9Y{-eiZPGrwKw z#%TS0>11wSJFz|i%xs%ZYxd9C#ZoYwfIPYT@4VK(;nC3>I@_n5Bec@H;oR@*;Ynwn z0>Yv&3fBHvzV{YgZ5@p2uyM7#EJnvy@E!ijK}dEBbDEv^16_)k68*x%ShmEx7o16_ zoxtQSZrc*a< z{cQbDdP4-Y9Ybtm9eq6VB=7AjnjzFNNq(3Xa%k+NbNmTbjCgan#t2F(gE}sjP9%C5 zkibR02xEiyaUn>YgCPDG-T=iG;W3p6dNS9^sV_chS%Jduwt~kSmEIGgniEy{L(X}s z+2H|H1EWcoh;aYWo^h0oj|{ zExc;-r0%_NjehYJquW&+WpcpG9j3w&&{n7$JXZ3@5k1nYhg~xI!UEX><^iKrZ@h^} zWn+Rv3R@j1k{Fph_{#SsYgBeyLW$C^Gd*OA*(ih+!iO7{fg6o7I)2; zr%XF{g_Q0V!47GO?HFyByPwDkvcFjM)UY%7ZRs9J!thu1J7(C719x%7Zka}M{YMwm z?f)vH0jE8;ux(AQ22g+kW0DMI2bs}_w;_5($9=NQL^Db*h0G(ku(gzZ;l?*H?UECQ zK3|_o*K{}^gij_9b3eRiq@zx2?2-_)sG4a}rlDnooEVCAQcp^9OVCodW>bt}HIxeZ zx!9^1nPBamYZ&OOIE=c%)4`LRxj89xd>ou(2nC^uLTc*P2YwC|J+nQ!UqW#9Y(hqtD$E>5M)GR5y=TyjTTiBeFMlH@99%`-kI zIra{6Dc)~(aj=6fhN^NDuJAT}{&LlmTM)=unCRiM^H}+d?ZXYEWz_1MIPRysltS%H zB!7NX>AzgkBf@{VLaj`70De#)6kazLJvaym4Fw1Y>i^>q*}K`9m^=TpxBQP!bfIGy z|Cb9HSnIkCDt@+)N)>{vv=$Xs^0(5X(%Xlq4;)O{l-C*F_5GALE*V*h18;TzkdX-- zf7a7K_x6L8NZ_kj*+EeZ)tQ66N`S>X1i}}iVS4H1_@~n`PB&1@q-6lb(#)DKdFaLS zd$bcN9AEPTA8~MI(c%msW zbitv12UHq$XWz7CG%~TiNZp=~5`J07MYvw>P0v;?YB*ls7iznsQE`Bmqd8VHMaQsX#(YZN2;_#f9*K+L%Ru9-SP3!zJ5d>>J|5z!}gsE&i7? zaCMP7&m)4Ntib@ZJr?l@KqQ1A8HVA`o>jjf#%A!8`V6B;AVcGGo1DBRrS(KVDwQJHxh1pcLxH}w|$@|S=>{HHpgKp^E0*#Pb zmbkugVklrNib%8?Vr*hgRKu`s^4msWmW&M{<*AwH0B%${eYYE9H@kvlA4VY5-@z?ihIz3M zp&?CD3Y5?Ts)&nd6zw<{2=Y$A>7p*N-!Xclw-_*(M~rmC)=(qKE>J_rJT#5IHZ%?L zIH7MOAhJtOHkRXfY4>Ln_d3|^q@xZ_jtky4h%{C`aM%*GYV`toE zfO>;)5>QSR=<|jMH$3>MU>|+AP=oWq)qW4npoCsXN>ZK%yQjuBbf8<#N30$ZA891@ z^J`z{pkK@=JT%B~GiHE02T@3`{-~-S|7_bTYS>~E^`seq&?zx~H|M}x=Z=o3k$@c_ zBa_jpNSZ=ws2JE$ENoNsO6?{McCe-oTuAuC`WBL#hI-0vJ*L)KTp)|v;P?cT!@XcL zN>7G_n)YMUoq9Cx;P`oC;ex~u-?$~xUZa4vR6}Rv3fcpAqgtfSz6kNc*mtZx`d&i^ zlDb}Z4tpZ-{aZg!n4+(9%SyoaM$!T9re=S}q9<>;uPpYSvCqcg&wsjjfc7Z0eROI= zwfx@cg#GH(?-!MXTM&Fvdw%JdHtfLmRKwaFondDyG%lThQy6nCFqBQ(Lh2GKT@2T0 z5MKVO(XGA%h7={7h5~ys{m**2Hoqa$@0$S$|3|H9dTa|o2=D(WlmtQfXJ!8T@k>8x z0SEvlY164&0m6Wjb<1_u)W diff --git a/getfile.cpp b/getfile.cpp index 67f419546..2350ba515 100644 --- a/getfile.cpp +++ b/getfile.cpp @@ -24,6 +24,7 @@ void getfile(QString fname, int ntrperiod) fread(jt9com_.d2,1,44,fp); int nrd=fread(jt9com_.d2,2,npts,fp); fclose(fp); + jt9com_.newdat=1; } } diff --git a/lib/decode9.f90 b/lib/decode9.f90 index f8688f59f..46cfdeef6 100644 --- a/lib/decode9.f90 +++ b/lib/decode9.f90 @@ -83,6 +83,7 @@ subroutine decode9(i1SoftSymbols,limit,nlim,msg) call packbits(i1DecodedBits,12,6,i4Decoded6BitWords) call unpackmsg(i4Decoded6BitWords,msg) !Unpack decoded msg if(index(msg,'000AAA ').gt.0) msg=' ' + if(index(msg,'15P6715P67WCV').gt.0) msg=' ' endif return diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 293fcaea0..d796156ac 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -1,4 +1,4 @@ -subroutine decoder(ntrSeconds,ndepth,nRxLog,c0) +subroutine decoder(ntrSeconds,ndepth,nRxLog,c00) ! Decoder for JT9. Can run stand-alone, reading data from *.wav files; ! or as the back end of wsjt-x, with data placed in a shared memory region. @@ -13,13 +13,21 @@ subroutine decoder(ntrSeconds,ndepth,nRxLog,c0) real*4 ccfred(NSMAX) integer*1 i1SoftSymbols(207) integer*2 id2 - complex c0(NDMAX) - common/jt9com/ss(184,NSMAX),savg(NSMAX),id2(NMAX),nutc,ndiskdat, & - ntr,nfqso,nagain,newdat,npts8,nfb,ntol,kin,nsynced,ndecoded + complex c0(NDMAX),c00(NDMAX) + common/jt9com/ss0(184,NSMAX),savg(NSMAX),id2(NMAX),nutc0,ndiskdat, & + ntr,nfqso,nagain,newdat,npts80,nfb,ntol,kin,nsynced,ndecoded + common/jt9comB/ss(184,NSMAX),c0 logical first data first/.true./ save + if(newdat.ne.0) then + ss=ss0 + c0=c00 + nutc=nutc0 + npts8=npts80 + endif + ntrMinutes=ntrSeconds/60 newdat=1 nsynced=0 diff --git a/lib/jt9sim.f90 b/lib/jt9sim.f90 index 3df7406f5..16f40a0f9 100644 --- a/lib/jt9sim.f90 +++ b/lib/jt9sim.f90 @@ -140,15 +140,15 @@ program jt9sim enddo call unpackbits(i4DataSymNoGray,69,3,i1ScrambledBits) call interleave9(i1ScrambledBits,-1,i1Bits) - + do i=1,206 i4=-10 if(i1Bits(i).eq.1) i4=10 i4=i4+128 i1SoftSymbols(i)=i1 enddo - - call decode9(i1SoftSymbols,msg) + limit=1000 + call decode9(i1SoftSymbols,limit,nlim,msg) if(msg.ne.msg0) print*,'Decode error: ',msg0,' ',msg endif enddo diff --git a/lib/symspec.f90 b/lib/symspec.f90 index b2d51d951..7f1791292 100644 --- a/lib/symspec.f90 +++ b/lib/symspec.f90 @@ -1,4 +1,4 @@ -subroutine symspec(k,ntrperiod,nsps,nb,nbslider,pxdb,s,red, & +subroutine symspec(k,ntrperiod,nsps,ingain,nb,nbslider,pxdb,s,red, & df3,ihsym,nzap,slimit,lstrong,c0,npts8) ! Input: @@ -82,10 +82,11 @@ subroutine symspec(k,ntrperiod,nsps,nb,nbslider,pxdb,s,red, & if(nwindow.ne.0) kstep1=NFFT1/2 fac=2.0/NFFT1 nblks=(k-k1)/kstep1 + gain=10.0**(0.05*ingain) do nblk=1,nblks j=k1+1 do i=1,NFFT1 - x0(i)=id2(k1+i) + x0(i)=gain*id2(k1+i) enddo call timf2(x0,k,NFFT1,nwindow,nb,peaklimit,x1, & slimit,lstrong,px,nzap) diff --git a/mainwindow.cpp b/mainwindow.cpp index 221d7589b..86dcc618c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -113,6 +113,8 @@ MainWindow::MainWindow(QWidget *parent) : m_NB=false; m_mode="JT9-1"; m_TRperiod=60; + m_inGain=0; + m_dataAvailable=false; decodeBusy(false); ui->xThermo->setFillBrush(Qt::green); @@ -159,8 +161,11 @@ MainWindow::MainWindow(QWidget *parent) : m_monitoring=true; // Start with Monitoring ON soundInThread.setMonitoring(m_monitoring); m_diskData=false; - m_tol=50; g_pWideGraph->setTol(m_tol); + static int ntol[] = {1,2,5,10,20,50,100,200,500,1000}; + for (int i=0; i<10; i++) { + if(ntol[i]==m_tol) ui->tolSpinBox->setValue(i); + } // Create "m_worked", a dictionary of all calls in wsjt.log QFile f("wsjt.log"); @@ -240,6 +245,8 @@ void MainWindow::writeSettings() settings.setValue("NB",m_NB); settings.setValue("NBslider",m_NBslider); settings.setValue("TxFreq",m_txFreq); + settings.setValue("Tol",m_tol); + settings.setValue("InGain",m_inGain); settings.endGroup(); } @@ -296,6 +303,9 @@ void MainWindow::readSettings() m_saveDecoded=ui->actionSave_decoded->isChecked(); m_saveAll=ui->actionSave_all->isChecked(); m_ndepth=settings.value("NDepth",0).toInt(); + m_tol=settings.value("Tol",5).toInt(); + m_inGain=settings.value("InGain",0).toInt(); + ui->inGain->setValue(m_inGain); ui->actionF4_sets_Tx6->setChecked(m_kb8rq); settings.endGroup(); @@ -340,7 +350,7 @@ void MainWindow::dataSink(int k) nb=0; if(m_NB) nb=1; trmin=m_TRperiod/60; - symspec_(&k, &trmin, &m_nsps, &nb, &m_NBslider, &px, s, red, + symspec_(&k, &trmin, &m_nsps, &m_inGain, &nb, &m_NBslider, &px, s, red, &df3, &ihsym, &nzap, &slimit, lstrong, c0, &npts8); if(ihsym <=0) return; QString t; @@ -380,6 +390,7 @@ void MainWindow::dataSink(int k) } // This is a bit strange. Why do we need the "-3" ??? if(ihsym == m_hsymStop-3) { + m_dataAvailable=true; jt9com_.npts8=(ihsym*m_nsps)/16; jt9com_.newdat=1; jt9com_.nagain=0; @@ -731,6 +742,7 @@ void MainWindow::diskWriteFinished() //diskWriteFinished void MainWindow::decoderFinished() //decoderFinished { + jt9com_.newdat=0; QFile f("decoded.txt"); f.open(QIODevice::ReadOnly); QTextStream in(&f); @@ -834,15 +846,26 @@ void MainWindow::on_DecodeButton_clicked() //Decode request void MainWindow::freezeDecode(int n) //freezeDecode() { + static int ntol[] = {1,2,5,10,20,50,100,200,500,1000}; if(!m_decoderBusy) { jt9com_.newdat=0; jt9com_.nagain=1; + int i; + if(m_mode=="JT9-1") i=4; + if(m_mode=="JT9-2") i=4; + if(m_mode=="JT9-5") i=3; + if(m_mode=="JT9-10") i=2; + if(m_mode=="JT9-30") i=1; + m_tol=ntol[i]; + g_pWideGraph->setTol(m_tol); + ui->tolSpinBox->setValue(i); decode(); } } void MainWindow::decode() //decode() { + if(!m_dataAvailable) return; decodeBusy(true); ui->DecodeButton->setStyleSheet(m_pbdecoding_style1); @@ -855,8 +878,6 @@ void MainWindow::decode() //decode() jt9com_.nutc=100*ihr + imin; } -// jt9com_.newdat=1; -// jt9com_.nagain=0; jt9com_.nfqso=g_pWideGraph->QSOfreq(); m_tol=g_pWideGraph->Tol(); jt9com_.ntol=m_tol; @@ -1561,3 +1582,8 @@ void MainWindow::on_actionDeepestDecode_triggered() m_ndepth=3; ui->actionDeepestDecode->setChecked(true); } + +void MainWindow::on_inGain_valueChanged(int n) +{ + m_inGain=n; +} diff --git a/mainwindow.h b/mainwindow.h index 3832792d1..150534c26 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -105,16 +105,12 @@ private slots: void on_NBslider_valueChanged(int value); void on_TxFreqSpinBox_valueChanged(int arg1); void on_pbTxFreq_clicked(); - void on_actionSave_synced_triggered(); - void on_actionSave_decoded_triggered(); - void on_actionQuickDecode_triggered(); - void on_actionMediumDecode_triggered(); - void on_actionDeepestDecode_triggered(); + void on_inGain_valueChanged(int n); private: Ui::MainWindow *ui; @@ -142,6 +138,7 @@ private: qint32 m_nsps; qint32 m_hsymStop; qint32 m_len1; + qint32 m_inGain; bool m_monitoring; bool m_transmitting; @@ -161,6 +158,7 @@ private: bool m_kb8rq; bool m_NB; bool m_call3Modified; + bool m_dataAvailable; char m_decoded[80]; @@ -228,10 +226,10 @@ extern int ptt(int nport, int itx, int* iptt); extern "C" { //----------------------------------------------------- C and Fortran routines -void symspec_(int* k, int* ntrperiod, int* nsps, int* nb, int* m_NBslider, - float* px, float s[], float red[], float* df3, int* nhsym, - int* nzap, float* slimit, uchar lstrong[], float c0[], - int* npts8); +void symspec_(int* k, int* ntrperiod, int* nsps, int* ingain, int* nb, + int* m_NBslider, float* px, float s[], float red[], + float* df3, int* nhsym, int* nzap, float* slimit, + uchar lstrong[], float c0[], int* npts8); void genjt9_(char* msg, char* msgsent, int itone[], int len1, int len2); diff --git a/mainwindow.ui b/mainwindow.ui index d0cdb4ba9..4fab17f62 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -40,7 +40,7 @@ 11 2 - 565 + 571 423 @@ -287,6 +287,25 @@ p, li { white-space: pre-wrap; } + + + + + 16777215 + 190 + + + + -50 + + + 50 + + + Qt::Vertical + + + diff --git a/plotter.cpp b/plotter.cpp index be6c28456..426a76c87 100644 --- a/plotter.cpp +++ b/plotter.cpp @@ -382,6 +382,11 @@ void CPlotter::setTol(int n) //setTol() DrawOverlay(); } +int CPlotter::Tol() //Tol() +{ + return m_tol; +} + void CPlotter::setBinsPerPixel(int n) // set nbpp { m_binsPerPixel = n; diff --git a/plotter.h b/plotter.h index 116ac3086..1dcd08ab3 100644 --- a/plotter.h +++ b/plotter.h @@ -35,7 +35,6 @@ public: qint32 m_nSpan; qint32 m_binsPerPixel; qint32 m_fQSO; - qint32 m_tol; qint32 m_fCal; qint32 m_w; @@ -52,6 +51,7 @@ public: void UpdateOverlay(); void setDataFromDisk(bool b); void setTol(int n); + int Tol(); void setBinsPerPixel(int n); int binsPerPixel(); void setFQSO(int n, bool bf); @@ -114,6 +114,7 @@ private: qint32 m_h; qint32 m_h1; qint32 m_h2; + qint32 m_tol; private slots: void mousePressEvent(QMouseEvent *event); diff --git a/soundin.cpp b/soundin.cpp index 61e47ac5f..11b89de10 100644 --- a/soundin.cpp +++ b/soundin.cpp @@ -29,6 +29,7 @@ typedef struct { int kin; //Parameters sent to/from the portaudio callback function bool bzero; + bool monitoring; } paUserData; //--------------------------------------------------------------- a2dCallback @@ -61,7 +62,9 @@ extern "C" int a2dCallback( const void *inputBuffer, void *outputBuffer, nbytes=2*framesToProcess; //Bytes per frame k=udata->kin; - memcpy(&jt9com_.d2[k],inputBuffer,nbytes); //Copy all samples to d2 + if(udata->monitoring) { + memcpy(&jt9com_.d2[k],inputBuffer,nbytes); //Copy all samples to d2 + } udata->kin += framesToProcess; jt9com_.kin=udata->kin; @@ -80,6 +83,7 @@ void SoundInThread::run() //SoundInThread::run() udata.kin=0; //Buffer pointer udata.bzero=false; //Flag to request reset of kin + udata.monitoring=m_monitoring; inParam.device=m_nDevIn; //### Input Device Number ### inParam.channelCount=1; //Number of analog channels @@ -99,7 +103,7 @@ void SoundInThread::run() //SoundInThread::run() FRAMES_PER_BUFFER, //Frames per buffer // paClipOff+paDitherOff, //No clipping or dithering paClipOff, //No clipping - a2dCallback, //Input callbeck routine + a2dCallback, //Input callback routine &udata); //userdata paerr=Pa_StartStream(inStream); @@ -121,6 +125,7 @@ void SoundInThread::run() //SoundInThread::run() while (!qe) { qe = quitExecution; if (qe) break; + udata.monitoring=m_monitoring; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; nsec = ms/1000; // Time according to this computer ntr = nsec % m_TRperiod; diff --git a/widegraph.cpp b/widegraph.cpp index 85a51400c..73b093ff6 100644 --- a/widegraph.cpp +++ b/widegraph.cpp @@ -214,14 +214,14 @@ void WideGraph::wideFreezeDecode(int n) void WideGraph::setTol(int n) { - ui->widePlot->m_tol=n; + ui->widePlot->setTol(n); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } int WideGraph::Tol() { - return ui->widePlot->m_tol; + return ui->widePlot->Tol(); } void WideGraph::setFcal(int n) diff --git a/wsjtx.iss b/wsjtx.iss index fcf52a5b1..1d457d1c3 100644 --- a/wsjtx.iss +++ b/wsjtx.iss @@ -1,6 +1,6 @@ [Setup] AppName=wsjtx -AppVerName=wsjtx Version 0.2 r2709 +AppVerName=wsjtx Version 0.2 r2712 AppCopyright=Copyright (C) 2001-2012 by Joe Taylor, K1JT DefaultDirName=c:\wsjtx DefaultGroupName=wsjtx