mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	OK, I think we're now computing array ss(4,322,32768) correctly
for the B2 and C2 modes. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2555 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									8663692581
								
							
						
					
					
						commit
						887f0c99b4
					
				| @ -1,5 +1,5 @@ | ||||
| subroutine symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample,fgreen,   & | ||||
|      iqadjust,iqapply,gainx,gainy,phasex,phasey,rejectx,rejecty,         & | ||||
| subroutine symspec(k,nfast, nxpol,ndiskdat,nb,nbslider,idphi,nfsample,   & | ||||
|      fgreen,iqadjust,iqapply,gainx,gainy,phasex,phasey,rejectx,rejecty,  & | ||||
|      pxdb,pydb,ssz5a,nkhz,ihsym,nzap,slimit,lstrong) | ||||
| 
 | ||||
| !  k        pointer to the most recent new data | ||||
| @ -23,10 +23,11 @@ subroutine symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample,fgreen,   & | ||||
|   real*8 ts,hsym | ||||
|   real*8 fcenter | ||||
|   common/datcom/dd(4,5760000),ss(4,322,NFFT),savg(4,NFFT),fcenter,nutc,junk(36) | ||||
|   real*4 ssz5a(NFFT),w(NFFT) | ||||
|   real*4 ssz5a(NFFT),w(NFFT),w2a(NFFT),w2b(NFFT) | ||||
|   complex z,zfac | ||||
|   complex zsumx,zsumy | ||||
|   complex cx(NFFT),cy(NFFT) | ||||
|   complex cx00(NFFT),cy00(NFFT) | ||||
|   complex cx0(0:1023),cx1(0:1023) | ||||
|   complex cy0(0:1023),cy1(0:1023) | ||||
|   logical*1 lstrong(0:1023) | ||||
| @ -40,10 +41,19 @@ subroutine symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample,fgreen,   & | ||||
|   endif | ||||
|   if(k0.eq.99999999) then | ||||
|      pi=4.0*atan(1.0) | ||||
|      w2a=0. | ||||
|      w2b=0. | ||||
|      do i=1,NFFT | ||||
|         w(i)=(sin(i*pi/NFFT))**2 | ||||
|         w(i)=(sin(i*pi/NFFT))**2                          !Window for nfast=1 | ||||
|         if(i.lt.17833) w2a(i)=(sin(i*pi/17832.925))**2    !Window a for nfast=2 | ||||
|         j=i-8916 | ||||
|         if(j.lt.17833) w2b(i)=(sin(j*pi/17832.925))**2    !Window b for nfast=2 | ||||
|      enddo | ||||
|   endif | ||||
| 
 | ||||
|   hsym=2048.d0*96000.d0/11025.d0      !Samples per JT65 half-symbol | ||||
|   if(nfsample.eq.95238)   hsym=2048.d0*95238.1d0/11025.d0 | ||||
| 
 | ||||
|   if(k.lt.k0) then | ||||
|      ts=1.d0 - hsym | ||||
|      savg=0. | ||||
| @ -90,15 +100,12 @@ subroutine symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample,fgreen,   & | ||||
|      k1=k1+kstep | ||||
|   enddo | ||||
| 
 | ||||
|   hsym=2048.d0*96000.d0/11025.d0      !Samples per JT65 half-symbol | ||||
|   if(nfsample.eq.95238)   hsym=2048.d0*95238.1d0/11025.d0 | ||||
|   npts=NFFT                           !Samples used in each half-symbol FFT | ||||
| 
 | ||||
|   ihsym=ihsym+1 | ||||
|   ja=ts+hsym                          !Index of first sample | ||||
|   ts=ts+hsym | ||||
|   ja=ts                               !Index of first sample | ||||
|   jb=ja+npts-1                        !Last sample | ||||
| 
 | ||||
