mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
Rename refspec() to refspectrum().
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6601 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
88e47a5941
commit
23298c1743
@ -387,7 +387,7 @@ set (wsjt_FSRCS
|
|||||||
lib/ps4.f90
|
lib/ps4.f90
|
||||||
lib/readwav.f90
|
lib/readwav.f90
|
||||||
lib/rectify_msk.f90
|
lib/rectify_msk.f90
|
||||||
lib/refspec.f90
|
lib/refspectrum.f90
|
||||||
lib/savec2.f90
|
lib/savec2.f90
|
||||||
lib/sec_midn.f90
|
lib/sec_midn.f90
|
||||||
lib/setup65.f90
|
lib/setup65.f90
|
||||||
|
@ -31,7 +31,7 @@ CFLAGS = -O2 -I.
|
|||||||
%.o: %.F90
|
%.o: %.F90
|
||||||
${FC} ${FFLAGS} -c $<
|
${FC} ${FFLAGS} -c $<
|
||||||
|
|
||||||
all: jt9w
|
all: jt9w
|
||||||
|
|
||||||
OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \
|
OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \
|
||||||
softsym9w.o four2a.o interleave9.o jt9fano.o fano232.o packjt.o \
|
softsym9w.o four2a.o interleave9.o jt9fano.o fano232.o packjt.o \
|
||||||
@ -40,6 +40,14 @@ OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \
|
|||||||
jt9w: $(OBJS1)
|
jt9w: $(OBJS1)
|
||||||
$(FC) -o jt9w $(OBJS1) -lfftw3f
|
$(FC) -o jt9w $(OBJS1) -lfftw3f
|
||||||
|
|
||||||
|
OBJS2 = t1.o four2a.o db.o
|
||||||
|
t1: $(OBJS2)
|
||||||
|
$(FC) -o t1 $(OBJS2) -lfftw3f
|
||||||
|
|
||||||
|
OBJS3 = t2.o four2a.o db.o
|
||||||
|
t2: $(OBJS3)
|
||||||
|
$(FC) -o t2 $(OBJS3) -lfftw3f
|
||||||
|
|
||||||
.PHONY : clean
|
.PHONY : clean
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
subroutine refspec(id2,k)
|
|
||||||
|
|
||||||
! Input:
|
|
||||||
! id2 raw 16-bit integer data, 12000 Hz sample rate
|
|
||||||
! k pointer to the most recent new data
|
|
||||||
|
|
||||||
! Output (in common/c0com)
|
|
||||||
! c0 complex data downsampled to 1500 Hz
|
|
||||||
|
|
||||||
parameter (NMAX=120*12000) !Total sample intervals per 30 minutes
|
|
||||||
integer*2 id2(0:NMAX-1)
|
|
||||||
|
|
||||||
! write(*,3001) id2(k-3456:k-3456+9),k
|
|
||||||
!3001 format(10i5,i10)
|
|
||||||
|
|
||||||
return
|
|
||||||
end subroutine refspec
|
|
14
lib/refspectrum.f90
Normal file
14
lib/refspectrum.f90
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
subroutine refspectrum(id2,brefspec)
|
||||||
|
|
||||||
|
! Input:
|
||||||
|
! id2 i*2 Raw 16-bit integer data, 12000 Hz sample rate
|
||||||
|
! brefspec logical True when accumulating a reference spectrum
|
||||||
|
|
||||||
|
integer*2 id2(3456)
|
||||||
|
logical brefspec
|
||||||
|
|
||||||
|
! write(*,3001) id2(1:10),brefspec
|
||||||
|
!3001 format(10i5,L8)
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine refspectrum
|
172
lib/t1.f90
172
lib/t1.f90
@ -1,140 +1,52 @@
|
|||||||
program t1
|
program t1
|
||||||
|
|
||||||
parameter (NSPM=1404)
|
parameter (NFFT=1024,NH=NFFT/2)
|
||||||
complex csig(0:NSPM-1)
|
real w(-24:24)
|
||||||
complex c(0:NSPM-1)
|
real x(0:NFFT-1)
|
||||||
complex cnoise(0:NSPM-1)
|
complex cx(0:NH)
|
||||||
complex cd(0:11,0:3)
|
equivalence (x,cx)
|
||||||
complex z,zmax
|
|
||||||
integer itone(234)
|
|
||||||
real r(234)
|
|
||||||
real ss(0:3)
|
|
||||||
character*12 arg
|
|
||||||
|
|
||||||
nargs=iargc()
|
! FIR lowpass filter designed using ScopeFIR
|
||||||
if(nargs.ne.3) then
|
|
||||||
print*,'Usage: t1 nsymtest snrdb iters'
|
|
||||||
go to 999
|
|
||||||
endif
|
|
||||||
call getarg(1,arg)
|
|
||||||
read(arg,*) nsymtest
|
|
||||||
call getarg(2,arg)
|
|
||||||
read(arg,*) snrdb
|
|
||||||
call getarg(3,arg)
|
|
||||||
read(arg,*) iters
|
|
||||||
|
|
||||||
call init_random_seed() ! seed Fortran RANDOM_NUMBER generator
|
! fsample = 48000 Hz
|
||||||
call sgran() ! see C rand generator (used in gran)
|
! Ntaps = 49
|
||||||
|
! fc = 4500 Hz
|
||||||
|
! fstop = 6000 Hz
|
||||||
|
! Ripple = 1 dB
|
||||||
|
! Stop Atten = 40 dB
|
||||||
|
! fout = 12000 Hz
|
||||||
|
! Filter coefficients:
|
||||||
|
data w/ &
|
||||||
|
0.000861074040, 0.010051920210, 0.010161983649, 0.011363155076, &
|
||||||
|
0.008706594219, 0.002613872664,-0.005202883094,-0.011720748164, &
|
||||||
|
-0.013752163325,-0.009431602741, 0.000539063909, 0.012636767098, &
|
||||||
|
0.021494659597, 0.021951235065, 0.011564169382,-0.007656470131, &
|
||||||
|
-0.028965787341,-0.042637874109,-0.039203309748,-0.013153301537, &
|
||||||
|
0.034320769178, 0.094717832646, 0.154224604789, 0.197758325022, &
|
||||||
|
0.213715139513, 0.197758325022, 0.154224604789, 0.094717832646, &
|
||||||
|
0.034320769178,-0.013153301537,-0.039203309748,-0.042637874109, &
|
||||||
|
-0.028965787341,-0.007656470131, 0.011564169382, 0.021951235065, &
|
||||||
|
0.021494659597, 0.012636767098, 0.000539063909,-0.009431602741, &
|
||||||
|
-0.013752163325,-0.011720748164,-0.005202883094, 0.002613872664, &
|
||||||
|
0.008706594219, 0.011363155076, 0.010161983649, 0.010051920210, &
|
||||||
|
0.000861074040/
|
||||||
|
|
||||||
call random_number(r)
|
x=0.
|
||||||
itone=0
|
do i=-24,24
|
||||||
where(r.gt.0.5) itone=1
|
j=i
|
||||||
|
if(j.lt.0) j=j+NFFT
|
||||||
twopi=8.0*atan(1.0)
|
x(j)=w(i)
|
||||||
fmid=1500.0
|
|
||||||
f0=fmid-500.
|
|
||||||
f1=fmid+500.
|
|
||||||
dt=1.0/12000.0
|
|
||||||
|
|
||||||
phi=0.
|
|
||||||
do n=0,3
|
|
||||||
k=-1
|
|
||||||
dphi=twopi*f0*dt
|
|
||||||
if(n.ge.2) dphi=twopi*f1*dt
|
|
||||||
do i=0,5
|
|
||||||
k=k+1
|
|
||||||
phi=phi+dphi
|
|
||||||
if(phi.gt.twopi) phi=phi-twopi
|
|
||||||
cd(k,n)=cmplx(cos(phi),sin(phi))
|
|
||||||
enddo
|
|
||||||
|
|
||||||
dphi=twopi*f0*dt
|
|
||||||
if(mod(n,2).eq.1) dphi=twopi*f1*dt
|
|
||||||
do i=6,11
|
|
||||||
k=k+1
|
|
||||||
phi=phi+dphi
|
|
||||||
if(phi.gt.twopi) phi=phi-twopi
|
|
||||||
cd(k,n)=cmplx(cos(phi),sin(phi))
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! do k=0,11
|
call four2a(x,NFFT,1,-1,0) !r2c FFT
|
||||||
! write(13,1000) k,cd(k,0:3)
|
|
||||||
!1000 format(i4,8f9.3)
|
|
||||||
!enddo
|
|
||||||
|
|
||||||
! Generate signal waveform
|
df=48000.0/NFFT
|
||||||
k=-1
|
do i=0,NH
|
||||||
phi=0.
|
y=abs(cx(i))
|
||||||
do j=1,234
|
s=y*y
|
||||||
dphi=twopi*f0*dt
|
f=i*df
|
||||||
if(itone(j).eq.1) dphi=twopi*f1*dt
|
write(13,1000) f,y,s,db(s),cx(i)
|
||||||
do i=1,6
|
1000 format(6f12.6)
|
||||||
k=k+1
|
|
||||||
phi=phi+dphi
|
|
||||||
if(phi.gt.twopi) phi=phi-twopi
|
|
||||||
csig(k)=cmplx(cos(phi),sin(phi))
|
|
||||||
! write(14,1000) k,csig(k)
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
write(*,1010)
|
end program t1
|
||||||
1010 format(' S/N (S+N)/N BER'/'----------------------')
|
|
||||||
|
|
||||||
isnra=10
|
|
||||||
isnrb=-3
|
|
||||||
nsyms=234
|
|
||||||
do isnr=isnra,isnrb,-1
|
|
||||||
snr=10.0**(0.1*isnr)
|
|
||||||
if(snrdb.ne.0.0) snr=10.0**(0.1*snrdb)
|
|
||||||
fac=1.0/sqrt(snr)
|
|
||||||
nsumerr=0
|
|
||||||
do iter=1,iters
|
|
||||||
do i=0,NSPM-1
|
|
||||||
x=gran()
|
|
||||||
y=gran()
|
|
||||||
cnoise(i)=cmplx(x,y)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
c=csig + fac*cnoise
|
|
||||||
nerr=0
|
|
||||||
n1=2
|
|
||||||
nstep=2
|
|
||||||
iz=5
|
|
||||||
if(nsymtest.eq.2) then
|
|
||||||
n1=3
|
|
||||||
nstep=1
|
|
||||||
iz=11
|
|
||||||
endif
|
|
||||||
|
|
||||||
do j=1,nsyms
|
|
||||||
smax=0.
|
|
||||||
do n=0,n1,nstep
|
|
||||||
s=0.
|
|
||||||
k=6*(j-1)
|
|
||||||
do i=0,iz
|
|
||||||
s=s + aimag(c(k+i))*aimag(cd(i,n))
|
|
||||||
enddo
|
|
||||||
ss(n)=s
|
|
||||||
if(abs(s).gt.abs(smax)) then
|
|
||||||
smax=s
|
|
||||||
npk=n
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
sym=max(abs(ss(2)),abs(ss(3))) - max(abs(ss(0)),abs(ss(1)))
|
|
||||||
! ibit=npk/2
|
|
||||||
ibit=0
|
|
||||||
if(sym.ge.0.0) ibit=1
|
|
||||||
if(ibit.ne.itone(j)) nerr=nerr+1
|
|
||||||
enddo
|
|
||||||
nsumerr=nsumerr+nerr
|
|
||||||
enddo
|
|
||||||
|
|
||||||
write(*,1020) 10.0*log10(snr),10.0*log10(snr+1.0), &
|
|
||||||
float(nsumerr)/(nsyms*iters)
|
|
||||||
1020 format(f5.1,f7.1,f9.3)
|
|
||||||
if(snrdb.ne.0.0) exit
|
|
||||||
enddo
|
|
||||||
|
|
||||||
999 end program t1
|
|
||||||
|
|
||||||
|
@ -37,13 +37,13 @@ Mode nsps Rate B t_sym t_msg Suggested
|
|||||||
Slow modes, sample Rate 12000 Hz:
|
Slow modes, sample Rate 12000 Hz:
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
JT9A 6912 1.736 15.625 576 48.96 QRP HF dxing
|
JT9A 6912 1.736 15.625 576 48.96 QRP HF dxing
|
||||||
JT9B 3840 1.736 28.125 576 48.96
|
JT9B 6912 1.736 28.125 576 48.96
|
||||||
JT9C 1920 1.736 56.25 576 48.96
|
JT9C 6912 1.736 56.25 576 48.96
|
||||||
JT9D 960 1.736 112.5 576 48.96
|
JT9D 6912 1.736 112.5 576 48.96
|
||||||
JT9E 480 1.736 225 576 48.96
|
JT9E 6912 1.736 225 576 48.96
|
||||||
JT9F 240 1.736 450 576 48.96
|
JT9F 6912 1.736 450 576 48.96
|
||||||
JT9G 120 1.736 900 576 48.96
|
JT9G 6912 1.736 900 576 48.96 Microwave EME?
|
||||||
JT9H 60 1.736 1800 576 48.96 Microwave EME?
|
JT9H 6912 1.736 1800 576 48.96 Microwave EME?
|
||||||
|
|
||||||
WSPR 8192 1.465 5.86 683 110.59 Propagation probe
|
WSPR 8192 1.465 5.86 683 110.59 Propagation probe
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ extern "C" {
|
|||||||
void hash_calls_(char calls[], int* ih9, int len);
|
void hash_calls_(char calls[], int* ih9, int len);
|
||||||
void degrade_snr_(short d2[], int* n, float* db, float* bandwidth);
|
void degrade_snr_(short d2[], int* n, float* db, float* bandwidth);
|
||||||
void wav12_(short d2[], short d1[], int* nbytes, short* nbitsam2);
|
void wav12_(short d2[], short d1[], int* nbytes, short* nbitsam2);
|
||||||
void refspec_(short int d2[], int* k);
|
void refspectrum_(short int d2[], bool* brefspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols
|
int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols
|
||||||
@ -874,8 +874,7 @@ void MainWindow::dataSink(qint64 frames)
|
|||||||
static float df3;
|
static float df3;
|
||||||
|
|
||||||
int k (frames);
|
int k (frames);
|
||||||
refspec_(dec_data.d2,&k);
|
refspectrum_(&dec_data.d2[k-3456],&m_bRefSpec);
|
||||||
// wspr_downsample_(dec_data.d2,&k);
|
|
||||||
|
|
||||||
if(m_diskData) {
|
if(m_diskData) {
|
||||||
dec_data.params.ndiskdat=1;
|
dec_data.params.ndiskdat=1;
|
||||||
|
Loading…
Reference in New Issue
Block a user