mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			46 lines
		
	
	
		
			752 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			752 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 
								 | 
							
								subroutine inter_wspr(id,ndir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Interleave (ndir=1) or de-interleave (ndir=-1) the array id.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  integer*1 id(0:161),itmp(0:161)
							 | 
						||
| 
								 | 
							
								  integer j0(0:161)
							 | 
						||
| 
								 | 
							
								  logical first
							 | 
						||
| 
								 | 
							
								  data first/.true./
							 | 
						||
| 
								 | 
							
								  save
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if(first) then
							 | 
						||
| 
								 | 
							
								! Compute the interleave table using bit reversal.
							 | 
						||
| 
								 | 
							
								     k=-1
							 | 
						||
| 
								 | 
							
								     do i=0,255
							 | 
						||
| 
								 | 
							
								        n=0
							 | 
						||
| 
								 | 
							
								        ii=i
							 | 
						||
| 
								 | 
							
								        do j=0,7
							 | 
						||
| 
								 | 
							
								           n=n+n
							 | 
						||
| 
								 | 
							
								           if(iand(ii,1).ne.0) n=n+1
							 | 
						||
| 
								 | 
							
								           ii=ii/2
							 | 
						||
| 
								 | 
							
								        enddo
							 | 
						||
| 
								 | 
							
								        if(n.le.161) then
							 | 
						||
| 
								 | 
							
								           k=k+1
							 | 
						||
| 
								 | 
							
								           j0(k)=n
							 | 
						||
| 
								 | 
							
								        endif
							 | 
						||
| 
								 | 
							
								     enddo
							 | 
						||
| 
								 | 
							
								     first=.false.
							 | 
						||
| 
								 | 
							
								  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if(ndir.eq.1) then
							 | 
						||
| 
								 | 
							
								     do i=0,161
							 | 
						||
| 
								 | 
							
								        itmp(j0(i))=id(i)
							 | 
						||
| 
								 | 
							
								     enddo
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								     do i=0,161
							 | 
						||
| 
								 | 
							
								        itmp(i)=id(j0(i))
							 | 
						||
| 
								 | 
							
								     enddo
							 | 
						||
| 
								 | 
							
								  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  do i=0,161
							 | 
						||
| 
								 | 
							
								     id(i)=itmp(i)
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return
							 | 
						||
| 
								 | 
							
								end subroutine inter_wspr
							 |