|   ts=ts+hsym | ||||
|   i=0 | ||||
|   fac=0.0002 | ||||
|   dphi=idphi/57.2957795 | ||||
| @ -133,54 +140,102 @@ subroutine symspec(k,nxpol,ndiskdat,nb,nbslider,idphi,nfsample,fgreen,   & | ||||
|   if(pxdb.gt.60.0) pxdb=60.0 | ||||
|   if(pydb.gt.60.0) pydb=60.0 | ||||
| 
 | ||||
|   cx=w*cx                             !Apply window for 2nd forward FFT | ||||
|   if(nxpol.ne.0) cy=w*cy | ||||
|   cx00=cx | ||||
|   if(nxpol.ne.0) cy00=cy | ||||
| 
 | ||||
|   call four2a(cx,NFFT,1,1,1)          !Second forward FFT | ||||
|   if(iqadjust.eq.0) nadjx=0 | ||||
|   if(iqadjust.ne.0 .and. nadjx.lt.50) call iqcal(nadjx,cx,NFFT,gainx,phasex, & | ||||
|                                                  zsumx,ipkx,rejectx0) | ||||
|   if(iqapply.ne.0) call iqfix(cx,NFFT,gainx,phasex) | ||||
|   do mm=1,nfast | ||||
|      if(nfast.eq.1) then | ||||
|         cx=w*cx00                           !Apply window for 2nd forward FFT | ||||
|         if(nxpol.ne.0) cy=w*cy00 | ||||
|      else | ||||
|         if(mm.eq.1) then | ||||
|            cx=w2a*cx00 | ||||
|            if(nxpol.ne.0) cy=w2a*cy00 | ||||
|         else | ||||
|            cx=w2b*cx00 | ||||
|            if(nxpol.ne.0) cy=w2b*cy00 | ||||
|         endif | ||||
|      endif | ||||
| 
 | ||||
|   if(nxpol.ne.0) then | ||||
|      call four2a(cy,NFFT,1,1,1) | ||||
|      if(iqadjust.eq.0) nadjy=0 | ||||
|      if(iqadjust.ne.0 .and. nadjy.lt.50) call iqcal(nadjy,cy,NFFT,gainy,phasey,& | ||||
|                                                  zsumy,ipky,rejecty) | ||||
|      if(iqapply.ne.0) call iqfix(cy,NFFT,gainy,phasey) | ||||
|   endif | ||||
|      call four2a(cx,NFFT,1,1,1)          !Second forward FFT (X) | ||||
|      if(iqadjust.eq.0) nadjx=0 | ||||
|      if(iqadjust.ne.0 .and. nadjx.lt.50) call iqcal(nadjx,cx,NFFT,    & | ||||
|           gainx,phasex,zsumx,ipkx,rejectx0) | ||||
|      if(iqapply.ne.0) call iqfix(cx,NFFT,gainx,phasex) | ||||
| 
 | ||||
|   n=ihsym | ||||
|   do i=1,NFFT | ||||
|      sx=real(cx(i))**2 + aimag(cx(i))**2   | ||||
|      ss(1,n,i)=sx                    ! Pol = 0 | ||||
|      savg(1,i)=savg(1,i) + sx | ||||
|       | ||||
|      if(nxpol.ne.0) then | ||||
|         z=cx(i) + cy(i) | ||||
|         s45=0.5*(real(z)**2 + aimag(z)**2) | ||||
|         ss(2,n,i)=s45                   ! Pol = 45 | ||||
|         savg(2,i)=savg(2,i) + s45 | ||||
|         call four2a(cy,NFFT,1,1,1)       !Second forward FFT (Y) | ||||
|         if(iqadjust.eq.0) nadjy=0 | ||||
|         if(iqadjust.ne.0 .and. nadjy.lt.50) call iqcal(nadjy,cy,NFFT, & | ||||
|              gainy,phasey,zsumy,ipky,rejecty) | ||||
|         if(iqapply.ne.0) call iqfix(cy,NFFT,gainy,phasey) | ||||
|      endif | ||||
| 
 | ||||
|         sy=real(cy(i))**2 + aimag(cy(i))**2 | ||||
|         ss(3,n,i)=sy                    ! Pol = 90 | ||||
|         savg(3,i)=savg(3,i) + sy | ||||
|      ihsym=ihsym+1 | ||||
|      n=ihsym | ||||
|      if(mm.eq.1) then | ||||
|         do i=1,NFFT | ||||
|            sx=real(cx(i))**2 + aimag(cx(i))**2   | ||||
|            ss(1,n,i)=sx                    ! Pol = 0 | ||||
|            savg(1,i)=savg(1,i) + sx | ||||
|       | ||||
|            if(nxpol.ne.0) then | ||||
|               z=cx(i) + cy(i) | ||||
|               s45=0.5*(real(z)**2 + aimag(z)**2) | ||||
|               ss(2,n,i)=s45                   ! Pol = 45 | ||||
|               savg(2,i)=savg(2,i) + s45 | ||||
| 
 | ||||
|               sy=real(cy(i))**2 + aimag(cy(i))**2 | ||||
|               ss(3,n,i)=sy                    ! Pol = 90 | ||||
|               savg(3,i)=savg(3,i) + sy | ||||
|          | ||||
|         z=cx(i) - cy(i) | ||||
|         s135=0.5*(real(z)**2 + aimag(z)**2) | ||||
|         ss(4,n,i)=s135                  ! Pol = 135 | ||||
|         savg(4,i)=savg(4,i) + s135 | ||||
|               z=cx(i) - cy(i) | ||||
|               s135=0.5*(real(z)**2 + aimag(z)**2) | ||||
|               ss(4,n,i)=s135                  ! Pol = 135 | ||||
|               savg(4,i)=savg(4,i) + s135 | ||||
| 
 | ||||
|         z=cx(i)*conjg(cy(i)) | ||||
|         q=sx - sy | ||||
|         u=2.0*real(z) | ||||
|         ssz5a(i)=0.707*sqrt(q*q + u*u)    !Spectrum of linear polarization | ||||
|               z=cx(i)*conjg(cy(i)) | ||||
|               q=sx - sy | ||||
|               u=2.0*real(z) | ||||
|               ssz5a(i)=0.707*sqrt(q*q + u*u)    !Spectrum of linear polarization | ||||
| ! Leif's formula: | ||||
| !     ssz5a(i)=0.5*(sx+sy) + (real(z)**2 + aimag(z)**2 - sx*sy)/(sx+sy) | ||||
|            else | ||||
|               ssz5a(i)=sx | ||||
|            endif | ||||
|         enddo | ||||
|      else | ||||
|         ssz5a(i)=sx | ||||
|         do i=1,NFFT | ||||
|            sx=real(cx(i))**2 + aimag(cx(i))**2   | ||||
|            ss(1,n,i)=ss(1,n,i) + sx                    ! Pol = 0 | ||||
|            savg(1,i)=savg(1,i) + sx | ||||
|       | ||||
|            if(nxpol.ne.0) then | ||||
|               z=cx(i) + cy(i) | ||||
|               s45=0.5*(real(z)**2 + aimag(z)**2) | ||||
|               ss(2,n,i)=ss(2,n,i) + s45                ! Pol = 45 | ||||
|               savg(2,i)=savg(2,i) + s45 | ||||
| 
 | ||||
|               sy=real(cy(i))**2 + aimag(cy(i))**2 | ||||
|               ss(3,n,i)=ss(3,n,i) + sy                 ! Pol = 90 | ||||
|               savg(3,i)=savg(3,i) + sy | ||||
|          | ||||
|               z=cx(i) - cy(i) | ||||
|               s135=0.5*(real(z)**2 + aimag(z)**2) | ||||
|               ss(4,n,i)=ss(4,n,i) + s135               ! Pol = 135 | ||||
|               savg(4,i)=savg(4,i) + s135 | ||||
| 
 | ||||
|               z=cx(i)*conjg(cy(i)) | ||||
|               q=sx - sy | ||||
|               u=2.0*real(z) | ||||
|               ssz5a(i)=ssz5a(i) + 0.707*sqrt(q*q + u*u)    !Spectrum of lin pol | ||||
|            else | ||||
|               ssz5a(i)=ssz5a(i) + sx | ||||
|            endif | ||||
|         enddo | ||||
|      endif | ||||
|   enddo | ||||
| 
 | ||||
|   if(ihsym.eq.278) then | ||||
|      if(iqadjust.ne.0 .and. ipkx.ne.0 .and. ipky.ne.0) then | ||||
|         rejectx=10.0*log10(savg(1,1+nfft-ipkx)/savg(1,1+ipkx)) | ||||
|  | ||||
| @ -497,10 +497,10 @@ void MainWindow::dataSink(int k) | ||||
|   fgreen=(float)g_pWideGraph->fGreen(); | ||||
|   nadj++; | ||||
|   if(m_adjustIQ==0) nadj=0; | ||||
|   symspec_(&k, &nxpol, &ndiskdat, &nb, &m_NBslider, &m_dPhi, &nfsample, | ||||
|            &fgreen, &m_adjustIQ, &m_applyIQcal, &m_gainx, &m_gainy, &m_phasex, | ||||
|            &m_phasey, &rejectx, &rejecty, &px, &py, s, &nkhz, | ||||
|            &ihsym, &nzap, &slimit, lstrong); | ||||
|   symspec_(&k, &m_nfast, &nxpol, &ndiskdat, &nb, &m_NBslider, &m_dPhi, | ||||
|            &nfsample, &fgreen, &m_adjustIQ, &m_applyIQcal, | ||||
|            &m_gainx, &m_gainy, &m_phasex, &m_phasey, &rejectx, &rejecty, | ||||
|            &px, &py, s, &nkhz, &ihsym, &nzap, &slimit, lstrong); | ||||
|   QString t; | ||||
|   m_pctZap=nzap/178.3; | ||||
|   if(m_xpol) t.sprintf(" Rx noise: %5.1f  %5.1f %5.1f %% ",px,py,m_pctZap); | ||||
| @ -549,7 +549,7 @@ void MainWindow::dataSink(int k) | ||||
|     ntrz=ntr; | ||||
|     n=0; | ||||
|   } | ||||
|   if(ihsym == 279/m_nfast) { | ||||
|   if(ihsym == 280) { | ||||
|     datcom_.newdat=1; | ||||
|     datcom_.nagain=0; | ||||
|     QDateTime t = QDateTime::currentDateTimeUtc(); | ||||
| @ -1038,7 +1038,7 @@ void MainWindow::diskDat()                                   //diskDat() | ||||
| 
 | ||||
|   if(m_fs96000) hsym=2048.0*96000.0/11025.0;   //Samples per JT65 half-symbol
 | ||||
|   if(!m_fs96000) hsym=2048.0*95238.1/11025.0; | ||||
|   for(int i=0; i<282/m_nfast; i++) {           // Do the half-symbol FFTs
 | ||||
|   for(int i=0; i<284/m_nfast; i++) {           // Do the half-symbol FFTs
 | ||||
|     int k = i*hsym + 2048.5; | ||||
|     dataSink(k); | ||||
|     if(i%10 == 0) qApp->processEvents();       //Keep the GUI responsive
 | ||||
| @ -1399,10 +1399,9 @@ void MainWindow::guiUpdate() | ||||
|     ba2msg(ba,message); | ||||
|     int len1=22; | ||||
|     int mode65=m_mode65; | ||||
|     int nfast=m_nfast; | ||||
|     double samfac=1.0; | ||||
| 
 | ||||
|     gen65_(message,&mode65,&nfast,&samfac,&nsendingsh,msgsent,iwave, | ||||
|     gen65_(message,&mode65,&m_nfast,&samfac,&nsendingsh,msgsent,iwave, | ||||
|            &nwave,len1,len1); | ||||
|     msgsent[22]=0; | ||||
| 
 | ||||
| @ -1821,8 +1820,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx)                //msgtype() | ||||
|   int i1=t.indexOf(" OOO"); | ||||
|   QByteArray s=t.toUpper().toLocal8Bit(); | ||||
|   ba2msg(s,message); | ||||
|   int nfast=m_nfast; | ||||
|   gen65_(message,&mode65,&nfast,&samfac,&nsendingsh,msgsent,iwave, | ||||
|   gen65_(message,&mode65,&m_nfast,&samfac,&nsendingsh,msgsent,iwave, | ||||
|          &mwave,len1,len1); | ||||
| 
 | ||||
|   QPalette p(tx->palette()); | ||||
|  | ||||
							
								
								
									
										12
									
								
								mainwindow.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								mainwindow.h
									
									
									
									
									
								
							| @ -267,12 +267,12 @@ extern void getDev(int* numDevices,char hostAPI_DeviceName[][50], | ||||
| 
 | ||||
| extern "C" { | ||||
| //----------------------------------------------------- C and Fortran routines
 | ||||
|   void symspec_(int* k, int* nxpol, int* ndiskdat, int* nb, int* m_NBslider, | ||||
|                 int* idphi, int* nfsample, float* fgreen, int* iqadjust, | ||||
|                 int* iqapply, float* gainx, float* gainy, float* phasex, | ||||
|                 float* phasey, float* rejectx, float* rejecty, float* px, | ||||
|                 float* py, float s[], int* nkhz, int* nhsym, int* nzap, | ||||
|                 float* slimit, uchar lstrong[]); | ||||
|   void symspec_(int* k, int* nfast, int* nxpol, int* ndiskdat, int* nb, | ||||
|                 int* m_NBslider, int* idphi, int* nfsample, float* fgreen, | ||||
|                 int* iqadjust, int* iqapply, float* gainx, float* gainy, | ||||
|                 float* phasex, float* phasey, float* rejectx, float* rejecty, | ||||
|                 float* px, float* py, float s[], int* nkhz, int* nhsym, | ||||
|                 int* nzap, float* slimit, uchar lstrong[]); | ||||
| 
 | ||||
|   void gen65_(char* msg, int* mode65, int* nfast, double* samfac, | ||||
|               int* nsendingsh, char* msgsent, short iwave[], int* nwave, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user