mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	Add routines needed for QRA65code.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6795 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									9c19ff3eea
								
							
						
					
					
						commit
						9fe70e8a02
					
				
							
								
								
									
										76
									
								
								lib/genqra65.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								lib/genqra65.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| subroutine genqra65(msg0,ichk,msgsent,itone,itype) | ||||
| 
 | ||||
| ! Encodes a QRA65 message to yieild itone(1:126) | ||||
| 
 | ||||
|   use packjt | ||||
|   character*22 msg0 | ||||
|   character*22 message          !Message to be generated | ||||
|   character*22 msgsent          !Message as it will be received | ||||
|   integer itone(126) | ||||
|   character*3 cok               !'   ' or 'OOO' | ||||
|   integer dgen(13) | ||||
|   integer sent(63) | ||||
|   integer nprc(126) | ||||
|   data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,  & | ||||
|             0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,  & | ||||
|             0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,  & | ||||
|             0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,  & | ||||
|             1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,  & | ||||
|             0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,  & | ||||
|             1,1,1,1,1,1/ | ||||
|   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 | ||||
|   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) | ||||
|      if(nspecial.eq.0) then | ||||
|         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 qra65_enc(dgen,sent)           !Encode using QRA65 | ||||
|         nsym=126                            !Symbols per transmission | ||||
|         k=0 | ||||
|         do j=1,nsym | ||||
|            if(nprc(j).eq.0) then | ||||
|               k=k+1 | ||||
|               itone(j)=sent(k)+2 | ||||
|            else | ||||
|               itone(j)=0 | ||||
|            endif | ||||
|         enddo | ||||
|      else | ||||
|         nsym=32 | ||||
|         k=0 | ||||
|         do j=1,nsym | ||||
|            do n=1,4 | ||||
|               k=k+1 | ||||
|               if(iand(j,1).eq.1) itone(k)=0 | ||||
|               if(iand(j,1).eq.0) itone(k)=10*nspecial | ||||
|               if(k.eq.126) go to 10 | ||||
|            enddo | ||||
|         enddo | ||||
| 10      msgsent=message | ||||
|         itype=7 | ||||
|      endif | ||||
|   endif | ||||
| 
 | ||||
| 999 return | ||||
| end subroutine genqra65 | ||||
							
								
								
									
										21
									
								
								lib/qra/qra65/qra65_subs.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lib/qra/qra65/qra65_subs.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| // qra65_subs.c 
 | ||||
| // Fortran interface routines for QRA65
 | ||||
| 
 | ||||
| #include "qra65.h" | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| void qra65_enc_(int x[], int y[]) | ||||
| { | ||||
|   int ncall=0xf70c238;                          //K1ABC
 | ||||
|   qra65codec *codec = qra65_init(0,ncall);	//codec for ncall
 | ||||
|   qra65_encode(codec, y, x); | ||||
| } | ||||
| 
 | ||||
| void qra65_dec_(float r[], int xdec[], int* rc) | ||||
| { | ||||
|   //  int ncall=0xf70c238;                          //K1ABC
 | ||||
|   int ncall=0x890c60c;                          //KA1ABC
 | ||||
|   int i; | ||||
|   qra65codec *codec = qra65_init(1,ncall);	//codec for ncall
 | ||||
|   *rc = qra65_decode(codec,xdec,r); | ||||
| } | ||||
							
								
								
									
										79
									
								
								lib/qra65code.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								lib/qra65code.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | ||||
| program QRA65code | ||||
| 
 | ||||
| ! Provides examples of message packing, bit and symbol ordering, | ||||
| ! Reed Solomon encoding, and other necessary details of the QRA65 | ||||
| ! protocol. | ||||
| 
 | ||||
|   use packjt | ||||
|   character*22 msg,msg0,msg1,decoded,cok*3,bad*1,msgtype*10 | ||||
|   integer dgen(12),sent(63),dec(12) | ||||
|   real s3(0:63,1:63) | ||||
|   include 'testmsg.f90' | ||||
| 
 | ||||
|   nargs=iargc() | ||||
|   if(nargs.ne.1) then | ||||
|      print*,'Usage: qra65code "message"' | ||||
|      print*,'       qra65code -t' | ||||
|      go to 999 | ||||
|   endif | ||||
| 
 | ||||
|   call getarg(1,msg)                     !Get message from command line | ||||
|   nmsg=1 | ||||
|   if(msg(1:2).eq."-t") nmsg=NTEST | ||||
| 
 | ||||
|   write(*,1010) | ||||
| 1010 format("     Message                 Decoded                Err? Type             rc"/77("-")) | ||||
| 
 | ||||
|   do imsg=1,nmsg | ||||
|      if(nmsg.gt.1) msg=testmsg(imsg) | ||||
| 
 | ||||
|      call fmtmsg(msg,iz)                    !To upper, collapse mult blanks | ||||
|      msg0=msg                               !Input message | ||||
|      call chkmsg(msg,cok,nspecial,flip)     !See if it includes "OOO" report | ||||
|      msg1=msg                               !Message without "OOO" | ||||
|      call packmsg(msg1,dgen,itype)          !Pack message into 12 six-bit bytes | ||||
|      msgtype="" | ||||
|      if(itype.eq.1) msgtype="Std Msg" | ||||
|      if(itype.eq.2) msgtype="Type 1 pfx" | ||||
|      if(itype.eq.3) msgtype="Type 1 sfx" | ||||
|      if(itype.eq.4) msgtype="Type 2 pfx" | ||||
|      if(itype.eq.5) msgtype="Type 2 sfx" | ||||
|      if(itype.eq.6) msgtype="Free text" | ||||
| 
 | ||||
|      call qra65_enc(dgen,sent)              !Encode using QRA65 | ||||
| 
 | ||||
| ! Generate a simulated s3() array with moderately high S/N | ||||
|      s3=1.0 | ||||
|      do j=1,63 | ||||
|         do i=0,63 | ||||
|            s3(i,j)=1.0 + 0.1*gran() | ||||
|         enddo | ||||
|         k=sent(j) | ||||
|         s3(k,j)=s3(k,j) + 1.2 | ||||
|      enddo | ||||
| 
 | ||||
|      call qra65_dec(s3,dec,irc)            !Decode | ||||
|      decoded="                      " | ||||
|      if(irc.ge.0) then | ||||
|         call unpackmsg(dec,decoded)           !Unpack the user message | ||||
|         call fmtmsg(decoded,iz) | ||||
|      endif | ||||
| 
 | ||||
|      bad=" " | ||||
|      if(decoded.ne.msg0) bad="*" | ||||
|      write(*,1020) imsg,msg0,decoded,bad,itype,msgtype,irc | ||||
| 1020 format(i2,'.',2x,a22,2x,a22,3x,a1,i3,": ",a13,i3) | ||||
|   enddo | ||||
| 
 | ||||
|   if(nmsg.eq.1) then | ||||
|      write(*,1030) dgen | ||||
| 1030 format(/'Packed message, 6-bit symbols ',12i3) !Display packed symbols | ||||
| 
 | ||||
|      write(*,1040) sent | ||||
| 1040 format(/'Information-carrying channel symbols'/(i5,20i3)) | ||||
| 
 | ||||
|      write(*,1050) dec | ||||
| 1050 format(/'Received message, 6-bit symbols ',12i3) !Display packed symbols | ||||
|   endif | ||||
| 
 | ||||
| 999 end program QRA65code | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user