mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-29 12:52:28 -04:00
More cleaning out unneeded files, and fixing Makefile.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@330 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
c37cfaf081
commit
84b065842c
@ -22,7 +22,7 @@ SRCS2F90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \
|
|||||||
SRCS2F77 = wsjt1.f avesp2.f bzap.f \
|
SRCS2F77 = wsjt1.f avesp2.f bzap.f \
|
||||||
stdecode.f indexx.f s2shape.f flat2.f gen65.f chkmsg.f \
|
stdecode.f indexx.f s2shape.f flat2.f gen65.f chkmsg.f \
|
||||||
gentone.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 \
|
peakup.f sync.f detect.f avemsg65.f decode65.f demod64a.f \
|
||||||
encode65.f extract.f flat1.f four2.f gencw.f getpfx1.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 \
|
getpfx2.f getsnr.f graycode.f grid2k.f interleave63.f k2grid.f \
|
||||||
|
80
gencw.f
80
gencw.f
@ -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'
|
|
119
jtaudio.c
119
jtaudio.c
@ -62,74 +62,6 @@ void GetSystemTime(SYSTEMTIME *st){
|
|||||||
}
|
}
|
||||||
#endif
|
#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; i<framesPerBuffer; i++) {
|
|
||||||
data->y1[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:
|
// Output callback routine:
|
||||||
static int SoundOut( void *inputBuffer, void *outputBuffer,
|
static int SoundOut( void *inputBuffer, void *outputBuffer,
|
||||||
unsigned long framesPerBuffer,
|
unsigned long framesPerBuffer,
|
||||||
@ -201,11 +133,8 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[],
|
|||||||
double tbuf[], int *ibuf, int *ndsec)
|
double tbuf[], int *ibuf, int *ndsec)
|
||||||
{
|
{
|
||||||
paTestData data;
|
paTestData data;
|
||||||
PaStream *instream;
|
|
||||||
PaStream *outstream;
|
PaStream *outstream;
|
||||||
PaStreamParameters inputParameters;
|
|
||||||
PaStreamParameters outputParameters;
|
PaStreamParameters outputParameters;
|
||||||
// PaStreamInfo *streamInfo;
|
|
||||||
|
|
||||||
int nfs,ndin,ndout;
|
int nfs,ndin,ndout;
|
||||||
PaError err1,err2,err2a,err3,err3a;
|
PaError err1,err2,err2a,err3,err3a;
|
||||||
@ -239,27 +168,7 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[],
|
|||||||
ndin=*ndevin;
|
ndin=*ndevin;
|
||||||
ndout=*ndevout;
|
ndout=*ndevout;
|
||||||
dnfs=(double)nfs;
|
dnfs=(double)nfs;
|
||||||
printf("Opening device %d for input, %d for output.\n",ndin,ndout);
|
printf("Opening device %d for output.\n",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;
|
|
||||||
}
|
|
||||||
|
|
||||||
outputParameters.device=*ndevout;
|
outputParameters.device=*ndevout;
|
||||||
outputParameters.channelCount=2;
|
outputParameters.channelCount=2;
|
||||||
@ -281,12 +190,6 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[],
|
|||||||
goto error;
|
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
|
err3a=Pa_StartStream(outstream); //Start output stream
|
||||||
if(err3a) {
|
if(err3a) {
|
||||||
printf("Error starting output Audio stream\n");
|
printf("Error starting output Audio stream\n");
|
||||||
@ -294,25 +197,21 @@ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[],
|
|||||||
goto error;
|
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;
|
if(*ngo==0) goto StopStream;
|
||||||
// printf("CPU: %f\n",Pa_GetStreamCpuLoad(stream));
|
|
||||||
Pa_Sleep(200);
|
Pa_Sleep(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
StopStream:
|
StopStream:
|
||||||
Pa_AbortStream(instream); // Abort stream
|
|
||||||
Pa_CloseStream(instream); // Close stream, we're done.
|
|
||||||
Pa_AbortStream(outstream); // Abort stream
|
Pa_AbortStream(outstream); // Abort stream
|
||||||
Pa_CloseStream(outstream); // Close stream, we're done.
|
Pa_CloseStream(outstream); // Close stream, we're done.
|
||||||
Pa_Terminate();
|
Pa_Terminate();
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
printf("%d %d %f %d %d %d %d %d\n",ndin,ndout,dnfs,err1,
|
printf("%d %f %d %d %d\n",ndout,dnfs,err1,err2a,err3a);
|
||||||
err2,err2a,err3,err3a);
|
|
||||||
Pa_Terminate();
|
Pa_Terminate();
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -329,16 +228,6 @@ int padevsub_(int *numdev, int *ndefin, int *ndefout,
|
|||||||
|
|
||||||
Pa_Initialize();
|
Pa_Initialize();
|
||||||
|
|
||||||
/*
|
|
||||||
n=Pa_GetHostApiCount();
|
|
||||||
printf("HostAPI Type #Devices \n");
|
|
||||||
for(i=0; i<n; i++) {
|
|
||||||
hostapi=Pa_GetHostApiInfo(i);
|
|
||||||
printf(" %3d %2d %3d %s\n",i,hostapi->type,
|
|
||||||
hostapi->deviceCount,hostapi->name);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// numDevices = Pa_CountDevices();
|
// numDevices = Pa_CountDevices();
|
||||||
numDevices = Pa_GetDeviceCount();
|
numDevices = Pa_GetDeviceCount();
|
||||||
*numdev=numDevices;
|
*numdev=numDevices;
|
||||||
|
86
map65.py
86
map65.py
@ -79,7 +79,6 @@ nosh441=IntVar()
|
|||||||
noshjt65=IntVar()
|
noshjt65=IntVar()
|
||||||
nsked=IntVar()
|
nsked=IntVar()
|
||||||
setseq=IntVar()
|
setseq=IntVar()
|
||||||
ShOK=IntVar()
|
|
||||||
slabel="Sync "
|
slabel="Sync "
|
||||||
textheight=7
|
textheight=7
|
||||||
tx6alt=""
|
tx6alt=""
|
||||||
@ -108,7 +107,6 @@ def restart():
|
|||||||
|
|
||||||
#------------------------------------------------------ restart2
|
#------------------------------------------------------ restart2
|
||||||
def restart2():
|
def restart2():
|
||||||
Audio.gcom2.shok=ShOK.get()
|
|
||||||
Audio.gcom2.nrestart=1
|
Audio.gcom2.nrestart=1
|
||||||
|
|
||||||
#------------------------------------------------------ toggle_freeze
|
#------------------------------------------------------ toggle_freeze
|
||||||
@ -491,8 +489,6 @@ def ModeJT65():
|
|||||||
cbfreeze.configure(state=NORMAL)
|
cbfreeze.configure(state=NORMAL)
|
||||||
cbafc.configure(state=NORMAL)
|
cbafc.configure(state=NORMAL)
|
||||||
sked.configure(state=NORMAL)
|
sked.configure(state=NORMAL)
|
||||||
report.configure(state=DISABLED)
|
|
||||||
shmsg.configure(state=DISABLED)
|
|
||||||
graph2.configure(bg='#66FFFF')
|
graph2.configure(bg='#66FFFF')
|
||||||
itol=4
|
itol=4
|
||||||
inctol()
|
inctol()
|
||||||
@ -748,16 +744,6 @@ def decdsec(event):
|
|||||||
ldsec.configure(text='Dsec '+str(0.1*idsec),bg=bg)
|
ldsec.configure(text='Dsec '+str(0.1*idsec),bg=bg)
|
||||||
Audio.gcom1.ndsec=idsec
|
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
|
#------------------------------------------------------ erase
|
||||||
def erase(event=NONE):
|
def erase(event=NONE):
|
||||||
graph1.delete(ALL)
|
graph1.delete(ALL)
|
||||||
@ -1102,7 +1088,7 @@ def bandmap(event=NONE):
|
|||||||
|
|
||||||
#------------------------------------------------------ update
|
#------------------------------------------------------ update
|
||||||
def 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,\
|
im,pim,cmap0,isync,isync_save,idsec,first,itol,txsnrdb,tx6alt,\
|
||||||
bm_geom
|
bm_geom
|
||||||
|
|
||||||
@ -1158,13 +1144,6 @@ def update():
|
|||||||
Audio.gcom2.ndecoding=4
|
Audio.gcom2.ndecoding=4
|
||||||
Audio.gcom2.nagain=1
|
Audio.gcom2.nagain=1
|
||||||
g.freeze_decode=0
|
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)
|
t=g.ftnstr(Audio.gcom2.decodedfile)
|
||||||
# i=t.rfind(".")
|
# i=t.rfind(".")
|
||||||
@ -1176,23 +1155,21 @@ def update():
|
|||||||
g.mode=mode.get()
|
g.mode=mode.get()
|
||||||
first=0
|
first=0
|
||||||
|
|
||||||
samfac_in=Audio.gcom1.mfsample/110250.0
|
|
||||||
samfac_out=Audio.gcom1.mfsample2/110250.0
|
samfac_out=Audio.gcom1.mfsample2/110250.0
|
||||||
xin=1
|
xin=1
|
||||||
xout=1
|
xout=1
|
||||||
try:
|
try:
|
||||||
xin=samfac_in/options.samfacin.get()
|
|
||||||
xout=samfac_out/options.samfacout.get()
|
xout=samfac_out/options.samfacout.get()
|
||||||
if xin<0.999 or xin>1.001 or xout<0.999 or xout>1.001:
|
if xout<0.999 or xout>1.001:
|
||||||
lab8.configure(text="%6.4f %6.4f" \
|
lab8.configure(text="%6.4f" \
|
||||||
% (options.samfacin.get(),options.samfacout.get()), \
|
% (options.samfacout.get()), \
|
||||||
fg='black',bg='red')
|
fg='black',bg='red')
|
||||||
else:
|
else:
|
||||||
lab8.configure(fg='gray85',bg='gray85')
|
lab8.configure(fg='gray85',bg='gray85')
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
msg1.configure(text="%6.4f %6.4f" % (samfac_in,samfac_out))
|
msg1.configure(text="%6.4f" % (samfac_out))
|
||||||
msg2.configure(text=mode.get())
|
msg2.configure(text=mode.get())
|
||||||
t="Freeze DF:%4d" % (int(Audio.gcom2.mousedf),)
|
t="Freeze DF:%4d" % (int(Audio.gcom2.mousedf),)
|
||||||
if abs(int(Audio.gcom2.mousedf))>600:
|
if abs(int(Audio.gcom2.mousedf))>600:
|
||||||
@ -1202,9 +1179,6 @@ def update():
|
|||||||
bdecode.configure(bg='gray85',activebackground='gray95')
|
bdecode.configure(bg='gray85',activebackground='gray95')
|
||||||
if Audio.gcom2.ndecoding: #Set button bg=light_blue while decoding
|
if Audio.gcom2.ndecoding: #Set button bg=light_blue while decoding
|
||||||
bdecode.configure(bg='#66FFFF',activebackground='#66FFFF')
|
bdecode.configure(bg='#66FFFF',activebackground='#66FFFF')
|
||||||
msg5.configure(text="TR Period: %d s" % (Audio.gcom1.trperiod,), \
|
|
||||||
bg='gray85')
|
|
||||||
|
|
||||||
tx1.configure(bg='white')
|
tx1.configure(bg='white')
|
||||||
tx2.configure(bg='white')
|
tx2.configure(bg='white')
|
||||||
tx3.configure(bg='white')
|
tx3.configure(bg='white')
|
||||||
@ -1289,7 +1263,6 @@ def update():
|
|||||||
|
|
||||||
# Save some parameters
|
# Save some parameters
|
||||||
g.mode=mode.get()
|
g.mode=mode.get()
|
||||||
g.report=report.get()
|
|
||||||
Audio.gcom1.txfirst=TxFirst.get()
|
Audio.gcom1.txfirst=TxFirst.get()
|
||||||
try:
|
try:
|
||||||
Audio.gcom1.samfacin=options.samfacin.get()
|
Audio.gcom1.samfacin=options.samfacin.get()
|
||||||
@ -1309,7 +1282,6 @@ def update():
|
|||||||
tx=(tx1,tx2,tx3,tx4,tx5,tx6)
|
tx=(tx1,tx2,tx3,tx4,tx5,tx6)
|
||||||
Audio.gcom2.txmsg=(tx[ntx.get()-1].get()+' ')[:28]
|
Audio.gcom2.txmsg=(tx[ntx.get()-1].get()+' ')[:28]
|
||||||
Audio.gcom2.mode=(mode.get()+' ')[:6]
|
Audio.gcom2.mode=(mode.get()+' ')[:6]
|
||||||
Audio.gcom2.shok=ShOK.get()
|
|
||||||
Audio.gcom2.nsave=nsave.get()
|
Audio.gcom2.nsave=nsave.get()
|
||||||
Audio.gcom2.nzap=nzap.get()
|
Audio.gcom2.nzap=nzap.get()
|
||||||
Audio.gcom2.ndebug=ndebug.get()
|
Audio.gcom2.ndebug=ndebug.get()
|
||||||
@ -1420,21 +1392,19 @@ modemenu.add_radiobutton(label = 'JT65C', variable=mode, command = ModeJT65C, \
|
|||||||
#------------------------------------------------------ Decode menu
|
#------------------------------------------------------ Decode menu
|
||||||
decodebutton = Menubutton(mbar, text = 'Decode')
|
decodebutton = Menubutton(mbar, text = 'Decode')
|
||||||
decodebutton.pack(side = LEFT)
|
decodebutton.pack(side = LEFT)
|
||||||
decodemenu = Menu(decodebutton, tearoff=1)
|
decodemenu = Menu(decodebutton, tearoff=0)
|
||||||
decodebutton['menu'] = decodemenu
|
decodebutton['menu'] = decodemenu
|
||||||
decodemenu.JT65=Menu(decodemenu,tearoff=0)
|
decodemenu.add_checkbutton(label='Only EME calls',variable=neme)
|
||||||
decodemenu.JT65.add_checkbutton(label='Only EME calls',variable=neme)
|
decodemenu.add_checkbutton(label='No Shorthands if Tx 1',variable=noshjt65)
|
||||||
decodemenu.JT65.add_checkbutton(label='No Shorthands if Tx 1',variable=noshjt65)
|
decodemenu.add_separator()
|
||||||
decodemenu.JT65.add_separator()
|
decodemenu.add_radiobutton(label = 'No Deep Search',
|
||||||
decodemenu.JT65.add_radiobutton(label = 'No Deep Search',
|
|
||||||
variable=ndepth, value=0)
|
variable=ndepth, value=0)
|
||||||
decodemenu.JT65.add_radiobutton(label = 'Normal Deep Search',
|
decodemenu.add_radiobutton(label = 'Normal Deep Search',
|
||||||
variable=ndepth, value=1)
|
variable=ndepth, value=1)
|
||||||
decodemenu.JT65.add_radiobutton(label = 'Aggressive Deep Search',
|
decodemenu.add_radiobutton(label = 'Aggressive Deep Search',
|
||||||
variable=ndepth, value=2)
|
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)
|
variable=ndepth, value=3)
|
||||||
decodemenu.add_cascade(label = 'JT65',menu=decodemenu.JT65)
|
|
||||||
|
|
||||||
#------------------------------------------------------ Save menu
|
#------------------------------------------------------ Save menu
|
||||||
savebutton = Menubutton(mbar, text = 'Save')
|
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 = '222', variable=nfreq,value=222)
|
||||||
bandmenu.add_radiobutton(label = '432', variable=nfreq,value=432)
|
bandmenu.add_radiobutton(label = '432', variable=nfreq,value=432)
|
||||||
bandmenu.add_radiobutton(label = '1296', variable=nfreq,value=1296)
|
bandmenu.add_radiobutton(label = '1296', variable=nfreq,value=1296)
|
||||||
|
bandmenu.add_radiobutton(label = '2304', variable=nfreq,value=2304)
|
||||||
nfreq.set(144)
|
nfreq.set(144)
|
||||||
#------------------------------------------------------ Help menu
|
#------------------------------------------------------ Help menu
|
||||||
helpbutton = Menubutton(mbar, text = 'Help')
|
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)
|
bAdd.grid(column=2,row=1,sticky='EW',padx=4)
|
||||||
labAz=Label(f5a,text='Az 257 El 15',width=11)
|
labAz=Label(f5a,text='Az 257 El 15',width=11)
|
||||||
labAz.grid(column=1,row=2)
|
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=Label(f5a,text='16753 km')
|
||||||
labDist.grid(column=2,row=2)
|
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')
|
row=3,sticky='EW')
|
||||||
ldsec=Label(f5b, bg='white', fg='black', text='Dsec 0.0', width=8, relief=RIDGE)
|
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')
|
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,'<Button-1>',incdsec)
|
Widget.bind(ldsec,'<Button-1>',incdsec)
|
||||||
Widget.bind(ldsec,'<Button-3>',decdsec)
|
Widget.bind(ldsec,'<Button-3>',decdsec)
|
||||||
Widget.bind(lshift,'<Button-1>',toggle_shift)
|
|
||||||
|
|
||||||
f5b.pack(side=LEFT,expand=0,fill=BOTH)
|
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)
|
f5c=Frame(iframe5,bd=2,relief=GROOVE)
|
||||||
txfirst=Checkbutton(f5c,text='Tx First',justify=RIGHT,variable=TxFirst)
|
txfirst=Checkbutton(f5c,text='Tx First',justify=RIGHT,variable=TxFirst)
|
||||||
f5c2=Frame(f5c,bd=0)
|
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)
|
sked=Checkbutton(f5c,text='Sked',justify=RIGHT,variable=nsked)
|
||||||
genmsg=Button(f5c,text='GenStdMsgs',underline=0,command=GenStdMsgs,
|
genmsg=Button(f5c,text='GenStdMsgs',underline=0,command=GenStdMsgs,
|
||||||
padx=1,pady=1)
|
padx=1,pady=1)
|
||||||
@ -1718,7 +1677,6 @@ auto.focus_set()
|
|||||||
|
|
||||||
txfirst.grid(column=0,row=0,sticky='W',padx=4)
|
txfirst.grid(column=0,row=0,sticky='W',padx=4)
|
||||||
f5c2.grid(column=0,row=1,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)
|
sked.grid(column=0,row=3,sticky='W',padx=4)
|
||||||
genmsg.grid(column=0,row=4,sticky='W',padx=4)
|
genmsg.grid(column=0,row=4,sticky='W',padx=4)
|
||||||
auto.grid(column=0,row=5,sticky='EW',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)
|
iframe6 = Frame(frame, bd=1, relief=SUNKEN)
|
||||||
msg1=Message(iframe6, text=' ', width=300,relief=SUNKEN)
|
msg1=Message(iframe6, text=' ', width=300,relief=SUNKEN)
|
||||||
msg1.pack(side=LEFT, fill=X, padx=1)
|
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)
|
msg2.pack(side=LEFT, fill=X, padx=1)
|
||||||
msg3=Message(iframe6,width=300,relief=SUNKEN)
|
msg3=Message(iframe6,width=300,relief=SUNKEN)
|
||||||
msg3.pack(side=LEFT, fill=X, padx=1)
|
msg3.pack(side=LEFT, fill=X, padx=1)
|
||||||
msg4=Message(iframe6, text='Message #4', width=300,relief=SUNKEN)
|
#msg4=Message(iframe6, text="", width=300,relief=SUNKEN)
|
||||||
msg4.pack(side=LEFT, fill=X, padx=1)
|
#msg4.pack(side=LEFT, fill=X, padx=1)
|
||||||
msg5=Message(iframe6, text='Message #5', width=300,relief=SUNKEN)
|
#msg5=Message(iframe6, text="", width=300,relief=SUNKEN)
|
||||||
msg5.pack(side=LEFT, fill=X, padx=1)
|
#msg5.pack(side=LEFT, fill=X, padx=1)
|
||||||
msg7=Message(iframe6, text=' ', width=300,relief=SUNKEN)
|
msg7=Message(iframe6, text=' ', width=300,relief=SUNKEN)
|
||||||
msg7.pack(side=RIGHT, fill=X, padx=1)
|
msg7.pack(side=RIGHT, fill=X, padx=1)
|
||||||
iframe6.pack(expand=1, fill=X, padx=4)
|
iframe6.pack(expand=1, fill=X, padx=4)
|
||||||
@ -1891,10 +1849,6 @@ try:
|
|||||||
elif key == 'KB8RQ': kb8rq.set(value)
|
elif key == 'KB8RQ': kb8rq.set(value)
|
||||||
elif key == 'K2TXB': k2txb.set(value)
|
elif key == 'K2TXB': k2txb.set(value)
|
||||||
elif key == 'SetSeq': setseq.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 == 'Nsave': nsave.set(value)
|
||||||
elif key == 'Band': nfreq.set(value)
|
elif key == 'Band': nfreq.set(value)
|
||||||
elif key == 'Sync': isync=int(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("KB8RQ " + str(kb8rq.get()) + "\n")
|
||||||
f.write("K2TXB " + str(k2txb.get()) + "\n")
|
f.write("K2TXB " + str(k2txb.get()) + "\n")
|
||||||
f.write("SetSeq " + str(setseq.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("Nsave " + str(nsave.get()) + "\n")
|
||||||
f.write("Band " + str(nfreq.get()) + "\n")
|
f.write("Band " + str(nfreq.get()) + "\n")
|
||||||
f.write("Sync " + str(isync) + "\n")
|
f.write("Sync " + str(isync) + "\n")
|
||||||
|
41
ping.f
41
ping.f
@ -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
|
|
50
s2shape.f
50
s2shape.f
@ -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
|
|
105
stdecode.f
105
stdecode.f
@ -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
|
|
87
sync.f
87
sync.f
@ -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
|
|
65
wsjt1.F
65
wsjt1.F
@ -76,7 +76,6 @@
|
|||||||
close(16)
|
close(16)
|
||||||
|
|
||||||
4 if(jz.gt.655360) jz=655360
|
4 if(jz.gt.655360) jz=655360
|
||||||
if(mode.eq.4 .and. jz.gt.330750) jz=330750 !### Fix this!
|
|
||||||
|
|
||||||
sum=0.
|
sum=0.
|
||||||
do j=1,jz !Convert raw data from i*2 to real, remove DC
|
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
|
enddo
|
||||||
endif
|
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.
|
sq=0.
|
||||||
do j=1,jz !Compute power level for whole array
|
do j=1,jz !Compute power level for whole array
|
||||||
sq=sq + dat(j)**2
|
sq=sq + dat(j)**2
|
||||||
@ -162,43 +152,36 @@ C Intentionally degrade SNR by -nclip dB.
|
|||||||
tbest=0.
|
tbest=0.
|
||||||
NsyncOK=0
|
NsyncOK=0
|
||||||
|
|
||||||
! If we're in JT65 mode, call the decode65 routines.
|
! Only JT65 mode is supported.
|
||||||
if(mode.eq.2) then
|
|
||||||
! if(rmspower.gt.34000.0) go to 900 !Reject very noisy data
|
|
||||||
! Check for a JT65 shorthand message
|
! Check for a JT65 shorthand message
|
||||||
nstest=0
|
nstest=0
|
||||||
if(ntx2.ne.1) call short65(dat,jz,NFreeze,MouseDF,
|
if(ntx2.ne.1) call short65(dat,jz,NFreeze,MouseDF,
|
||||||
+ DFTolerance,mode65,nspecial,nstest,dfsh,iderrsh,
|
+ DFTolerance,mode65,nspecial,nstest,dfsh,iderrsh,
|
||||||
+ idriftsh,snrsh,ss1,ss2,nwsh,idfsh)
|
+ idriftsh,snrsh,ss1,ss2,nwsh,idfsh)
|
||||||
! Lowpass filter and decimate by 2
|
! Lowpass filter and decimate by 2
|
||||||
call lpf1(dat,jz,jz2,MouseDF,MouseDF2)
|
call lpf1(dat,jz,jz2,MouseDF,MouseDF2)
|
||||||
idf=mousedf-mousedf2
|
idf=mousedf-mousedf2
|
||||||
jz=jz2
|
jz=jz2
|
||||||
nadd=1
|
nadd=1
|
||||||
fzap(1)=0.
|
fzap(1)=0.
|
||||||
if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2,
|
if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2,
|
||||||
+ DFTolerance,fzap)
|
+ 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))
|
i=index(MyCall,char(0))
|
||||||
if(i.le.0) i=index(MyCall,' ')
|
if(i.le.0) i=index(MyCall,' ')
|
||||||
mycall=MyCall(1:i-1)//' '
|
mycall=MyCall(1:i-1)//' '
|
||||||
i=index(HisCall,char(0))
|
i=index(HisCall,char(0))
|
||||||
if(i.le.0) i=index(HisCall,' ')
|
if(i.le.0) i=index(HisCall,' ')
|
||||||
hiscall=HisCall(1:i-1)//' '
|
hiscall=HisCall(1:i-1)//' '
|
||||||
|
|
||||||
! Offset data by about 1 s.
|
! Offset data by about 1 s.
|
||||||
if(jz.ge.126*2048) call wsjt65(dat(4097),jz-4096,cfile6,
|
if(jz.ge.126*2048) call wsjt65(dat(4097),jz-4096,cfile6,
|
||||||
+ NClearAve,MinSigdB,DFTolerance,NFreeze,NAFC,mode65,Nseg,
|
+ NClearAve,MinSigdB,DFTolerance,NFreeze,NAFC,mode65,Nseg,
|
||||||
+ MouseDF2,NAgain,ndepth,neme,nsked,idf,idfsh,
|
+ MouseDF2,NAgain,ndepth,neme,nsked,idf,idfsh,
|
||||||
+ mycall,hiscall,hisgrid,lumsg,lcum,nspecial,ndf,
|
+ mycall,hiscall,hisgrid,lumsg,lcum,nspecial,ndf,
|
||||||
+ nstest,dfsh,snrsh,
|
+ nstest,dfsh,snrsh,
|
||||||
+ NSyncOK,ccf,psavg,ndiag,nwsh)
|
+ NSyncOK,ccf,psavg,ndiag,nwsh)
|
||||||
goto 900
|
|
||||||
endif
|
|
||||||
|
|
||||||
800 continue
|
|
||||||
call s2shape(s2,nchan,nz,tbest)
|
|
||||||
|
|
||||||
900 LDecoded = ((NSyncOK.gt.0) .or. npkept.gt.0)
|
900 LDecoded = ((NSyncOK.gt.0) .or. npkept.gt.0)
|
||||||
end file 11
|
end file 11
|
||||||
|
Loading…
x
Reference in New Issue
Block a user