mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-07-29 20:22:28 -04:00
Added real-world likelihood normalization that doesn't require SNR estimate.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6500 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
a7e1e8ee75
commit
88e84d18e9
@ -3,15 +3,16 @@ program msksim
|
|||||||
use, intrinsic :: iso_c_binding
|
use, intrinsic :: iso_c_binding
|
||||||
|
|
||||||
parameter (N=128, M=48, K=80) ! M and N are global variables on the C side.
|
parameter (N=128, M=48, K=80) ! M and N are global variables on the C side.
|
||||||
integer(1) message(1:K)
|
|
||||||
integer(1) codeword(1:N)
|
|
||||||
integer(1) decoded(1:K)
|
|
||||||
real*8 lratio(N)
|
|
||||||
character(50) pchk_file,gen_file
|
character(50) pchk_file,gen_file
|
||||||
|
integer(1) codeword(1:N), decoded(1:K), message(1:K)
|
||||||
|
real*8 lratio(N), rxdata(N)
|
||||||
|
|
||||||
|
! To change to a different code, edit the following 3 lines.
|
||||||
pchk_file="./jtmode_codes/ldpc-128-80-sf13.pchk"
|
pchk_file="./jtmode_codes/ldpc-128-80-sf13.pchk"
|
||||||
gen_file="./jtmode_codes/ldpc-128-80-sf13.gen"
|
gen_file="./jtmode_codes/ldpc-128-80-sf13.gen"
|
||||||
|
|
||||||
|
rate=real(K)/real(N)
|
||||||
|
|
||||||
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
||||||
|
|
||||||
message(1:40)=1
|
message(1:40)=1
|
||||||
@ -20,7 +21,6 @@ call ldpc_encode(message,codeword)
|
|||||||
|
|
||||||
max_iterations=10
|
max_iterations=10
|
||||||
ntrials=1000000
|
ntrials=1000000
|
||||||
rate=real(K)/real(N)
|
|
||||||
|
|
||||||
write(*,*) "Eb/N0 ngood nundetected"
|
write(*,*) "Eb/N0 ngood nundetected"
|
||||||
do idb = 0, 11
|
do idb = 0, 11
|
||||||
@ -33,8 +33,20 @@ do idb = 0, 11
|
|||||||
do itrial=1, ntrials
|
do itrial=1, ntrials
|
||||||
|
|
||||||
do i=1,N
|
do i=1,N
|
||||||
rxdata = 2.0*(codeword(i)-0.5) + sigma*gran()
|
rxdata(i) = 2.0*(codeword(i)-0.5) + sigma*gran()
|
||||||
lratio(i)=exp(2.0*rxdata/(sigma*sigma))
|
enddo
|
||||||
|
|
||||||
|
! correct signal normalization is important for this decoder.
|
||||||
|
rxav=sum(rxdata)/N
|
||||||
|
rx2av=sum(rxdata*rxdata)/N
|
||||||
|
rxsig=sqrt(rx2av-rxav*rxav)
|
||||||
|
rxdata=rxdata/rxsig
|
||||||
|
|
||||||
|
! s can be tuned to trade a few tenth's dB of threshold
|
||||||
|
! for an order of magnitude in UER
|
||||||
|
do i=1,N
|
||||||
|
s=0.75
|
||||||
|
lratio(i)=exp(2.0*rxdata(i)/(s*s))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call ldpc_decode(lratio, decoded, max_iterations, niterations)
|
call ldpc_decode(lratio, decoded, max_iterations, niterations)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user