mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-03-22 20:18:35 -04:00
Add basic Tx capability for QRA64. NB: using 11025 sample rate for Tx.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@7520 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
9cfe3c3c07
commit
dd91c1217c
@ -89,6 +89,7 @@ set (FSRCS
|
||||
ftninit.f90
|
||||
ftnquit.f90
|
||||
gen65.f90
|
||||
genqra64a.f90
|
||||
geocentric.f90
|
||||
getdphi.f90
|
||||
getpfx1.f90
|
||||
|
87
libm65/genqra64a.f90
Normal file
87
libm65/genqra64a.f90
Normal file
@ -0,0 +1,87 @@
|
||||
subroutine genqra64a(msg0,ichk,ntxfreq,mode64,itype,msgsent,iwave,nwave)
|
||||
|
||||
! Encodes a QRA64 message to yield itone(1:84)
|
||||
|
||||
use packjt
|
||||
parameter (NMAX=2*60*11025)
|
||||
character*22 msg0
|
||||
character*22 message !Message to be generated
|
||||
character*22 msgsent !Message as it will be received
|
||||
integer itone(84)
|
||||
character*3 cok !' ' or 'OOO'
|
||||
real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsym
|
||||
integer dgen(13)
|
||||
integer sent(63)
|
||||
integer*2 iwave(NMAX)
|
||||
integer icos7(0:6)
|
||||
data icos7/2,5,6,0,4,1,3/ !Defines a 7x7 Costas array
|
||||
data twopi/6.283185307179586476d0/
|
||||
save
|
||||
|
||||
if(msg0(1:1).eq.'@') then
|
||||
read(msg0(2:5),*,end=1,err=1) nfreq
|
||||
go to 2
|
||||
1 nfreq=1000
|
||||
2 itone(1)=nfreq
|
||||
write(msgsent,1000) nfreq
|
||||
1000 format(i5,' Hz')
|
||||
else
|
||||
message=msg0
|
||||
do i=1,22
|
||||
if(ichar(message(i:i)).eq.0) then
|
||||
message(i:)=' '
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
do i=1,22 !Strip leading blanks
|
||||
if(message(1:1).ne.' ') exit
|
||||
message=message(i+1:)
|
||||
enddo
|
||||
|
||||
call chkmsg(message,cok,nspecial,flip)
|
||||
call packmsg(message,dgen,itype) !Pack message into 72 bits
|
||||
call unpackmsg(dgen,msgsent) !Unpack to get message sent
|
||||
if(ichk.ne.0) go to 999 !Return if checking only
|
||||
call qra64_enc(dgen,sent) !Encode using QRA64
|
||||
|
||||
nsync=10
|
||||
itone(1:7)=nsync*icos7 !Insert 7x7 Costas array in 3 places
|
||||
itone(8:39)=sent(1:32)
|
||||
itone(40:46)=nsync*icos7
|
||||
itone(47:77)=sent(33:63)
|
||||
itone(78:84)=nsync*icos7
|
||||
endif
|
||||
|
||||
! Set up necessary constants
|
||||
nsym=84
|
||||
tsym=6912.d0/12000.d0
|
||||
samfac=1.d0
|
||||
dt=1.d0/(samfac*11025.d0)
|
||||
f0=ntxfreq
|
||||
ndf=2**(mode64-1)
|
||||
dfgen=ndf*12000.d0/6912.d0
|
||||
phi=0.d0
|
||||
dphi=twopi*dt*f0
|
||||
i=0
|
||||
iz=84*6912*11025.d0/12000.d0
|
||||
t=0.d0
|
||||
j0=0
|
||||
do i=1,iz
|
||||
t=t+dt
|
||||
j=t/tsym
|
||||
if(j.ne.j0) then
|
||||
f=f0 + itone(j)*dfgen
|
||||
dphi=twopi*dt*f
|
||||
j0=j
|
||||
endif
|
||||
phi=phi+dphi
|
||||
if(phi.gt.twopi) phi=phi-twopi
|
||||
xphi=phi
|
||||
iwave(2*i-1)=32767.0*cos(xphi)
|
||||
iwave(2*i)=32767.0*sin(xphi)
|
||||
enddo
|
||||
nwave=2*iz
|
||||
|
||||
999 return
|
||||
end subroutine genqra64a
|
@ -1477,10 +1477,19 @@ void MainWindow::guiUpdate()
|
||||
ba2msg(ba,message);
|
||||
int len1=22;
|
||||
int mode65=m_mode65;
|
||||
int ichk=0;
|
||||
int ntxFreq=1000;
|
||||
int itype=0;
|
||||
double samfac=1.0;
|
||||
|
||||
gen65_(message,&mode65,&m_nfast,&samfac,&nsendingsh,msgsent,iwave,
|
||||
&nwave,len1,len1);
|
||||
if(m_modeTx=="JT65") {
|
||||
gen65_(message,&mode65,&m_nfast,&samfac,&nsendingsh,msgsent,iwave,
|
||||
&nwave,len1,len1);
|
||||
} else {
|
||||
if(m_modeQRA64==5) ntxFreq=600;
|
||||
genqra64a_(message,&ichk,&ntxFreq,&m_modeQRA64,&itype,msgsent,iwave,
|
||||
&nwave,len1,len1);
|
||||
}
|
||||
msgsent[22]=0;
|
||||
|
||||
if(m_restart) {
|
||||
@ -1723,7 +1732,7 @@ void MainWindow::doubleClickOnCall(QString hiscall, bool ctrl)
|
||||
}
|
||||
ui->txFirstCheckBox->setChecked(m_txFirst);
|
||||
QString rpt="";
|
||||
if(ctrl) rpt=t2.mid(25,3);
|
||||
if(ctrl or m_modeTx=="QRA64") rpt=t2.mid(25,3);
|
||||
lookup();
|
||||
genStdMsgs(rpt);
|
||||
if(t2.indexOf(m_myCall)>0) {
|
||||
@ -1767,7 +1776,7 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
QString t=t0;
|
||||
if(t0.indexOf("/")<0) t=t0 + m_myGrid.mid(0,4);
|
||||
msgtype(t, ui->tx1);
|
||||
if(rpt == "") {
|
||||
if(rpt == "" and m_modeTx=="JT65") {
|
||||
t=t+" OOO";
|
||||
msgtype(t, ui->tx2);
|
||||
msgtype("RO", ui->tx3);
|
||||
|
@ -300,6 +300,10 @@ extern "C" {
|
||||
int* nsendingsh, char* msgsent, short iwave[], int* nwave,
|
||||
int len1, int len2);
|
||||
|
||||
void genqra64a_(char* msg, int* ichk, int* ntxFreq, int* mode64,
|
||||
int* itype, char* msgsent, short iwave[], int* nwave,
|
||||
int len1, int len2);
|
||||
|
||||
int ptt_(int* nport, int* itx, int* iptt);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user