diff --git a/Makefile.win b/Makefile.win index 5a9633785..5c7d67fa6 100644 --- a/Makefile.win +++ b/Makefile.win @@ -22,7 +22,7 @@ SRCS2F90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \ SRCS2F77 = wsjt1.f avesp2.f bzap.f \ stdecode.f indexx.f s2shape.f flat2.f gen65.f chkmsg.f \ gentone.f \ - set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f ping.f \ + set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \ peakup.f sync.f detect.f avemsg65.f decode65.f demod64a.f \ encode65.f extract.f flat1.f four2.f gencw.f getpfx1.f \ getpfx2.f getsnr.f graycode.f grid2k.f interleave63.f k2grid.f \ diff --git a/gencw.f b/gencw.f deleted file mode 100644 index 2c119456d..000000000 --- a/gencw.f +++ /dev/null @@ -1,80 +0,0 @@ - subroutine gencw(msg,wpm,freqcw,samfac,TRPeriod,iwave,nwave) - - parameter (NMAX=150*11025) - character msg*22,word12*22,word3*22 - integer*2 iwave(NMAX) - integer TRPeriod - - integer*1 idat(5000),idat1(460),idat2(200) - real*8 dt,t,twopi,pha,dpha,tdit,samfac - data twopi/6.283185307d0/ - - nwords=0 - do i=2,22 - if(msg(i-1:i).eq.' ') go to 10 - if(msg(i:i).eq.' ') then - nwords=nwords+1 - j=j0 - j0=i+1 - endif - enddo - 10 ntype=1 !Call1+Call2, CQ+Call - word12=msg - if(nwords.eq.3) then - word3=msg(j:j0-1) - word12(j-1:)=' ' - ntype=3 !BC+RO, BC+RRR, BC+73 - if(word3.eq.'OOO') ntype=2 !BC+OOO - endif - - tdit=1.2d0/wpm !Key-down dit time, seconds - call morse(word12,idat1,nmax1) !Encode part 1 of msg - t1=tdit*nmax1 !Time for part1, once - nrpt1=TRPeriod/t1 !Repetitions of part 1 - if(ntype.eq.2) nrpt1=0.75*TRPeriod/t1 - if(ntype.eq.3) nrpt1=1 - t1=nrpt1*t1 !Total time for part 1 - nrpt2=0 - t2=0. - if(ntype.ge.2) then - call morse(word3,idat2,nmax2) !Encode part 2 - t2=tdit*nmax2 !Time for part 2, once - nrpt2=(TRPeriod-t1)/t2 !Repetitions of part 2 - t2=nrpt2*t2 !Total time for part 2 - endif - - j=0 - do n=1,nrpt1 - do i=1,nmax1 - j=j+1 - idat(j)=idat1(i) - enddo - enddo - do n=1,nrpt2 - do i=1,nmax2 - j=j+1 - idat(j)=idat2(i) - enddo - enddo - - dt=1.d0/(11025.d0*samfac) - nwave=j*tdit/dt - pha=0. - dpha=twopi*freqcw*dt - t=0. - s=0. - u=wpm/(11025*0.03) - do i=1,nwave - t=t+dt - pha=pha+dpha - j=t/tdit + 1 -! iwave(i)=0 -! if(idat(j).ne.0) iwave(i)=nint(32767.d0*sin(pha)) - s=s + u*(idat(j)-s) - iwave(i)=nint(s*32767.d0*sin(pha)) - enddo - - return - end - - include 'gencwid.f' diff --git a/jtaudio.c b/jtaudio.c index 087b9e8c0..318d6e587 100644 --- a/jtaudio.c +++ b/jtaudio.c @@ -62,74 +62,6 @@ void GetSystemTime(SYSTEMTIME *st){ } #endif -// Input callback routine: -static int SoundIn( void *inputBuffer, void *outputBuffer, - unsigned long framesPerBuffer, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ) -{ - paTestData *data = (paTestData*)userData; - short *in = (short*)inputBuffer; - unsigned int i; - static int n0; - static int ia=0; - static int ib=0; - static int ic=0; - static int TxOKz=0; - static int ncall=0; - static int nsec0=0; - static double stime0=86400.0; - int nsec; - double stime; - SYSTEMTIME st; - - // Get System time - GetSystemTime(&st); - nsec = (int) (st.Hour*3600.0 + st.Minute*60.0 + st.Second); - stime = nsec + st.Millisecond*0.001 + *data->ndsec*0.1; - *data->Tsec = stime; - nsec=(int)stime; - ncall++; - - // NB: inputBufferAdcTime and currentTime do not work properly. - /* - if(nsec!=nsec0) { - printf("%f %f %f %f\n",stime,timeInfo->inputBufferAdcTime, - timeInfo->currentTime,timeInfo->outputBufferDacTime); - } - */ - - // if((inputBuffer==NULL) & (ncall>2) & (stime>stime0)) { - if((statusFlags!=0) & (ncall>2) & (stime>stime0)) { - if(*data->ndebug) - printf("Status flags %d at Tsec = %7.1f s, DT = %7.1f\n", - statusFlags,stime,stime-stime0); - stime0=stime; - } - - if((statusFlags&1)==0) { - //increment buffer pointers only if data available - ia=*data->iwrite; - ib=*data->ibuf; - ib++; //Increment ibuf - if(ib>1024) ib=1; - *data->ibuf=ib; - data->tbuf[ib-1]=stime; - for(i=0; iy1[ia] = (*in++); - data->y2[ia] = (*in++); - ia++; - } - } - - if(ia >= data->nbuflen) ia=0; //Wrap buffer pointer if necessary - *data->iwrite = ia; //Save buffer pointer - fivehz_(); //Call fortran routine - nsec0=nsec; - return 0; -} - // Output callback routine: static int SoundOut( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, @@ -201,11 +133,8 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], double tbuf[], int *ibuf, int *ndsec) { paTestData data; - PaStream *instream; PaStream *outstream; - PaStreamParameters inputParameters; PaStreamParameters outputParameters; - // PaStreamInfo *streamInfo; int nfs,ndin,ndout; PaError err1,err2,err2a,err3,err3a; @@ -239,27 +168,7 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], ndin=*ndevin; ndout=*ndevout; dnfs=(double)nfs; - printf("Opening device %d for input, %d for output.\n",ndin,ndout); - - inputParameters.device=*ndevin; - inputParameters.channelCount=2; - inputParameters.sampleFormat=paInt16; - inputParameters.suggestedLatency=1.0; - inputParameters.hostApiSpecificStreamInfo=NULL; - err2=Pa_OpenStream( - &instream, //address of stream - &inputParameters, - NULL, - dnfs, //Sample rate - 2048, //Frames per buffer - paNoFlag, - SoundIn, //Callback routine - &data); //address of data structure - if(err2) { - printf("Error opening Audio stream for input.\n"); - printf("%s\n",Pa_GetErrorText(err2)); - goto error; - } + printf("Opening device %d for output.\n",ndout); outputParameters.device=*ndevout; outputParameters.channelCount=2; @@ -281,12 +190,6 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], goto error; } - err3=Pa_StartStream(instream); //Start input stream - if(err3) { - printf("Error starting input Audio stream\n"); - printf("%s\n",Pa_GetErrorText(err3)); - goto error; - } err3a=Pa_StartStream(outstream); //Start output stream if(err3a) { printf("Error starting output Audio stream\n"); @@ -294,25 +197,21 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], goto error; } - printf("Audio streams running normally.\n******************************************************************\n"); + printf("Audio output stream running normally.\n******************************************************************\n"); - while(Pa_IsStreamActive(instream)) { + while(Pa_IsStreamActive(outstream)) { if(*ngo==0) goto StopStream; - // printf("CPU: %f\n",Pa_GetStreamCpuLoad(stream)); Pa_Sleep(200); } StopStream: - Pa_AbortStream(instream); // Abort stream - Pa_CloseStream(instream); // Close stream, we're done. Pa_AbortStream(outstream); // Abort stream Pa_CloseStream(outstream); // Close stream, we're done. Pa_Terminate(); return(0); error: - printf("%d %d %f %d %d %d %d %d\n",ndin,ndout,dnfs,err1, - err2,err2a,err3,err3a); + printf("%d %f %d %d %d\n",ndout,dnfs,err1,err2a,err3a); Pa_Terminate(); return(1); } @@ -329,16 +228,6 @@ int padevsub_(int *numdev, int *ndefin, int *ndefout, Pa_Initialize(); - /* - n=Pa_GetHostApiCount(); - printf("HostAPI Type #Devices \n"); - for(i=0; itype, - hostapi->deviceCount,hostapi->name); - } - */ - // numDevices = Pa_CountDevices(); numDevices = Pa_GetDeviceCount(); *numdev=numDevices; diff --git a/map65.py b/map65.py index 138046a92..13778ce9a 100644 --- a/map65.py +++ b/map65.py @@ -79,7 +79,6 @@ nosh441=IntVar() noshjt65=IntVar() nsked=IntVar() setseq=IntVar() -ShOK=IntVar() slabel="Sync " textheight=7 tx6alt="" @@ -108,7 +107,6 @@ def restart(): #------------------------------------------------------ restart2 def restart2(): - Audio.gcom2.shok=ShOK.get() Audio.gcom2.nrestart=1 #------------------------------------------------------ toggle_freeze @@ -491,8 +489,6 @@ def ModeJT65(): cbfreeze.configure(state=NORMAL) cbafc.configure(state=NORMAL) sked.configure(state=NORMAL) - report.configure(state=DISABLED) - shmsg.configure(state=DISABLED) graph2.configure(bg='#66FFFF') itol=4 inctol() @@ -748,16 +744,6 @@ def decdsec(event): ldsec.configure(text='Dsec '+str(0.1*idsec),bg=bg) Audio.gcom1.ndsec=idsec -#------------------------------------------------------ toggle_shift -def toggle_shift(event): - Audio.gcom2.nadd5=1-Audio.gcom2.nadd5 - if Audio.gcom2.nadd5: - bg='red' - lshift.configure(text='Shift 5.0',bg=bg) - else: - bg='white' - lshift.configure(text='Shift 0.0',bg=bg) - #------------------------------------------------------ erase def erase(event=NONE): graph1.delete(ALL) @@ -1102,7 +1088,7 @@ def bandmap(event=NONE): #------------------------------------------------------ update def update(): - global root_geom,isec0,naz,nel,ndmiles,ndkm,nhotaz,nhotabetter,nopen, \ + global root_geom,isec0,naz,nel,ndmiles,ndkm,nopen, \ im,pim,cmap0,isync,isync_save,idsec,first,itol,txsnrdb,tx6alt,\ bm_geom @@ -1158,13 +1144,6 @@ def update(): Audio.gcom2.ndecoding=4 Audio.gcom2.nagain=1 g.freeze_decode=0 - - n=int(20.0*log10(g.rms/770.0+0.01)) - t="Rx noise:%3d dB" % (n,) - if n>=-10 and n<=10: - msg4.configure(text=t,bg='gray85') - else: - msg4.configure(text=t,bg='red') t=g.ftnstr(Audio.gcom2.decodedfile) # i=t.rfind(".") @@ -1176,23 +1155,21 @@ def update(): g.mode=mode.get() first=0 - samfac_in=Audio.gcom1.mfsample/110250.0 samfac_out=Audio.gcom1.mfsample2/110250.0 xin=1 xout=1 try: - xin=samfac_in/options.samfacin.get() xout=samfac_out/options.samfacout.get() - if xin<0.999 or xin>1.001 or xout<0.999 or xout>1.001: - lab8.configure(text="%6.4f %6.4f" \ - % (options.samfacin.get(),options.samfacout.get()), \ + if xout<0.999 or xout>1.001: + lab8.configure(text="%6.4f" \ + % (options.samfacout.get()), \ fg='black',bg='red') else: lab8.configure(fg='gray85',bg='gray85') except: pass - msg1.configure(text="%6.4f %6.4f" % (samfac_in,samfac_out)) + msg1.configure(text="%6.4f" % (samfac_out)) msg2.configure(text=mode.get()) t="Freeze DF:%4d" % (int(Audio.gcom2.mousedf),) if abs(int(Audio.gcom2.mousedf))>600: @@ -1202,9 +1179,6 @@ def update(): bdecode.configure(bg='gray85',activebackground='gray95') if Audio.gcom2.ndecoding: #Set button bg=light_blue while decoding bdecode.configure(bg='#66FFFF',activebackground='#66FFFF') - msg5.configure(text="TR Period: %d s" % (Audio.gcom1.trperiod,), \ - bg='gray85') - tx1.configure(bg='white') tx2.configure(bg='white') tx3.configure(bg='white') @@ -1289,7 +1263,6 @@ def update(): # Save some parameters g.mode=mode.get() - g.report=report.get() Audio.gcom1.txfirst=TxFirst.get() try: Audio.gcom1.samfacin=options.samfacin.get() @@ -1309,7 +1282,6 @@ def update(): tx=(tx1,tx2,tx3,tx4,tx5,tx6) Audio.gcom2.txmsg=(tx[ntx.get()-1].get()+' ')[:28] Audio.gcom2.mode=(mode.get()+' ')[:6] - Audio.gcom2.shok=ShOK.get() Audio.gcom2.nsave=nsave.get() Audio.gcom2.nzap=nzap.get() Audio.gcom2.ndebug=ndebug.get() @@ -1420,21 +1392,19 @@ modemenu.add_radiobutton(label = 'JT65C', variable=mode, command = ModeJT65C, \ #------------------------------------------------------ Decode menu decodebutton = Menubutton(mbar, text = 'Decode') decodebutton.pack(side = LEFT) -decodemenu = Menu(decodebutton, tearoff=1) +decodemenu = Menu(decodebutton, tearoff=0) decodebutton['menu'] = decodemenu -decodemenu.JT65=Menu(decodemenu,tearoff=0) -decodemenu.JT65.add_checkbutton(label='Only EME calls',variable=neme) -decodemenu.JT65.add_checkbutton(label='No Shorthands if Tx 1',variable=noshjt65) -decodemenu.JT65.add_separator() -decodemenu.JT65.add_radiobutton(label = 'No Deep Search', +decodemenu.add_checkbutton(label='Only EME calls',variable=neme) +decodemenu.add_checkbutton(label='No Shorthands if Tx 1',variable=noshjt65) +decodemenu.add_separator() +decodemenu.add_radiobutton(label = 'No Deep Search', variable=ndepth, value=0) -decodemenu.JT65.add_radiobutton(label = 'Normal Deep Search', +decodemenu.add_radiobutton(label = 'Normal Deep Search', variable=ndepth, value=1) -decodemenu.JT65.add_radiobutton(label = 'Aggressive Deep Search', +decodemenu.add_radiobutton(label = 'Aggressive Deep Search', variable=ndepth, value=2) -decodemenu.JT65.add_radiobutton(label ='Include Average in Aggressive Deep Search', +decodemenu.add_radiobutton(label ='Include Average in Aggressive Deep Search', variable=ndepth, value=3) -decodemenu.add_cascade(label = 'JT65',menu=decodemenu.JT65) #------------------------------------------------------ Save menu savebutton = Menubutton(mbar, text = 'Save') @@ -1459,6 +1429,7 @@ bandmenu.add_radiobutton(label = '144', variable=nfreq,value=144) bandmenu.add_radiobutton(label = '222', variable=nfreq,value=222) bandmenu.add_radiobutton(label = '432', variable=nfreq,value=432) bandmenu.add_radiobutton(label = '1296', variable=nfreq,value=1296) +bandmenu.add_radiobutton(label = '2304', variable=nfreq,value=2304) nfreq.set(144) #------------------------------------------------------ Help menu helpbutton = Menubutton(mbar, text = 'Help') @@ -1651,8 +1622,6 @@ bAdd=Button(f5a, text='Add',command=addtodb,padx=1,pady=1) bAdd.grid(column=2,row=1,sticky='EW',padx=4) labAz=Label(f5a,text='Az 257 El 15',width=11) labAz.grid(column=1,row=2) -labHotAB=Label(f5a,bg='#FFCCFF',text='HotA: 247') -labHotAB.grid(column=0,row=2,sticky='EW',padx=4,pady=3) labDist=Label(f5a,text='16753 km') labDist.grid(column=2,row=2) @@ -1690,11 +1659,8 @@ Button(f5b,text='Defaults',command=defaults,padx=1,pady=1).grid(column=0, row=3,sticky='EW') ldsec=Label(f5b, bg='white', fg='black', text='Dsec 0.0', width=8, relief=RIDGE) ldsec.grid(column=0,row=4,ipadx=3,padx=2,pady=5,sticky='EW') -lshift=Label(f5b, bg='white', fg='black', text='Shift 0.0', width=8, relief=RIDGE) -lshift.grid(column=1,row=4,ipadx=3,padx=2,pady=5,sticky='EW') Widget.bind(ldsec,'',incdsec) Widget.bind(ldsec,'',decdsec) -Widget.bind(lshift,'',toggle_shift) f5b.pack(side=LEFT,expand=0,fill=BOTH) @@ -1702,13 +1668,6 @@ f5b.pack(side=LEFT,expand=0,fill=BOTH) f5c=Frame(iframe5,bd=2,relief=GROOVE) txfirst=Checkbutton(f5c,text='Tx First',justify=RIGHT,variable=TxFirst) f5c2=Frame(f5c,bd=0) -labreport=Label(f5c2,text='Rpt',width=4) -report=Entry(f5c2, width=4) -report.insert(0,'26') -labreport.pack(side=RIGHT,expand=1,fill=BOTH) -report.pack(side=RIGHT,expand=1,fill=BOTH) -shmsg=Checkbutton(f5c,text='Sh Msg',justify=RIGHT,variable=ShOK, - command=restart2) sked=Checkbutton(f5c,text='Sked',justify=RIGHT,variable=nsked) genmsg=Button(f5c,text='GenStdMsgs',underline=0,command=GenStdMsgs, padx=1,pady=1) @@ -1718,7 +1677,6 @@ auto.focus_set() txfirst.grid(column=0,row=0,sticky='W',padx=4) f5c2.grid(column=0,row=1,sticky='W',padx=4) -shmsg.grid(column=0,row=2,sticky='W',padx=4) sked.grid(column=0,row=3,sticky='W',padx=4) genmsg.grid(column=0,row=4,sticky='W',padx=4) auto.grid(column=0,row=5,sticky='EW',padx=4) @@ -1774,14 +1732,14 @@ iframe5.pack(expand=1, fill=X, padx=4) iframe6 = Frame(frame, bd=1, relief=SUNKEN) msg1=Message(iframe6, text=' ', width=300,relief=SUNKEN) msg1.pack(side=LEFT, fill=X, padx=1) -msg2=Message(iframe6, text='Message #2', width=300,relief=SUNKEN) +msg2=Message(iframe6, text="Message #2", width=300,relief=SUNKEN) msg2.pack(side=LEFT, fill=X, padx=1) msg3=Message(iframe6,width=300,relief=SUNKEN) msg3.pack(side=LEFT, fill=X, padx=1) -msg4=Message(iframe6, text='Message #4', width=300,relief=SUNKEN) -msg4.pack(side=LEFT, fill=X, padx=1) -msg5=Message(iframe6, text='Message #5', width=300,relief=SUNKEN) -msg5.pack(side=LEFT, fill=X, padx=1) +#msg4=Message(iframe6, text="", width=300,relief=SUNKEN) +#msg4.pack(side=LEFT, fill=X, padx=1) +#msg5=Message(iframe6, text="", width=300,relief=SUNKEN) +#msg5.pack(side=LEFT, fill=X, padx=1) msg7=Message(iframe6, text=' ', width=300,relief=SUNKEN) msg7.pack(side=RIGHT, fill=X, padx=1) iframe6.pack(expand=1, fill=X, padx=4) @@ -1891,10 +1849,6 @@ try: elif key == 'KB8RQ': kb8rq.set(value) elif key == 'K2TXB': k2txb.set(value) elif key == 'SetSeq': setseq.set(value) - elif key == 'Report': - report.delete(0,99) - report.insert(0,value) - elif key == 'ShOK': ShOK.set(value) elif key == 'Nsave': nsave.set(value) elif key == 'Band': nfreq.set(value) elif key == 'Sync': isync=int(value) @@ -1982,8 +1936,6 @@ f.write("TxFirst " + str(TxFirst.get()) + "\n") f.write("KB8RQ " + str(kb8rq.get()) + "\n") f.write("K2TXB " + str(k2txb.get()) + "\n") f.write("SetSeq " + str(setseq.get()) + "\n") -f.write("Report " + g.report + "\n") -f.write("ShOK " + str(ShOK.get()) + "\n") f.write("Nsave " + str(nsave.get()) + "\n") f.write("Band " + str(nfreq.get()) + "\n") f.write("Sync " + str(isync) + "\n") diff --git a/ping.f b/ping.f deleted file mode 100644 index 0858cc040..000000000 --- a/ping.f +++ /dev/null @@ -1,41 +0,0 @@ - subroutine ping(s,nz,dtbuf,slim,wmin,pingdat,nping) - -C Detect pings and make note of their start time, duration, and peak strength. - - real*4 s(nz) - real*4 pingdat(3,100) - logical inside - - nping=0 - peak=0. - inside=.false. -c### sdown=slim-1.0 - snrlim=10.0**(0.1*slim) - 1.0 - sdown=10.0*log10(0.25*snrlim+1.0) - - do i=2,nz - if(s(i).ge.slim .and. .not.inside) then - i0=i - tstart=i0*dtbuf - inside=.true. - peak=0. - endif - if(inside .and. s(i).gt.peak) then - peak=s(i) - endif - if(inside .and. (s(i).lt.sdown .or. i.eq.nz)) then - if(i.gt.i0) then - if(dtbuf*(i-i0).ge.wmin) then - if(nping.le.99) nping=nping+1 - pingdat(1,nping)=tstart - pingdat(2,nping)=dtbuf*(i-i0) - pingdat(3,nping)=peak - endif - inside=.false. - peak=0. - endif - endif - enddo - - return - end diff --git a/s2shape.f b/s2shape.f deleted file mode 100644 index acf9a55eb..000000000 --- a/s2shape.f +++ /dev/null @@ -1,50 +0,0 @@ - subroutine s2shape(s2,nchan,nz,tbest) - -C Prepare s2(nchan,nz) for plotting as waterfall. - - real s2(nchan,nz) - common/fcom/s(3100),indx(3100) - -C Find average of active spectral region, over the whole file. - sum=0. - do i=1,44 - do j=1,nz/4 - k=indx(j) - sum=sum+s2(i+8,k) - enddo - enddo - - ave=sum/(44*nz) - -C Subtract the average and normalize. - do i=1,64 - do j=1,nz - s2(i,j)=s2(i,j)/ave - 1.0 - enddo - enddo - - nzz=nz - nxmax=500 !Was 494, then 385 - if(nz.lt.nxmax) go to 900 -! fac=float(nz)/nxmax -! nadd=fac + 0.999999 -! nzz=nxmax - nadd=3 - nzz=nz/3 - do i=1,64 - do k=1,nzz - sum=0. -! j=(k-1)*fac - j=(k-1)*nadd - do n=1,nadd - sum=sum+s2(i,j+n) - enddo - s2(i,k)=sum/nadd - enddo - enddo - - 900 s2(1,1)=nzz - s2(2,1)=tbest - - return - end diff --git a/stdecode.f b/stdecode.f deleted file mode 100644 index bdc0735c4..000000000 --- a/stdecode.f +++ /dev/null @@ -1,105 +0,0 @@ - subroutine stdecode(s2,nchan,nz,sigma,dtbuf,df,stlim0, - + DFTolerance,cfile6,pick,istart) - -C Search for and decode single-tone messages. - - real s2(nchan,nz) - integer DFTolerance - logical pick - character cfile6*6,msg3*3 - character*90 line - common/ccom/nline,tping(100),line(100) - - NSPD=25 !Change if FSK110 is implemented - LTone=2 - NBaud=11025/NSPD - - stlim=stlim0 - if(pick) stlim=stlim0-1.0 - iwidth=1 - ts0=-1.0 - dt=1.0/11025.0 - -C In each time slice, find largest peak between LTone*NBaud-DFTolerance and -C (LTone+3)*NBaud+DFTolerance. - - ia=(LTone*NBaud-DFTolerance)/df - 5.0 - ib=((LTone+3)*NBaud+DFTolerance)/df - 4.0 - do j=1,nz - smax=0. - do i=ia,ib !Get the spectral peak - if(s2(i,j).gt.smax) then - smax=s2(i,j) - ipk=i - endif - enddo - peak=dB(smax/sigma) - 14.0 !Empirical -C constant should be dB(43/2500) = -17.6 dB? - - if(peak.gt.stlim) then -C To minimize false ST decodings from QRN and MT pings, find the -C second best peak (excluding points around the first peak). - smax2=0. - do i=ia,ib - if((abs(i-ipk).gt.iwidth) .and. s2(i,j).gt.smax2) then - smax2=s2(i,j) - endif - enddo - -C Larger values of ratlim make it more likely to report ST decodings. - ratlim=0.18 - if(stlim.lt.-2.5) ratlim=0.20 - if(stlim.lt.-3.5) ratlim=0.22 - if(stlim.lt.-4.5) ratlim=0.24 - if(pick) ratlim=0.27 !Fine tuning here... - if(smax2/smax.gt.ratlim) goto 20 - - call peakup(s2(ipk-1,j),s2(ipk,j),s2(ipk+1,j),dx) - freq=(ipk+5+dx)*df - tstart=j*dtbuf + dt*(istart-1) - mswidth=20 - nwidth=0 - nstrength=0 - n=nint(freq/NBaud) - noffset=freq-n*NBaud - if((noffset.lt.-DFTolerance) .or. - + (noffset.gt.DFTolerance)) goto 20 - -C The numbers 2 and 5 depend on Ltone: - if(n.lt.2 .or. n.gt.5) goto 20 - -C OK, this detection has survived all tests. Save it for output -C (uness perhaps it is redundant). - - if(n.eq.LTone) msg3='R26' - if(n.eq.LTone+1) msg3='R27' - if(n.eq.LTone+2) msg3='RRR' - if(n.eq.LTone+3) msg3='73' - -C Now check for redundant detections. (Not sure, now, why I chose -C the time span 0.11 s.) - if(tstart-ts0.gt.0.11) then - peak0=0. !If time diff>0.11s, start fresh - else - if(peak.le.peak0) goto 20 - nline=nline-1 !Delete previous, this one's better - peak0=peak !Save best peak - endif - -C OK, we want to output this one. Save the information. - if(nline.le.99) nline=nline+1 - ts0=tstart - tping(nline)=tstart - nst=(int(smax/smax2)-4)/2 + 1 - if(nst.lt.1) nst=1 - if(nst.gt.3) nst=3 - write(line(nline),1050) cfile6,tstart,mswidth,int(peak), - + nwidth,nstrength,noffset,msg3,nst - 1050 format(a6,f5.1,i5,i3,1x,2i1,i5,1x,a3,40x,i3) - endif - - 20 continue - enddo - - return - end diff --git a/sync.f b/sync.f deleted file mode 100644 index edb438829..000000000 --- a/sync.f +++ /dev/null @@ -1,87 +0,0 @@ - subroutine sync(y1,y2,y3,y4,npts,jpk,baud,bauderr) - -C Input data are in the y# arrays: detected sigs in four tone-channels, -C before decimation by NSPD. - - parameter (NSPD=25) - real y1(npts) - real y2(npts) - real y3(npts) - real y4(npts) - real zf(NSPD) - real tmp1 - real tmp2 - complex csum - integer nsum(NSPD) - real z(65538) !Ready for FSK110 - complex cz(0:32768) - equivalence (z,cz) - data twopi/6.283185307/ - - do i=1,NSPD - zf(i)=0.0 - nsum(i)=0 - enddo - - do i=1,npts - a1=max(y1(i),y2(i),y3(i),y4(i)) !Find the largest one - - if(a1.eq.y1(i)) then !Now find 2nd largest - a2=max(y2(i),y3(i),y4(i)) - else if(a1.eq.y2(i)) then - a2=max(y1(i),y3(i),y4(i)) - else if(a1.eq.y3(i)) then - a2=max(y1(i),y2(i),y4(i)) - else - a2=max(y1(i),y2(i),y3(i)) - endif - - z(i)=1.e-6*(a1-a2) !Subtract 2nd from 1st - j=mod(i-1,NSPD)+1 - zf(j)=zf(j)+z(i) - nsum(j)=nsum(j)+1 - enddo - - n=log(float(npts))/log(2.0) - nfft=2**(n+1) - call zero(z(npts+1),nfft-npts) - call xfft(z,nfft) - -C Now find the apparent baud rate. - df=11025.0/nfft - zmax=0. - ia=391.0/df !Was 341/df - ib=491.0/df !Was 541/df - do i=ia,ib - z(i)=real(cz(i))**2 + aimag(cz(i))**2 - if(z(i).gt.zmax) then - zmax=z(i) - baud=df*i - endif - enddo - -C Find phase of signal at 441 Hz. - csum=0. - do j=1,NSPD - pha=j*twopi/NSPD - csum=csum+zf(j)*cmplx(cos(pha),-sin(pha)) - enddo - tmp1=aimag(csum) - tmp2=real(csum) - pha=-atan2(tmp1,tmp2) - jpk=nint(NSPD*pha/twopi) - if(jpk.lt.1) jpk=jpk+NSPD - -C The following is nearly equivalent to the above. I don't know which -C (if either) is better. -c zfmax=-1.e30 -c do j=1,NSPD -c if(zf(j).gt.zfmax) then -c zfmax=zf(j) -c jpk2=j -c endif -c enddo - - bauderr=(baud-11025.0/NSPD)/df !Baud rate error, in bins - return - end diff --git a/wsjt1.F b/wsjt1.F index 818d83781..c320c0ba6 100644 --- a/wsjt1.F +++ b/wsjt1.F @@ -76,7 +76,6 @@ close(16) 4 if(jz.gt.655360) jz=655360 - if(mode.eq.4 .and. jz.gt.330750) jz=330750 !### Fix this! sum=0. do j=1,jz !Convert raw data from i*2 to real, remove DC @@ -116,15 +115,6 @@ C Intentionally degrade SNR by -nclip dB. enddo endif - if(mode.ne.2 .and. nzap.ne.0) then - nfrz=NFreeze - if(mode.eq.1) nfrz=0 - if(jz.gt.100000) call avesp2(dat,jz,2,mode,nfrz,MouseDF, - + DFTolerance,fzap) - nadd=1 - call bzap(dat,jz,nadd,mode,fzap) - endif - sq=0. do j=1,jz !Compute power level for whole array sq=sq + dat(j)**2 @@ -162,43 +152,36 @@ C Intentionally degrade SNR by -nclip dB. tbest=0. NsyncOK=0 -! If we're in JT65 mode, call the decode65 routines. - if(mode.eq.2) then -! if(rmspower.gt.34000.0) go to 900 !Reject very noisy data +! Only JT65 mode is supported. ! Check for a JT65 shorthand message - nstest=0 - if(ntx2.ne.1) call short65(dat,jz,NFreeze,MouseDF, - + DFTolerance,mode65,nspecial,nstest,dfsh,iderrsh, - + idriftsh,snrsh,ss1,ss2,nwsh,idfsh) + nstest=0 + if(ntx2.ne.1) call short65(dat,jz,NFreeze,MouseDF, + + DFTolerance,mode65,nspecial,nstest,dfsh,iderrsh, + + idriftsh,snrsh,ss1,ss2,nwsh,idfsh) ! Lowpass filter and decimate by 2 - call lpf1(dat,jz,jz2,MouseDF,MouseDF2) - idf=mousedf-mousedf2 - jz=jz2 - nadd=1 - fzap(1)=0. - if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2, + call lpf1(dat,jz,jz2,MouseDF,MouseDF2) + idf=mousedf-mousedf2 + jz=jz2 + nadd=1 + fzap(1)=0. + if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2, + DFTolerance,fzap) - if(nzap.eq.1.and.nstest.eq.0) call bzap(dat,jz,nadd,mode,fzap) + if(nzap.eq.1.and.nstest.eq.0) call bzap(dat,jz,nadd,mode,fzap) - i=index(MyCall,char(0)) - if(i.le.0) i=index(MyCall,' ') - mycall=MyCall(1:i-1)//' ' - i=index(HisCall,char(0)) - if(i.le.0) i=index(HisCall,' ') - hiscall=HisCall(1:i-1)//' ' + i=index(MyCall,char(0)) + if(i.le.0) i=index(MyCall,' ') + mycall=MyCall(1:i-1)//' ' + i=index(HisCall,char(0)) + if(i.le.0) i=index(HisCall,' ') + hiscall=HisCall(1:i-1)//' ' ! Offset data by about 1 s. - if(jz.ge.126*2048) call wsjt65(dat(4097),jz-4096,cfile6, - + NClearAve,MinSigdB,DFTolerance,NFreeze,NAFC,mode65,Nseg, - + MouseDF2,NAgain,ndepth,neme,nsked,idf,idfsh, - + mycall,hiscall,hisgrid,lumsg,lcum,nspecial,ndf, - + nstest,dfsh,snrsh, - + NSyncOK,ccf,psavg,ndiag,nwsh) - goto 900 - endif - - 800 continue - call s2shape(s2,nchan,nz,tbest) + if(jz.ge.126*2048) call wsjt65(dat(4097),jz-4096,cfile6, + + NClearAve,MinSigdB,DFTolerance,NFreeze,NAFC,mode65,Nseg, + + MouseDF2,NAgain,ndepth,neme,nsked,idf,idfsh, + + mycall,hiscall,hisgrid,lumsg,lcum,nspecial,ndf, + + nstest,dfsh,snrsh, + + NSyncOK,ccf,psavg,ndiag,nwsh) 900 LDecoded = ((NSyncOK.gt.0) .or. npkept.gt.0) end file 11