mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 12:30:23 -04:00 
			
		
		
		
	WIP on sfoxtest.
This commit is contained in:
		
							parent
							
								
									8c61d303bf
								
							
						
					
					
						commit
						ca5bc0e86b
					
				| @ -28,7 +28,7 @@ subroutine hard_symbols(crcvd,f,t,jdat) | |||||||
|         jdat(n)=ipk(1)+256-64 |         jdat(n)=ipk(1)+256-64 | ||||||
|      endif |      endif | ||||||
|   enddo |   enddo | ||||||
|   jdat(NN-1:nn)=0 | !  jdat(NN-1:nn)=0 | ||||||
| 
 | 
 | ||||||
|   return |   return | ||||||
| end subroutine hard_symbols | end subroutine hard_symbols | ||||||
|  | |||||||
| @ -21,20 +21,10 @@ void rs_init_sf_(int *mm, int *nq, int *nn0, int *kk0, int *nfz) | |||||||
|   first=0; |   first=0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void rs_encode_sf_(int *dgen, int *sent) | void rs_encode_sf_(int *msg, int *parsym) | ||||||
| // Encode the information symbols dgen[KK], producing channel symbols sent[NN].
 | // Encode information symbols msg[KK], producing parity symbols parsym[nroots].
 | ||||||
