File: encode174_91.f90

package info (click to toggle)
wsjtx 2.3.0%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 63,524 kB
  • sloc: cpp: 59,051; f90: 34,130; python: 27,241; ansic: 11,205; fortran: 2,051; sh: 132; makefile: 109
file content (58 lines) | stat: -rw-r--r-- 1,397 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
subroutine encode174_91(message77,codeword)
!
! Add a 14-bit CRC to a 77-bit message and return a 174-bit codeword
!
   use, intrinsic :: iso_c_binding
   use iso_c_binding, only: c_loc,c_size_t
   use crc

   integer, parameter:: N=174, K=91, M=N-K
   character*91 tmpchar
   integer*1 codeword(N)
   integer*1 gen(M,K)
   integer*1 message77(77),message(K)
   integer*1 pchecks(M)
   integer*1, target :: i1MsgBytes(12)
   include "ldpc_174_91_c_generator.f90"
   logical first
   data first/.true./
   save first,gen

   if( first ) then ! fill the generator matrix
      gen=0
      do i=1,M
         do j=1,23
            read(g(i)(j:j),"(Z1)") istr
            ibmax=4
            if(j.eq.23) ibmax=3
            do jj=1, ibmax
               icol=(j-1)*4+jj
               if( btest(istr,4-jj) ) gen(i,icol)=1
            enddo
         enddo
      enddo
      first=.false.
   endif

! Add 14-bit CRC to form 91-bit message+CRC14
   write(tmpchar,'(77i1)') message77
   tmpchar(78:80)='000'
   i1MsgBytes=0
   read(tmpchar,'(10b8)') i1MsgBytes(1:10)
   ncrc14 = crc14 (c_loc (i1MsgBytes), 12)
   write(tmpchar(78:91),'(b14)') ncrc14
   read(tmpchar,'(91i1)') message

   do i=1,M
      nsum=0
      do j=1,K
         nsum=nsum+message(j)*gen(i,j)
      enddo
      pchecks(i)=mod(nsum,2)
   enddo

   codeword(1:K)=message
   codeword(K+1:N)=pchecks

   return
end subroutine encode174_91