79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								subroutine msksoftsymw(zz,aa,bb,id,nterms,ierror,rxdata,nhard0,nhardsync0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  include 'wsprlf_params.f90'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  complex zz(NS+ND)                     !Complex symbol values (intermediate)
							 | 
						||
| 
								 | 
							
								  complex z,z0
							 | 
						||
| 
								 | 
							
								  real rxdata(ND)                       !Soft symbols
							 | 
						||
| 
								 | 
							
								  real aa(20),bb(20)                    !Fitted polyco's
							 | 
						||
| 
								 | 
							
								  integer id(NS+ND)                     !NRZ values (+/-1) for Sync and Data
							 | 
						||
| 
								 | 
							
								  integer ierror(NS+ND)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  n=0
							 | 
						||
| 
								 | 
							
								  ierror=0
							 | 
						||
| 
								 | 
							
								  ierr=0
							 | 
						||
| 
								 | 
							
								  jz=(NS+ND+1)/2
							 | 
						||
| 
								 | 
							
								  do j=1,jz
							 | 
						||
| 
								 | 
							
								     xx=j*2.0/jz - 1.0
							 | 
						||
| 
								 | 
							
								     yii=1.
							 | 
						||
| 
								 | 
							
								     yqq=0.
							 | 
						||
| 
								 | 
							
								     if(nterms.gt.0) then
							 | 
						||
| 
								 | 
							
								        yii=aa(1)
							 | 
						||
| 
								 | 
							
								        yqq=bb(1)
							 | 
						||
| 
								 | 
							
								        do i=2,nterms
							 | 
						||
| 
								 | 
							
								           yii=yii + aa(i)*xx**(i-1)
							 | 
						||
| 
								 | 
							
								           yqq=yqq + bb(i)*xx**(i-1)
							 | 
						||
| 
								 | 
							
								        enddo
							 | 
						||
| 
								 | 
							
								     endif
							 | 
						||
| 
								 | 
							
								     z0=cmplx(yii,yqq)
							 | 
						||
| 
								 | 
							
								     z=zz(j)*conjg(z0)
							 | 
						||
| 
								 | 
							
								     p=real(z)
							 | 
						||
| 
								 | 
							
								     if(abs(id(j)).eq.2) then
							 | 
						||
| 
								 | 
							
								        if(real(z)*id(j).lt.0) then              !Sync bit
							 | 
						||
| 
								 | 
							
								           nhardsync0=nhardsync0+1
							 | 
						||
| 
								 | 
							
								           ierror(j)=2
							 | 
						||
| 
								 | 
							
								        endif
							 | 
						||
| 
								 | 
							
								     else
							 | 
						||
| 
								 | 
							
								        n=n+1                                    !Data bit
							 | 
						||
| 
								 | 
							
								        rxdata(n)=p
							 | 
						||
| 
								 | 
							
								        ierr=0
							 | 
						||
| 
								 | 
							
								        if(id(j)*p.lt.0) then
							 | 
						||
| 
								 | 
							
								           ierr=1
							 | 
						||
| 
								 | 
							
								           ierror(j)=1
							 | 
						||
| 
								 | 
							
								        endif
							 | 
						||
| 
								 | 
							
								        nhard0=nhard0+ierr
							 | 
						||
| 
								 | 
							
								     endif
							 | 
						||
| 
								 | 
							
								!     write(41,3301) j,id(j),ierror(j),ierr,n,p,p*id(j)
							 | 
						||
| 
								 | 
							
								!3301 format(5i6,2f10.3)
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  do j=jz+1,NS+ND
							 | 
						||
| 
								 | 
							
								     xx=(j-jz+0.5)*2.0/jz - 1.0
							 | 
						||
| 
								 | 
							
								     yii=1.
							 | 
						||
| 
								 | 
							
								     yqq=0.
							 | 
						||
| 
								 | 
							
								     if(nterms.gt.0) then
							 | 
						||
| 
								 | 
							
								        yii=aa(1)
							 | 
						||
| 
								 | 
							
								        yqq=bb(1)
							 | 
						||
| 
								 | 
							
								        do i=2,nterms
							 | 
						||
| 
								 | 
							
								           yii=yii + aa(i)*xx**(i-1)
							 | 
						||
| 
								 | 
							
								           yqq=yqq + bb(i)*xx**(i-1)
							 | 
						||
| 
								 | 
							
								        enddo
							 | 
						||
| 
								 | 
							
								     endif
							 | 
						||
| 
								 | 
							
								     z0=cmplx(yii,yqq)
							 | 
						||
| 
								 | 
							
								     z=zz(j)*conjg(z0)
							 | 
						||
| 
								 | 
							
								     p=aimag(z)
							 | 
						||
| 
								 | 
							
								     n=n+1
							 | 
						||
| 
								 | 
							
								     if(n.gt.ND) exit
							 | 
						||
| 
								 | 
							
								     rxdata(n)=p
							 | 
						||
| 
								 | 
							
								     ierr=0
							 | 
						||
| 
								 | 
							
								     if(id(j)*p.lt.0) then
							 | 
						||
| 
								 | 
							
								        ierr=1
							 | 
						||
| 
								 | 
							
								        ierror(j)=1
							 | 
						||
| 
								 | 
							
								     endif
							 | 
						||
| 
								 | 
							
								     nhard0=nhard0+ierr
							 | 
						||
| 
								 | 
							
								!     write(41,3301) j,id(j),ierror(j),ierr,n,p,p*id(j)
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return
							 | 
						||
| 
								 | 
							
								end subroutine msksoftsymw
							 |