| { | { | ||||||
|   int b[256];                    //These are the parity symbols
 |   encode_rs_sf(rs_sf,msg,parsym);    //Compute the parity symbols
 | ||||||
|   encode_rs_sf(rs_sf,dgen,b);    //Compute the parity symbols
 |  | ||||||
| 
 |  | ||||||
| // Copy parity symbols into sent[] array, followed by information symbols
 |  | ||||||
|   for (int i=0; i< nn; i++) { |  | ||||||
|     if(i<nroots) { |  | ||||||
|       sent[i]=b[i]; |  | ||||||
|     } else { |  | ||||||
|       sent[i]=dgen[i-nroots]; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *nerr) | void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *nerr) | ||||||
|  | |||||||
| @ -12,13 +12,15 @@ program sfoxtest | |||||||
|   complex clo(NMAX)                      !Complex Local Oscillator |   complex clo(NMAX)                      !Complex Local Oscillator | ||||||
|   complex cnoise(NMAX)                   !Complex noise |   complex cnoise(NMAX)                   !Complex noise | ||||||
|   complex crcvd(NMAX)                    !Signal as received |   complex crcvd(NMAX)                    !Signal as received | ||||||
|   integer imsg(KK)                       !Information symbols |   integer msg0(KK)                       !Information symbols | ||||||
|   integer jmsg(KK)                       !Decoded information | !  integer msg(KK)                        !Decoded information | ||||||
|   integer*1 imsg1(7*KK)                  !Copy of imsg in 1-bit i*1 format |   integer parsym(NN-KK)                  !Parity symbols | ||||||
|   integer idat(NN)                       !Encoded data, 7-bit integers | !  integer*1 msg1(MM*KK)                  !Copy of msg0 in 1-bit i*1 format | ||||||
|   integer jdat(NN)                       !Recovered hard-decision symbols |   integer chansym0(NN)                   !Encoded data, 7-bit integers | ||||||
|  |   integer chansym(NN)                    !Recovered hard-decision symbols | ||||||
|  |   integer iera(NN) | ||||||
|   character fname*17,arg*12 |   character fname*17,arg*12 | ||||||
|   character c357*357,c14*14 !,chkmsg*15 | !  character c357*357,c14*14 !,chkmsg*15 | ||||||
|    |    | ||||||
|   nargs=iargc() |   nargs=iargc() | ||||||
|   if(nargs.ne.8) then |   if(nargs.ne.8) then | ||||||
| @ -51,23 +53,19 @@ program sfoxtest | |||||||
|   bandwidth_ratio=2500.0/6000.0 |   bandwidth_ratio=2500.0/6000.0 | ||||||
| 
 | 
 | ||||||
| ! Generate a message | ! Generate a message | ||||||
|  |   msg0=0 | ||||||
|   do i=1,KK-2 |   do i=1,KK-2 | ||||||
|      imsg(i)=i |      msg0(i)=i | ||||||
|   enddo |   enddo | ||||||
| 
 | ! Append a CRC here ... | ||||||
| ! Append a 14-bit CRC |  | ||||||
|   imsg(KK-1:KK)=0 |  | ||||||
|   write(c357,'(51b7.7)') imsg(1:KK) |  | ||||||
|   read(c357,'(357i1)') imsg1 |  | ||||||
|   call get_crc14(imsg1,7*KK,ncrc0) |  | ||||||
|   write(c14,'(b14.14)') ncrc0 |  | ||||||
|   read(c14,'(2b7.7)') imsg(KK-1:KK) |  | ||||||
| 
 | 
 | ||||||
|   call rs_init_sf(MM,NQ,NN,KK,NFZ)          !Initialize the Karn codec |   call rs_init_sf(MM,NQ,NN,KK,NFZ)          !Initialize the Karn codec | ||||||
|   call rs_encode_sf(imsg,idat)              !Encode imsg into idat |   call rs_encode_sf(msg0,parsym)            !Compute parity symbols | ||||||
|  |   chansym0(1:kk)=msg0(1:kk) | ||||||
|  |   chansym0(kk+1:nn)=parsym(1:nn-kk) | ||||||
| 
 | 
 | ||||||
| ! Generate cdat (SuperFox waveform) and clo (LO for sync detection) | ! Generate cdat (SuperFox waveform) and clo (LO for sync detection) | ||||||
|   call gen_sfox(idat,f0,fsample,syncwidth,cdat,clo) |   call gen_sfox(chansym0,f0,fsample,syncwidth,cdat,clo) | ||||||
| 
 | 
 | ||||||
|   do isnr=0,-30,-1 |   do isnr=0,-30,-1 | ||||||
|      snr=isnr |      snr=isnr | ||||||
| @ -95,7 +93,7 @@ program sfoxtest | |||||||
|         if(f0.eq.0.0) then |         if(f0.eq.0.0) then | ||||||
|            f1=1500.0 + 200.0*(ran1(idummy)-0.5) |            f1=1500.0 + 200.0*(ran1(idummy)-0.5) | ||||||
|            xdt=2.0*(ran1(idummy)-0.5) |            xdt=2.0*(ran1(idummy)-0.5) | ||||||
|            call gen_sfox(idat,f1,fsample,syncwidth,cdat,clo) |            call gen_sfox(chansym0,f1,fsample,syncwidth,cdat,clo) | ||||||
|         endif |         endif | ||||||
|          |          | ||||||
|         crcvd=0. |         crcvd=0. | ||||||
| @ -115,16 +113,13 @@ program sfoxtest | |||||||
|         terr=t-xdt |         terr=t-xdt | ||||||
|         if(abs(ferr).lt.5.0 .and. abs(terr).lt.0.01) ngoodsync=ngoodsync+1 |         if(abs(ferr).lt.5.0 .and. abs(terr).lt.0.01) ngoodsync=ngoodsync+1 | ||||||
| 
 | 
 | ||||||
|         call hard_symbols(crcvd,f,t,jdat)           !Get hard symbol values |         call hard_symbols(crcvd,f,t,chansym)           !Get hard symbol values | ||||||
|         nera=0 |         nera=0 | ||||||
|         call rs_decode_sf(idat,iera,nera,jmsg,nfixed)  !Call the decoder |         chansym=mod(chansym,nq)                        !Enforce 0 to nq-1 | ||||||
|         write(c357,'(51b7.7)') jmsg(1:KK) |         nharderr=count(chansym.ne.chansym0)            !Count hard errors | ||||||
|         read(c357,'(357i1)') imsg11 |  | ||||||
|         call get_crc14(imsg1,7*KK,ncrc) |  | ||||||
| 
 |  | ||||||
|         nharderr=count(jdat.ne.idat)                !Count hard errors |  | ||||||
|         ntot=ntot+nharderr |         ntot=ntot+nharderr | ||||||
|         nworst=max(nworst,nharderr) |         nworst=max(nworst,nharderr) | ||||||
|  |         call rs_decode_sf(chansym,iera,nera,nfixed)    !Call the decoder | ||||||
|    |    | ||||||
|         if(snrdb.ne.0) then |         if(snrdb.ne.0) then | ||||||
|            fname='000000_000001.wav' |            fname='000000_000001.wav' | ||||||
| @ -146,6 +141,7 @@ program sfoxtest | |||||||
| !        write(13,1200) ifile,snr,ferr,terr,nharderr | !        write(13,1200) ifile,snr,ferr,terr,nharderr | ||||||
| !1200    format(i5,3f10.3,i5) | !1200    format(i5,3f10.3,i5) | ||||||
|      enddo  ! ifile |      enddo  ! ifile | ||||||
|  | !     print*,'D' | ||||||
|      fgoodsync=float(ngoodsync)/nfiles |      fgoodsync=float(ngoodsync)/nfiles | ||||||
|      fgood=float(ngood)/nfiles |      fgood=float(ngood)/nfiles | ||||||
|      if(isnr.eq.0) write(*,1300) |      if(isnr.eq.0) write(*,1300) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user