From c24e931f09e4b0ba3895d30d499092f0b7be6882 Mon Sep 17 00:00:00 2001 From: Jordan Sherer Date: Thu, 5 Sep 2019 14:07:24 -0400 Subject: [PATCH] Squashed commit of the following: commit 0d6833b23da2519155ee93b98b4144240b356730 Author: Jordan Sherer Date: Thu Sep 5 14:06:47 2019 -0400 Bump version commit 17705fcff6a22529f3dec45aa95cad90feb78c63 Author: Jordan Sherer Date: Thu Sep 5 10:36:03 2019 -0400 Updated configration labeling for idle timeout commit a9f8aa9549c1c6b62201a6c102d91649ee17b9a5 Author: Jordan Sherer Date: Thu Sep 5 10:07:11 2019 -0400 Decoder params tests commit 94e524741020fd8b3925233a189cedf0a8a282cc Author: Jordan Sherer Date: Wed Sep 4 21:24:23 2019 -0400 Fixed decoder bug that crashed the software commit 4fdbfc8d9082e0f52513a5c215489b13558972f9 Author: Jordan Sherer Date: Wed Sep 4 21:02:52 2019 -0400 Decoder params tweak commit 1e25ac41d442372f09b254d957e0d9e31773254e Merge: 97a0fb5 552cd7f Author: Jordan Sherer Date: Wed Sep 4 18:17:40 2019 -0400 Merge branch 'fortran-cleanup' of bitbucket.org:widefido/js8call-private into fortran-cleanup commit 97a0fb51b37c24e2638400dc5694fc4e988ae4f2 Author: Jordan Sherer Date: Wed Sep 4 18:15:25 2019 -0400 Heartbeat as a mode does not work if slow mode does not work. Tabling this idea for now. commit 552cd7fe5fc81c712b57b5f3ea79599177e53f69 Author: Jordan Sherer Date: Tue Sep 3 23:35:14 2019 +0000 js8_params.f90 edited online with Bitbucket commit 7c9e960b863148a4ecbca4f61584536471623ea2 Author: Jordan Sherer Date: Tue Sep 3 16:28:52 2019 -0400 Do not randomize offset at startup commit cff7b90dbb9aada2944e668a9bcf078470af4608 Author: Jordan Sherer Date: Tue Sep 3 16:20:19 2019 -0400 Slow label for button commit 977145dee89ccd7da4d43ce0bc2f9b79243aa200 Author: Jordan Sherer Date: Tue Sep 3 16:17:36 2019 -0400 Experimental slow mode commit 27c128e0b327e1c077a9b49e11750bef2f3c26eb Author: Jordan Sherer Date: Tue Sep 3 15:26:01 2019 -0400 HBs are Normal commit 89792f91abf22dcd7c512bf7362f5e2e1cb36374 Author: Jordan Sherer Date: Tue Sep 3 14:16:27 2019 -0400 Update heartbeat UI for more clarity commit f5cebbcdabe37d90b75ca7e8d1675a553e107c83 Author: Jordan Sherer Date: Tue Sep 3 11:58:53 2019 -0400 Optimize decode params commit b14003bb34d93f9e93d7d4ad4241d619963c3a65 Author: Jordan Sherer Date: Tue Sep 3 11:30:00 2019 -0400 Shrink speed column for Joe ;) commit 35f4446146efc9fd7044af3b56b0b93664238b24 Author: Jordan Sherer Date: Tue Sep 3 10:54:28 2019 -0400 Fixed fast mode decoder for directed messages commit 64212acc30dd360348a72b354899a5b0de28aa83 Author: Jordan Sherer Date: Tue Sep 3 10:05:11 2019 -0400 Simplified decoder callbacks commit a026766517d282a3fda0258356f6f22fee2a916f Author: Jordan Sherer Date: Tue Sep 3 09:50:33 2019 -0400 Commentary commit 9d28b1ff5bd5cda7a04028218a01639e3902bf7b Author: Jordan Sherer Date: Mon Sep 2 23:33:22 2019 -0400 Let's experiment with a new UI for HB commit a013d66d8b8d16cc941a14eb76af2ce23b7bb6d5 Author: Jordan Sherer Date: Mon Sep 2 21:44:26 2019 -0400 31.25 baud experiment commit 0671458bf588dd94710c5ba34f20695e13a28d31 Author: Jordan Sherer Date: Mon Sep 2 15:31:43 2019 -0400 Added basic foundation for slow mode, coming soon. commit 8b9aed6e29b093e8fb736ebdbdf0fbe12a820e8e Author: Jordan Sherer Date: Mon Sep 2 09:59:08 2019 -0400 Display SPEED+AUTO commit 5f5af250c1c5b610e8969b32c01654d3467f0973 Author: Jordan Sherer Date: Sun Sep 1 09:45:39 2019 -0400 Added mode speed option to the activity tables commit 82fa0335fdd41f0a578149e0211d6307293c739d Author: Jordan Sherer Date: Sat Aug 31 23:14:07 2019 -0400 Remember mode speed setting commit 79ec805b223099bb4d552dc612a6c97a8982525e Author: Jordan Sherer Date: Sat Aug 31 21:14:04 2019 -0400 Remove unused sync vars commit fc52dfcc320e59f6c7ca58ba277cb70469419587 Author: Jordan Sherer Date: Sat Aug 31 21:12:11 2019 -0400 Timing delta max commit 62b8fc5054d3611d40d7441d57d695df594b8446 Author: Jordan Sherer Date: Sat Aug 31 17:14:08 2019 -0400 Fast modes optionally can use huff encoding for data... we'll see which is best commit 44c357aff3e1c6687e93fb843917bd420888b397 Author: Jordan Sherer Date: Sat Aug 31 17:03:21 2019 -0400 Added ability to use a different message packing algorithm for fast modes commit e075a078eb75509ef690e6c78c0e797ada569b94 Author: Jordan Sherer Date: Sat Aug 31 16:18:14 2019 -0400 Fixed symbol offset in sync code for turbo mode commit a130b5d4a594e9bceece003be0ba72abb05a9f90 Author: Jordan Sherer Date: Sat Aug 31 16:09:27 2019 -0400 Added WPM to menu commit 98cacab7bfc243492b6dec703d216d378cc3d34d Author: Jordan Sherer Date: Fri Aug 30 23:18:58 2019 -0400 Key eater commit eef58e2c88d010c7f3917a111243eae744a425c3 Author: Jordan Sherer Date: Fri Aug 30 16:07:31 2019 -0400 Reorganizing js8dec for better understanding and less confusion between it and JS8b commit 08c14f966e1cda836ca90a8bd1ccd5ae68ec8dd7 Author: Jordan Sherer Date: Fri Aug 30 14:20:52 2019 -0400 Do no expose relay and messaging to fast and turbo modes commit c605a31c266866f78eb043812af837ead6442ede Author: Jordan Sherer Date: Fri Aug 30 12:02:41 2019 -0400 Do not allow mode speed changes if transmitting commit add062e657a5215f9a4a1ae3ee82063aa85cf0e4 Author: Jordan Sherer Date: Thu Aug 29 23:02:31 2019 -0400 Fixed bug where tones were not generated with the correct costas arrays...causing really poor synchronization and failed decodes. I'm surprised it worked at all :P commit cd492b5dd9fd62b5518a5711a1ef8ec522ea08fe Author: Jordan Sherer Date: Thu Aug 29 21:56:45 2019 -0400 Back to 20 baud. It has the best decodability, imho commit a2266cd00b8bd14c77bdbc8fc18818689e969858 Author: Jordan Sherer Date: Thu Aug 29 14:27:29 2019 -0400 Back to 20 baud with some decoder optimizations commit 86413042e75873585bcb40236da67f2d64870859 Author: Jordan Sherer Date: Wed Aug 28 23:04:47 2019 -0400 Try 24 baud commit a6704162b37d1c0704f43a64ab6b8a0a6e3c1cba Author: Jordan Sherer Date: Wed Aug 28 17:09:12 2019 -0400 Fixed legacy compiler issue with mode text commit 2fdbcc12e5f0c8cc8062c745af0930db4472cd9c Author: Jordan Sherer Date: Wed Aug 28 10:17:23 2019 -0400 Function for determining current mode commit 82e70345baa665418a51307f0309f2b7dcb3d3b7 Author: Jordan Sherer Date: Wed Aug 28 09:59:26 2019 -0400 Don't write the log commit d3380e01676537f4bab9a05932cb5a59de3cf45f Author: Jordan Sherer Date: Wed Aug 28 09:59:03 2019 -0400 Fixed issues with turbo decode with partial sync code commit c2a8ebb8f305e67fcb2597d25e062663722a0d73 Author: Jordan Sherer Date: Wed Aug 28 03:30:02 2019 -0400 Working through better decoding of fast modes commit 7ca93f8c6a7970559577c9dfd833eb92a1b91a0c Author: Jordan Sherer Date: Tue Aug 27 23:23:34 2019 -0400 Trying for better TX/RX delays commit b99271b4feaa7e41c7b88219cb3c7d43dbe7b48d Author: Jordan Sherer Date: Tue Aug 27 22:57:02 2019 -0400 Added flags to easily enable/disable the faster modes commit 32d913a7f7d3deb6a8d66651d51673ec451d2500 Author: Jordan Sherer Date: Tue Aug 27 22:43:20 2019 -0400 Added mode button commit c7cc90548591638bfc5a4a8895036dd67b155aaa Author: Jordan Sherer Date: Tue Aug 27 22:17:42 2019 -0400 Updated start delay for the modes commit b91dc63f92101cd8b6adbf9de588c4ffd10bfc10 Author: Jordan Sherer Date: Tue Aug 27 21:55:57 2019 -0400 Late threshold for turbo mode is 1/2 the delay commit 09ec95fab1307e65aa9bd462d60525afd2a770fe Author: Jordan Sherer Date: Tue Aug 27 21:52:55 2019 -0400 Renamed mode menu items commit a4e5a9ed9bce66c625e4df1182cd3c91a6ba44dd Author: Jordan Sherer Date: Tue Aug 27 21:50:45 2019 -0400 Only enable networking and autoreply for normal JS8 commit fc558d5823c46fc5d3dc651610b7af43e7519165 Author: Jordan Sherer Date: Tue Aug 27 21:14:12 2019 -0400 Fixed spot button tooltip commit 9a9965d543540a2d215bcbfff34934846afe507a Author: Jordan Sherer Date: Tue Aug 27 10:04:31 2019 -0400 Working selectable decoder commit 4a9cdbc52dae1d857c102d8777f1aded4fac87bb Author: Jordan Sherer Date: Mon Aug 26 20:53:30 2019 -0400 Mode menu selection of the submodes. Turbo decoder disabled right now. Naming to be determined commit a3acbf7c243f7aa740c229ae178fffa528e68933 Merge: 8ea554d daa8cc2 Author: Jordan Sherer Date: Mon Aug 26 13:29:14 2019 -0400 Merge branch 'ft8call-develop' into fortran-cleanup commit 8ea554d79904c9b2f3ccf1027bf4d41fb25e6fe3 Author: Jordan Sherer Date: Mon Aug 26 09:53:21 2019 -0400 Use indx variable instead of computed commit 067e65500328133f921b172e515babbcc0df831b Author: Jordan Sherer Date: Sun Aug 25 22:41:00 2019 -0400 Make it easier to flip between modes commit a544a7635201072f3ea20483353edf2e79dc813d Author: Jordan Sherer Date: Sun Aug 25 21:18:46 2019 -0400 Fixed sync issues with multi costas. Added log statements for future debugging commit a8f3ead932017ae7d98fdb9a779bf3bb44bd395d Author: Jordan Sherer Date: Sun Aug 25 15:54:59 2019 -0400 Playing around with different costas arrays commit fa89fe11a15d26abadd5102c8980620cfeffccd9 Author: Jordan Sherer Date: Sun Aug 25 15:51:45 2019 -0400 Added reference to 7x7 costas arrays commit 2417ebed6139534214f76ce94bdf1f54a966760a Merge: 6011f1e 32fcabd Author: Jordan Sherer Date: Sat Aug 24 23:41:39 2019 -0400 Merge branch 'ft8call-develop' into fortran-cleanup commit 6011f1e807b1814399477d3c172db46831a090c6 Author: Jordan Sherer Date: Sat Aug 24 23:35:42 2019 -0400 Back to 10 baud. Update late threshold to be computed to 3/4 dead air time. commit 41d3995861226f7208b2773430010a48abc125c1 Author: Jordan Sherer Date: Sat Aug 24 15:36:12 2019 -0400 Trying out 20 baud commit a8d77e9e5b98f3f0bf19f68b53199b5952e8aaad Author: Jordan Sherer Date: Sat Aug 24 15:23:36 2019 -0400 Fixed up sync quarter symbol constant commit 7050722436b9c629ea00649e6b3c81d7af7be82a Author: Jordan Sherer Date: Sat Aug 24 14:43:48 2019 -0400 Computed symbol stop commit f130fe87abdccbabd2e71f2771b789c7f46d57ca Author: Jordan Sherer Date: Fri Aug 23 20:56:59 2019 -0400 Added reference to 7x7 costas arrays commit 53e91858f5a4e9ce78c38ef65c77e87f1903c058 Author: Jordan Sherer Date: Fri Aug 23 16:34:51 2019 -0400 Back to 10 baud commit 1ae79d566ebd9a40ad3cf4a07977ef0e09615d91 Author: Jordan Sherer Date: Fri Aug 23 15:14:41 2019 -0400 Testing 31.25 baud commit 7e033c28ae090d6c3f5a63fa651ee51c3243d61c Author: Jordan Sherer Date: Fri Aug 23 15:14:17 2019 -0400 Experimenting with a few different baudrates commit 050e24ad3a040924ded6d641004ae63da47e4251 Author: Jordan Sherer Date: Fri Aug 23 12:25:50 2019 -0400 Added ldpcsim for js8 commit d309a75d860e39737dec732560432a191290b258 Author: Jordan Sherer Date: Thu Aug 22 22:42:11 2019 -0400 Experimental submode switching commit 74f72bb24a22631b8b69942ea0633bb0564b8aa3 Author: Jordan Sherer Date: Thu Aug 22 22:41:53 2019 -0400 Allow switching decoders based on submode commit f8740a23b27e80fa53350e140d4638a27cd6e975 Author: Jordan Sherer Date: Wed Aug 21 23:43:18 2019 -0400 Initial spike of js8 fortran code commit 31625316639f79246b4a2e3d0cea4507bf0547f9 Author: Jordan Sherer Date: Wed Aug 21 23:09:00 2019 -0400 Remove fix contest message commit c0e0862afa8ae2d47e9577562399b8c9bc929c6a Author: Jordan Sherer Date: Wed Aug 21 21:05:05 2019 -0400 Cleanup unused text files and batch files commit 1b3aa55869f0c310e6c911a7cbb3fe269bc7421a Author: Jordan Sherer Date: Wed Aug 21 21:00:38 2019 -0400 Removed fast_decode and dx commit 49e5cabff25c13620a9d2c6fc6ddd4988f1be217 Author: Jordan Sherer Date: Wed Aug 21 20:54:39 2019 -0400 Cleaning up msk stuff commit 8bde6f391f4b23d2a2e9d55685d96bc647a462f6 Author: Jordan Sherer Date: Wed Aug 21 20:44:39 2019 -0400 Initial cleanup pass of qra, ftrsd, and wsprd --- CMakeLists.txt | 76 +- Configuration.ui | 93 +- Modulator.cpp | 14 +- Versions.cmake | 4 +- bsj.mod | Bin 0 -> 867 bytes commons.h | 32 +- decodedtext.cpp | 59 +- decodedtext.h | 6 +- js8.mod | Bin 0 -> 1041 bytes js8a.mod | Bin 0 -> 162 bytes js8params.mod | Bin 0 -> 719 bytes keyeater.cpp | 15 + keyeater.h | 14 + lib/CQnnnCAT.txt | 39 - lib/DXped_Operations.txt | 186 - lib/DXped_pseudo_code.txt | 71 - lib/Fast_Modes.txt | 395 -- lib/Makefile | 71 - lib/Makefile.MinGW | 153 - lib/Makefile.MinGW.qt4 | 122 - lib/Makefile.jt65 | 84 - lib/Makefile.jt65_Win | 76 - lib/Makefile.jt65_osx | 74 - lib/Makefile.jt9w | 58 - lib/Makefile.jt9w_Win | 58 - lib/Makefile.jtsdk | 137 - lib/Makefile.linux | 115 - lib/Makefile.msk | 71 - lib/Makefile.mskWin | 75 - lib/allsim.f90 | 78 - lib/chkfft.txt | 124 - lib/decoder.f90 | 466 +-- lib/dxped_fifo.f90 | 23 - lib/fast_decode.f90 | 97 - lib/fer | 41 - lib/fer65.f90 | 195 - lib/fersum.f90 | 72 - lib/fix_contest_msg.f90 | 32 - lib/ft8/ft8code.f90 | 1 - lib/ft8_decode.f90 | 11 - lib/ftrsd/Makefile | 53 - lib/ftrsd/Makefile.sfrsd | 30 - lib/ftrsd/Makefile.sfrsd3 | 38 - lib/ftrsd/decode_rs.c | 268 -- lib/ftrsd/encode_rs.c | 47 - lib/ftrsd/extract2.f90 | 145 - lib/ftrsd/ftrsd2.c | 213 -- lib/ftrsd/ftrsd_paper/JT65B_EME.png | Bin 35719 -> 0 bytes lib/ftrsd/ftrsd_paper/Makefile | 40 - lib/ftrsd/ftrsd_paper/binomial.c | 69 - lib/ftrsd/ftrsd_paper/binomial_subs.c | 55 - lib/ftrsd/ftrsd_paper/bmdata-rf.dat | 11 - lib/ftrsd/ftrsd_paper/bmdata.dat | 8 - lib/ftrsd/ftrsd_paper/bmtheory25.dat | 43 - lib/ftrsd/ftrsd_paper/bmtheory40.dat | 43 - lib/ftrsd/ftrsd_paper/bmtheory43.dat | 43 - lib/ftrsd/ftrsd_paper/bodide.f90 | 54 - lib/ftrsd/ftrsd_paper/bodide.lab | 4 - lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot | 24 - .../ftrsd_paper/fig_ntrials_vs_nhard.gnuplot | 14 - lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot | 25 - lib/ftrsd/ftrsd_paper/fig_psuccess.pdf | Bin 26687 -> 0 bytes lib/ftrsd/ftrsd_paper/fig_subtracted.tiff | Bin 512012 -> 0 bytes lib/ftrsd/ftrsd_paper/fig_waterfall.png | Bin 257654 -> 0 bytes lib/ftrsd/ftrsd_paper/fig_waterfall.tiff | Bin 538486 -> 0 bytes lib/ftrsd/ftrsd_paper/fig_wer.gnuplot | 23 - lib/ftrsd/ftrsd_paper/fig_wer.pdf | Bin 32859 -> 0 bytes lib/ftrsd/ftrsd_paper/fig_wer2.gnuplot | 23 - lib/ftrsd/ftrsd_paper/fig_wer3.gnuplot | 21 - lib/ftrsd/ftrsd_paper/ftdata-10.dat | 10 - lib/ftrsd/ftrsd_paper/ftdata-100.dat | 10 - lib/ftrsd/ftrsd_paper/ftdata-1000.dat | 9 - lib/ftrsd/ftrsd_paper/ftdata-10000.dat | 11 - lib/ftrsd/ftrsd_paper/ftdata-100000.dat | 11 - lib/ftrsd/ftrsd_paper/ftrsd.lyx | 3289 ----------------- lib/ftrsd/ftrsd_paper/kvasd-12.dat | 8 - lib/ftrsd/ftrsd_paper/kvasd-15.dat | 9 - lib/ftrsd/ftrsd_paper/kvasd-8.dat | 8 - lib/ftrsd/ftrsd_paper/mfsk.f90 | 33 - lib/ftrsd/ftrsd_paper/prob.f90 | 41 - lib/ftrsd/ftrsd_paper/psuccess.lab | 14 - lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat | 930 ----- lib/ftrsd/ftrsd_paper/stats_0.0 | 27 - lib/ftrsd/ftrsd_paper/stats_0.2 | 27 - lib/ftrsd/ftrsd_paper/stats_1.0 | 27 - lib/ftrsd/ftrsd_paper/wer.lab | 0 lib/ftrsd/ftrsd_paper/wer2.lab | 7 - lib/ftrsd/ftrsdap.c | 227 -- lib/ftrsd/init_rs.c | 119 - lib/ftrsd/int.h | 54 - lib/ftrsd/rs2.h | 16 - lib/ftrsd/rsdtest.f90 | 34 - lib/ftrsd/sfrsd.c | 137 - lib/ftrsd/sfrsd2.h | 3 - lib/ftrsd/sfrsd3.c | 243 -- lib/g1 | 4 - lib/g1.bat | 4 - lib/g2.bat | 4 - lib/g3.bat | 4 - lib/g4.bat | 3 - lib/gen4.f90 | 43 - lib/gen65.f90 | 83 - lib/gen9.f90 | 65 - lib/geniscat.f90 | 55 - lib/genmet.f90 | 90 - lib/genmsk144.f90 | 147 - lib/genmsk40.f90 | 66 - lib/genmsk_short.f90 | 66 - lib/genqra64.f90 | 57 - lib/genwspr.f90 | 30 - lib/hspec.f90 | 106 - lib/js8/baselinejs8.f90 | 51 + lib/js8/costas/Costas_essense_N=7.txt | 30 + lib/js8/costas/Costas_symmetrical_N=7.txt | 10 + lib/js8/costas/Sorted_Costas_arrays_N=7.txt | 201 + lib/js8/genjs8.f90 | 93 + lib/js8/genjs8refsig.f90 | 24 + lib/js8/js8_downsample.f90 | 54 + lib/js8/js8_params.f90 | 2 + lib/js8/js8b_params.f90 | 36 + lib/js8/js8c_params.f90 | 36 + lib/js8/js8d_params.f90 | 36 + lib/js8/js8dec.f90 | 486 +++ lib/js8/ldpcsim174js8b.f90 | 238 ++ lib/js8/ldpcsim174js8c.f90 | 238 ++ lib/js8/ldpcsim174js8d.f90 | 238 ++ lib/js8/subtractjs8.f90 | 64 + lib/js8/syncjs8.f90 | 183 + lib/js8/syncjs8d.f90 | 89 + lib/js8b_decode.f90 | 157 + lib/js8b_module.f90 | 13 + lib/js8c_decode.f90 | 156 + lib/js8c_module.f90 | 13 + lib/js8d_decode.f90 | 156 + lib/js8d_module.f90 | 13 + lib/jt4sim.f90 | 181 - lib/msgs.txt | 60 - lib/msk144_freq_search.f90 | 50 - lib/msk144code.f90 | 70 - lib/msk144d2.f90 | 138 - lib/msk144decodeframe.f90 | 107 - lib/msk144sd.f90 | 197 - lib/msk144signalquality.f90 | 219 -- lib/msk144sim.f90 | 99 - lib/msk144spd.f90 | 197 - lib/msk144sync.f90 | 101 - lib/msk40_freq_search.f90 | 53 - lib/msk40decodeframe.f90 | 169 - lib/msk40spd.f90 | 199 - lib/msk40sync.f90 | 103 - lib/mskber.f90 | 146 - lib/mskdt.f90 | 78 - lib/mskrtd.f90 | 257 -- lib/{wsprd => }/nhash.c | 0 lib/{wsprd => }/nhash.h | 0 lib/packjt.f90 | 2 - lib/qra/qra64/Makefile.Win | 30 - lib/qra/qra64/fadengauss.c | 302 -- lib/qra/qra64/fadenlorentz.c | 304 -- lib/qra/qra64/main.c | 746 ---- lib/qra/qra64/qra64.c | 1121 ------ lib/qra/qra64/qra64.h | 269 -- lib/qra/qra64/qra64_all.c | 1050 ------ lib/qra/qra64/qra64_subs.c | 65 - lib/qra/qra64/qra64example.txt | 88 - lib/qra/qra64/qra64sim.f90 | 170 - lib/qra/qracodes/Makefile.Win | 33 - lib/qra/qracodes/ebno10000.txt | 7 - lib/qra/qracodes/ebnovalues.txt | 15 - lib/qra/qracodes/ebnovaluesfast.txt | 11 - lib/qra/qracodes/main.c | 737 ---- lib/qra/qracodes/normrnd.c | 82 - lib/qra/qracodes/normrnd.h | 51 - lib/qra/qracodes/npfwht.c | 216 -- lib/qra/qracodes/npfwht.h | 45 - lib/qra/qracodes/pdmath.c | 385 -- lib/qra/qracodes/pdmath.h | 85 - lib/qra/qracodes/qra12_63_64_irr_b.c | 534 --- lib/qra/qracodes/qra12_63_64_irr_b.h | 39 - lib/qra/qracodes/qra13_64_64_irr_e.c | 534 --- lib/qra/qracodes/qra13_64_64_irr_e.h | 39 - lib/qra/qracodes/qracodes.c | 474 --- lib/qra/qracodes/qracodes.h | 79 - lib/qso50/g0 | 8 - lib/qso50/pack50.f90 | 26 - lib/qso50/packname.f90 | 23 - lib/qso50/packprop.f90 | 36 - lib/qso50/packtext2.f90 | 22 - lib/qso50/twq.f90 | 18 - lib/qso50/unpack50.f90 | 30 - lib/qso50/unpackname.f90 | 20 - lib/qso50/unpackpfx.f90 | 35 - lib/qso50/unpackprop.f90 | 28 - lib/qso50/unpacktext2.f90 | 17 - lib/qso50/wqdec.f90 | 316 -- lib/qso50/wqenc.f90 | 346 -- lib/qso50/wqmsg.txt | 31 - lib/wrapkarn.c | 70 - lib/wsjt_modes.txt | 68 - lib/xcall.txt | 268 -- mainwindow.cpp | 935 ++--- mainwindow.h | 19 +- mainwindow.ui | 316 +- plotter.cpp | 15 +- varicode.cpp | 127 +- varicode.h | 18 +- 206 files changed, 3792 insertions(+), 22217 deletions(-) create mode 100644 bsj.mod create mode 100644 js8.mod create mode 100644 js8a.mod create mode 100644 js8params.mod delete mode 100644 lib/CQnnnCAT.txt delete mode 100644 lib/DXped_Operations.txt delete mode 100644 lib/DXped_pseudo_code.txt delete mode 100644 lib/Fast_Modes.txt delete mode 100644 lib/Makefile delete mode 100644 lib/Makefile.MinGW delete mode 100644 lib/Makefile.MinGW.qt4 delete mode 100644 lib/Makefile.jt65 delete mode 100644 lib/Makefile.jt65_Win delete mode 100644 lib/Makefile.jt65_osx delete mode 100644 lib/Makefile.jt9w delete mode 100644 lib/Makefile.jt9w_Win delete mode 100644 lib/Makefile.jtsdk delete mode 100644 lib/Makefile.linux delete mode 100644 lib/Makefile.msk delete mode 100644 lib/Makefile.mskWin delete mode 100644 lib/allsim.f90 delete mode 100644 lib/chkfft.txt delete mode 100644 lib/dxped_fifo.f90 delete mode 100644 lib/fast_decode.f90 delete mode 100755 lib/fer delete mode 100644 lib/fer65.f90 delete mode 100644 lib/fersum.f90 delete mode 100644 lib/fix_contest_msg.f90 delete mode 100644 lib/ftrsd/Makefile delete mode 100644 lib/ftrsd/Makefile.sfrsd delete mode 100644 lib/ftrsd/Makefile.sfrsd3 delete mode 100644 lib/ftrsd/decode_rs.c delete mode 100644 lib/ftrsd/encode_rs.c delete mode 100644 lib/ftrsd/extract2.f90 delete mode 100644 lib/ftrsd/ftrsd2.c delete mode 100644 lib/ftrsd/ftrsd_paper/JT65B_EME.png delete mode 100644 lib/ftrsd/ftrsd_paper/Makefile delete mode 100644 lib/ftrsd/ftrsd_paper/binomial.c delete mode 100644 lib/ftrsd/ftrsd_paper/binomial_subs.c delete mode 100644 lib/ftrsd/ftrsd_paper/bmdata-rf.dat delete mode 100644 lib/ftrsd/ftrsd_paper/bmdata.dat delete mode 100644 lib/ftrsd/ftrsd_paper/bmtheory25.dat delete mode 100644 lib/ftrsd/ftrsd_paper/bmtheory40.dat delete mode 100644 lib/ftrsd/ftrsd_paper/bmtheory43.dat delete mode 100644 lib/ftrsd/ftrsd_paper/bodide.f90 delete mode 100644 lib/ftrsd/ftrsd_paper/bodide.lab delete mode 100644 lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/fig_psuccess.pdf delete mode 100644 lib/ftrsd/ftrsd_paper/fig_subtracted.tiff delete mode 100644 lib/ftrsd/ftrsd_paper/fig_waterfall.png delete mode 100644 lib/ftrsd/ftrsd_paper/fig_waterfall.tiff delete mode 100644 lib/ftrsd/ftrsd_paper/fig_wer.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/fig_wer.pdf delete mode 100644 lib/ftrsd/ftrsd_paper/fig_wer2.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/fig_wer3.gnuplot delete mode 100644 lib/ftrsd/ftrsd_paper/ftdata-10.dat delete mode 100644 lib/ftrsd/ftrsd_paper/ftdata-100.dat delete mode 100644 lib/ftrsd/ftrsd_paper/ftdata-1000.dat delete mode 100644 lib/ftrsd/ftrsd_paper/ftdata-10000.dat delete mode 100644 lib/ftrsd/ftrsd_paper/ftdata-100000.dat delete mode 100644 lib/ftrsd/ftrsd_paper/ftrsd.lyx delete mode 100644 lib/ftrsd/ftrsd_paper/kvasd-12.dat delete mode 100644 lib/ftrsd/ftrsd_paper/kvasd-15.dat delete mode 100644 lib/ftrsd/ftrsd_paper/kvasd-8.dat delete mode 100644 lib/ftrsd/ftrsd_paper/mfsk.f90 delete mode 100644 lib/ftrsd/ftrsd_paper/prob.f90 delete mode 100644 lib/ftrsd/ftrsd_paper/psuccess.lab delete mode 100644 lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat delete mode 100644 lib/ftrsd/ftrsd_paper/stats_0.0 delete mode 100644 lib/ftrsd/ftrsd_paper/stats_0.2 delete mode 100644 lib/ftrsd/ftrsd_paper/stats_1.0 delete mode 100644 lib/ftrsd/ftrsd_paper/wer.lab delete mode 100644 lib/ftrsd/ftrsd_paper/wer2.lab delete mode 100644 lib/ftrsd/ftrsdap.c delete mode 100644 lib/ftrsd/init_rs.c delete mode 100644 lib/ftrsd/int.h delete mode 100644 lib/ftrsd/rs2.h delete mode 100644 lib/ftrsd/rsdtest.f90 delete mode 100644 lib/ftrsd/sfrsd.c delete mode 100644 lib/ftrsd/sfrsd2.h delete mode 100644 lib/ftrsd/sfrsd3.c delete mode 100644 lib/g1 delete mode 100644 lib/g1.bat delete mode 100644 lib/g2.bat delete mode 100644 lib/g3.bat delete mode 100644 lib/g4.bat delete mode 100644 lib/gen4.f90 delete mode 100644 lib/gen65.f90 delete mode 100644 lib/gen9.f90 delete mode 100644 lib/geniscat.f90 delete mode 100644 lib/genmet.f90 delete mode 100644 lib/genmsk144.f90 delete mode 100644 lib/genmsk40.f90 delete mode 100644 lib/genmsk_short.f90 delete mode 100644 lib/genqra64.f90 delete mode 100644 lib/genwspr.f90 delete mode 100644 lib/hspec.f90 create mode 100644 lib/js8/baselinejs8.f90 create mode 100644 lib/js8/costas/Costas_essense_N=7.txt create mode 100644 lib/js8/costas/Costas_symmetrical_N=7.txt create mode 100644 lib/js8/costas/Sorted_Costas_arrays_N=7.txt create mode 100644 lib/js8/genjs8.f90 create mode 100644 lib/js8/genjs8refsig.f90 create mode 100644 lib/js8/js8_downsample.f90 create mode 100644 lib/js8/js8_params.f90 create mode 100644 lib/js8/js8b_params.f90 create mode 100644 lib/js8/js8c_params.f90 create mode 100644 lib/js8/js8d_params.f90 create mode 100644 lib/js8/js8dec.f90 create mode 100644 lib/js8/ldpcsim174js8b.f90 create mode 100644 lib/js8/ldpcsim174js8c.f90 create mode 100644 lib/js8/ldpcsim174js8d.f90 create mode 100644 lib/js8/subtractjs8.f90 create mode 100644 lib/js8/syncjs8.f90 create mode 100644 lib/js8/syncjs8d.f90 create mode 100644 lib/js8b_decode.f90 create mode 100644 lib/js8b_module.f90 create mode 100644 lib/js8c_decode.f90 create mode 100644 lib/js8c_module.f90 create mode 100644 lib/js8d_decode.f90 create mode 100644 lib/js8d_module.f90 delete mode 100644 lib/jt4sim.f90 delete mode 100644 lib/msgs.txt delete mode 100644 lib/msk144_freq_search.f90 delete mode 100644 lib/msk144code.f90 delete mode 100644 lib/msk144d2.f90 delete mode 100644 lib/msk144decodeframe.f90 delete mode 100644 lib/msk144sd.f90 delete mode 100644 lib/msk144signalquality.f90 delete mode 100644 lib/msk144sim.f90 delete mode 100644 lib/msk144spd.f90 delete mode 100644 lib/msk144sync.f90 delete mode 100644 lib/msk40_freq_search.f90 delete mode 100644 lib/msk40decodeframe.f90 delete mode 100644 lib/msk40spd.f90 delete mode 100644 lib/msk40sync.f90 delete mode 100644 lib/mskber.f90 delete mode 100644 lib/mskdt.f90 delete mode 100644 lib/mskrtd.f90 rename lib/{wsprd => }/nhash.c (100%) rename lib/{wsprd => }/nhash.h (100%) delete mode 100644 lib/qra/qra64/Makefile.Win delete mode 100644 lib/qra/qra64/fadengauss.c delete mode 100644 lib/qra/qra64/fadenlorentz.c delete mode 100644 lib/qra/qra64/main.c delete mode 100644 lib/qra/qra64/qra64.c delete mode 100644 lib/qra/qra64/qra64.h delete mode 100644 lib/qra/qra64/qra64_all.c delete mode 100644 lib/qra/qra64/qra64_subs.c delete mode 100644 lib/qra/qra64/qra64example.txt delete mode 100644 lib/qra/qra64/qra64sim.f90 delete mode 100644 lib/qra/qracodes/Makefile.Win delete mode 100644 lib/qra/qracodes/ebno10000.txt delete mode 100644 lib/qra/qracodes/ebnovalues.txt delete mode 100644 lib/qra/qracodes/ebnovaluesfast.txt delete mode 100644 lib/qra/qracodes/main.c delete mode 100644 lib/qra/qracodes/normrnd.c delete mode 100644 lib/qra/qracodes/normrnd.h delete mode 100644 lib/qra/qracodes/npfwht.c delete mode 100644 lib/qra/qracodes/npfwht.h delete mode 100644 lib/qra/qracodes/pdmath.c delete mode 100644 lib/qra/qracodes/pdmath.h delete mode 100644 lib/qra/qracodes/qra12_63_64_irr_b.c delete mode 100644 lib/qra/qracodes/qra12_63_64_irr_b.h delete mode 100644 lib/qra/qracodes/qra13_64_64_irr_e.c delete mode 100644 lib/qra/qracodes/qra13_64_64_irr_e.h delete mode 100644 lib/qra/qracodes/qracodes.c delete mode 100644 lib/qra/qracodes/qracodes.h delete mode 100644 lib/qso50/g0 delete mode 100644 lib/qso50/pack50.f90 delete mode 100644 lib/qso50/packname.f90 delete mode 100644 lib/qso50/packprop.f90 delete mode 100644 lib/qso50/packtext2.f90 delete mode 100644 lib/qso50/twq.f90 delete mode 100644 lib/qso50/unpack50.f90 delete mode 100644 lib/qso50/unpackname.f90 delete mode 100644 lib/qso50/unpackpfx.f90 delete mode 100644 lib/qso50/unpackprop.f90 delete mode 100644 lib/qso50/unpacktext2.f90 delete mode 100644 lib/qso50/wqdec.f90 delete mode 100644 lib/qso50/wqenc.f90 delete mode 100644 lib/qso50/wqmsg.txt delete mode 100644 lib/wrapkarn.c delete mode 100644 lib/wsjt_modes.txt delete mode 100644 lib/xcall.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index d9f50f6..4bafa56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,6 +295,12 @@ set (wsjt_FSRCS lib/timer_impl.f90 lib/timer_module.f90 lib/wavhdr.f90 + lib/js8b_module.f90 + lib/js8b_decode.f90 + lib/js8c_module.f90 + lib/js8c_decode.f90 + lib/js8d_module.f90 + lib/js8d_decode.f90 # remaining non-module sources lib/addit.f90 @@ -311,6 +317,7 @@ set (wsjt_FSRCS lib/azdist.f90 lib/badmsg.f90 lib/ft8/baseline.f90 + # lib/js8/baselinejs8.f90 lib/bpdecode40.f90 lib/bpdecode144.f90 lib/ft8/bpdecode174.f90 @@ -350,7 +357,6 @@ set (wsjt_FSRCS lib/ft8/extractmessage174.f90 lib/fano232.f90 lib/fast9.f90 - lib/fast_decode.f90 lib/fchisq.f90 lib/fchisq0.f90 lib/fchisq65.f90 @@ -361,7 +367,6 @@ set (wsjt_FSRCS lib/filbig.f90 lib/ft8/filt8.f90 lib/fitcal.f90 - lib/fix_contest_msg.f90 lib/flat1.f90 lib/flat1a.f90 lib/flat1b.f90 @@ -378,19 +383,16 @@ set (wsjt_FSRCS lib/freqcal.f90 lib/ft8/ft8apset.f90 lib/ft8/ft8b.f90 + # lib/js8/js8params.f90 + # lib/js8/js8b.f90 lib/ft8/ft8code.f90 lib/ft8/ft8_downsample.f90 + # lib/js8/js8_downsample.f90 lib/ft8/ft8sim.f90 - lib/gen4.f90 - lib/gen65.f90 - lib/gen9.f90 - lib/geniscat.f90 lib/ft8/genft8.f90 - lib/genmsk144.f90 - lib/genmsk40.f90 - lib/genqra64.f90 + lib/js8/genjs8.f90 lib/ft8/genft8refsig.f90 - lib/genwspr.f90 + # lib/js8/genjs8refsig.f90 lib/geodist.f90 lib/getlags.f90 lib/getmet4.f90 @@ -401,7 +403,6 @@ set (wsjt_FSRCS lib/ft8/h1.f90 lib/hash.f90 lib/hint65.f90 - lib/hspec.f90 lib/indexx.f90 lib/init_random_seed.f90 lib/interleave4.f90 @@ -414,6 +415,9 @@ set (wsjt_FSRCS lib/jtmsg.f90 lib/ldpcsim144.f90 lib/ft8/ldpcsim174.f90 + lib/js8/ldpcsim174js8b.f90 + lib/js8/ldpcsim174js8c.f90 + lib/js8/ldpcsim174js8d.f90 lib/ldpcsim40.f90 lib/libration.f90 lib/lorentzian.f90 @@ -423,20 +427,6 @@ set (wsjt_FSRCS lib/moondopjpl.f90 lib/morse.f90 lib/move.f90 - lib/msk144d2.f90 - lib/msk40decodeframe.f90 - lib/msk144decodeframe.f90 - lib/msk144sd.f90 - lib/msk40spd.f90 - lib/msk144spd.f90 - lib/msk40sync.f90 - lib/msk144sync.f90 - lib/msk40_freq_search.f90 - lib/msk144_freq_search.f90 - lib/mskrtd.f90 - lib/msk144signalquality.f90 - lib/msk144sim.f90 - lib/mskrtd.f90 lib/ft8/osd174.f90 lib/pctile.f90 lib/peakdt9.f90 @@ -466,6 +456,7 @@ set (wsjt_FSRCS lib/stdmsg.f90 lib/subtract65.f90 lib/ft8/subtractft8.f90 + # lib/js8/subtractjs8.f90 lib/sun.f90 lib/symspec.f90 lib/symspec2.f90 @@ -474,7 +465,9 @@ set (wsjt_FSRCS lib/sync64.f90 lib/sync65.f90 lib/ft8/sync8.f90 + # lib/js8/syncjs8.f90 lib/ft8/sync8d.f90 + # lib/js8/syncjs8d.f90 lib/sync9.f90 lib/sync9f.f90 lib/sync9w.f90 @@ -502,46 +495,24 @@ set (wsjt_FSRCS # temporary workaround for a gfortran v7.3 ICE on Fedora 27 64-bit set_source_files_properties (lib/slasubs.f PROPERTIES COMPILE_FLAGS -O2) -set (ka9q_CSRCS - lib/ftrsd/decode_rs.c - lib/ftrsd/encode_rs.c - lib/ftrsd/init_rs.c - ) -set_source_files_properties (${ka9q_CSRCS} PROPERTIES COMPILE_FLAGS -Wno-sign-compare) - -set (qra_CSRCS - lib/qra/qra64/qra64.c - lib/qra/qra64/qra64_subs.c - lib/qra/qracodes/npfwht.c - lib/qra/qracodes/pdmath.c - lib/qra/qracodes/qra12_63_64_irr_b.c - lib/qra/qracodes/qra13_64_64_irr_e.c - lib/qra/qracodes/qracodes.c - lib/qra/qracodes/normrnd.c - ) - set (sqlite3_CSRCS vendor/sqlite3/sqlite3.c ) set (wsjt_CSRCS - ${ka9q_CSRCS} - lib/ftrsd/ftrsdap.c lib/sgran.c lib/golay24_table.c lib/gran.c lib/igray.c lib/init_random_seed.c lib/ldpc32_table.c - lib/wsprd/nhash.c + lib/nhash.c lib/tab.c lib/tmoonsub.c lib/usleep.c lib/vit213.c lib/wisdom.c - lib/wrapkarn.c ${ldpc_CSRCS} - ${qra_CSRCS} ) set (wsjt_qt_UISRCS @@ -1026,6 +997,15 @@ target_link_libraries (wsjt_qtmm Qt5::Multimedia) add_executable (ldpcsim174 lib/ft8/ldpcsim174.f90 wsjtx.rc) target_link_libraries (ldpcsim174 wsjt_fort wsjt_cxx) +add_executable (ldpcsim174js8b lib/js8/ldpcsim174js8b.f90 wsjtx.rc) +target_link_libraries (ldpcsim174js8b wsjt_fort wsjt_cxx) + +add_executable (ldpcsim174js8c lib/js8/ldpcsim174js8c.f90 wsjtx.rc) +target_link_libraries (ldpcsim174js8c wsjt_fort wsjt_cxx) + +add_executable (ldpcsim174js8d lib/js8/ldpcsim174js8d.f90 wsjtx.rc) +target_link_libraries (ldpcsim174js8d wsjt_fort wsjt_cxx) + add_executable (js8 ${js8_FSRCS} ${js8_CXXSRCS} wsjtx.rc) if (${OPENMP_FOUND} OR APPLE) if (APPLE) diff --git a/Configuration.ui b/Configuration.ui index 58b5caf..9cc216d 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -890,56 +890,43 @@ text message. - - - - - - - Idle Timeout - - - - - - - - Disable automatic transmissions after: - - - tx_watchdog_spin_box - - - - - - - <html><head/><body><p>Number of minutes before unattended heartbeat transmissions are aborted.</p></body></html> - - - Disabled - - - minutes of inactivity - - - - - - 0 - - - 1440 - - - 1 - - - 60 - - - - + + + + Idle timeout - disable autoreply after: + + + tx_watchdog_spin_box + + + + + + + <html><head/><body><p>Number of minutes before unattended heartbeat transmissions are aborted.</p></body></html> + + + Disabled + + + minutes of inactivity + + + + + + 0 + + + 1440 + + + 1 + + + 60 + + @@ -4383,12 +4370,12 @@ soundcard changes - - + + + - diff --git a/Modulator.cpp b/Modulator.cpp index b80acc8..47e795c 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -71,7 +71,19 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, m_toneSpacing = toneSpacing; m_bFastMode=fastMode; m_TRperiod=TRperiod; - unsigned delay_ms = 1920 == m_nsps && 15 == m_period ? 500 : 250; // 1000; + unsigned delay_ms = 0; + if(m_TRperiod == JS8A_TX_SECONDS){ + delay_ms = JS8A_START_DELAY_MS; + } + else if(m_TRperiod == JS8B_TX_SECONDS){ + delay_ms = JS8B_START_DELAY_MS; + } + else if(m_TRperiod == JS8C_TX_SECONDS){ + delay_ms = JS8C_START_DELAY_MS; + } + else if(m_TRperiod == JS8D_TX_SECONDS){ + delay_ms = JS8D_START_DELAY_MS; + } // noise generator parameters if (m_addNoise) { diff --git a/Versions.cmake b/Versions.cmake index d828414..ed59e29 100644 --- a/Versions.cmake +++ b/Versions.cmake @@ -1,6 +1,6 @@ # Version number components -set (WSJTX_VERSION_MAJOR 1) -set (WSJTX_VERSION_MINOR 2) +set (WSJTX_VERSION_MAJOR 2) +set (WSJTX_VERSION_MINOR 0) set (WSJTX_VERSION_PATCH 0) set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build diff --git a/bsj.mod b/bsj.mod new file mode 100644 index 0000000000000000000000000000000000000000..aecd818085e563d3c67a1dbcbf895af130e7036b GIT binary patch literal 867 zcmV-p1DyOHiwFP!000001J#&YbDBUD$KUr;>>K)!%r2n9TZwEkOcfo(w0Uy8U`wKq z0%_8I`kne`RXhJGO6VUN#qBy zzifjgVTxO=u`}v3bLucWwLjaVFZP9HyUcdc&g2z#_lhfl_x057yVl6YY`})_gfYNl zXa^aNW8BR~Q0dx`H?{N*s7&2(Of{R7C$Qq6ZR^M_jCdMsG8$E)eKe8vT z0ZkV5P^F$kF1zVV`$VOjx5V8AS%FLrQ;MhJdwq|6j(OKXL<2 z?1p`3i$@;4UtOZIDj0YQtM1{U{`6W;1P{wCSk)iCqlw_V9KHecln@bqkK>2WLHz}E zg#230A3w(RmmprdI!IWr6WRoR;UtpbR`9(6{8Se6Q_dg%+SXrzqKkG=89ZpPoxjwd zpO1ie48Z>e4cLWxx(FWJZxAlSIGHzL7ZNGpKKKVLfkn8fzk;qv0e8er=zY<_UFL4M z5iab|7Rvo_oOqA*SD=Uma4(#^te&F!E1)6)3U|WKk)L>*@Y^XGikR&T4QMaoFB*gr zxF2pn45q7^a1Oy5h*NI(^Z@ zccX)~k#O}_WT)rX`T4>jelN*AX2_~1X}$#3i*rfRq|2EkFq31RiaC|#RSxE~>45gr z;ndl1oHM9s=gHW&saS$#L2{E|MUXBe@P9l32LsWmWV8tG=Gz0oJa5EPHc(Qs^aqsG zESCVKP9B((JVsB0T=>0Lju^q#itq~zJ&$AnmlQz(7!>6PY$(gwNfk;;`Pc`xT0TU9 t-N}w5Q0ngdJIQ^0>MG%ews$*V>96*1=pB;nh)|+!^as}*I)jE6002Evsn-Ai literal 0 HcmV?d00001 diff --git a/commons.h b/commons.h index 1dd17e8..759816a 100644 --- a/commons.h +++ b/commons.h @@ -7,19 +7,31 @@ #define RX_SAMPLE_RATE 12000 #define JS8_NUM_SYMBOLS 79 +#define JS8_ENABLE_JS8B 1 +#define JS8_ENABLE_JS8C 1 +#define JS8_ENABLE_JS8D 0 -#ifndef JS8_80HZ -#define JS8_80HZ 0 -#endif +#define JS8A_SYMBOL_SAMPLES 1920 +#define JS8A_TX_SECONDS 15 +#define JS8A_START_DELAY_MS 500 -#if JS8_80HZ -#define JS8_SYMBOL_SAMPLES 1200 // 480 // 600 // 1200 // 1920 -#define JS8_TX_SECONDS 10 // 5 // 6 // 10 // 15 -#define JS8_SYMBOL_STOP 32 // 12 // 16 // 32 // 50 // ??? no idea why this works... +#define JS8B_SYMBOL_SAMPLES 1200 +#define JS8B_TX_SECONDS 10 +#define JS8B_START_DELAY_MS 200 + +#define JS8C_SYMBOL_SAMPLES 600 +#define JS8C_TX_SECONDS 6 +#define JS8C_START_DELAY_MS 100 + +#define JS8D_IS_ULTRA 1 +#if JS8D_IS_ULTRA +#define JS8D_SYMBOL_SAMPLES 384 +#define JS8D_TX_SECONDS 4 +#define JS8D_START_DELAY_MS 100 #else -#define JS8_SYMBOL_SAMPLES 1920 -#define JS8_TX_SECONDS 15 -#define JS8_SYMBOL_STOP 50 +#define JS8D_SYMBOL_SAMPLES 4000 +#define JS8D_TX_SECONDS 30 +#define JS8D_START_DELAY_MS 100 #endif #ifndef TEST_FOX_WAVE_GEN diff --git a/decodedtext.cpp b/decodedtext.cpp index 6e183bf..9723ce1 100644 --- a/decodedtext.cpp +++ b/decodedtext.cpp @@ -15,7 +15,7 @@ namespace QRegularExpression words_re {R"(^(?:(?(?:CQ|DE|QRZ)(?:\s?DX|\s(?:[A-Z]{2}|\d{3}))|[A-Z0-9/]+)\s)(?:(?[A-Z0-9/]+)(?:\s(?[-+A-Z0-9]+)(?:\s(?(?:OOO|(?!RR73)[A-R]{2}[0-9]{2})))?)?)?)"}; } -DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString const& my_grid) +DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString const& my_grid, int submode) : string_ {the_string.left (the_string.indexOf (QChar::Nbsp))} // discard appended info , padding_ {string_.indexOf (" ") > 4 ? 2 : 0} // allow for seconds , contest_mode_ {contest_mode} @@ -25,6 +25,7 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString , isHeartbeat_(false) , isAlt_(false) , bits_{0} + , submode_{submode} { if(message_.length() >= 1) { message_ = message_.left (21).remove (QRegularExpression {"[<>]"}); @@ -69,12 +70,13 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString tryUnpack(); } -DecodedText::DecodedText (QString const& js8callmessage, int bits): +DecodedText::DecodedText (QString const& js8callmessage, int bits, int submode): frameType_(Varicode::FrameUnknown), message_(js8callmessage), isHeartbeat_(false), isAlt_(false), - bits_(bits) + bits_(bits), + submode_(submode) { is_standard_ = QRegularExpression("^(CQ|DE|QRZ)\\s").match(message_).hasMatch(); @@ -89,9 +91,13 @@ bool DecodedText::tryUnpack(){ bool unpacked = false; if(!unpacked){ - unpacked = tryUnpackData(); + unpacked = tryUnpackFastData(); } + if(!unpacked){ + unpacked = tryUnpackData(); + } + if(!unpacked){ unpacked = tryUnpackHeartbeat(); } @@ -115,6 +121,10 @@ bool DecodedText::tryUnpackHeartbeat(){ return false; } + if((bits_ & Varicode::JS8CallData) == Varicode::JS8CallData){ + return false; + } + bool isAlt = false; quint8 type = Varicode::FrameUnknown; quint8 bits3 = 0; @@ -159,6 +169,10 @@ bool DecodedText::tryUnpackCompound(){ return false; } + if((bits_ & Varicode::JS8CallData) == Varicode::JS8CallData){ + return false; + } + QStringList cmp; if(!parts.at(0).isEmpty()){ cmp.append(parts.at(0)); @@ -188,6 +202,10 @@ bool DecodedText::tryUnpackDirected(){ return false; } + if((bits_ & Varicode::JS8CallData) == Varicode::JS8CallData){ + return false; + } + quint8 type = Varicode::FrameUnknown; QStringList parts = Varicode::unpackDirectedMessage(m, &type); @@ -218,7 +236,11 @@ bool DecodedText::tryUnpackData(){ // data frames calls will always be 12+ chars and contain no spaces. if(m.length() < 12 || m.contains(' ')){ - return false; + return false; + } + + if((bits_ & Varicode::JS8CallData) == Varicode::JS8CallData){ + return false; } QString data = Varicode::unpackDataMessage(m); @@ -232,6 +254,33 @@ bool DecodedText::tryUnpackData(){ return true; } +bool DecodedText::tryUnpackFastData(){ + QString m = message().trimmed(); + + // data frames calls will always be 12+ chars and contain no spaces. + if(m.length() < 12 || m.contains(' ')){ + return false; + } + + if((bits_ & Varicode::JS8CallData) != Varicode::JS8CallData){ + return false; + } + + if(submode_ != Varicode::JS8CallFast && submode_ != Varicode::JS8CallTurbo && submode_ != Varicode::JS8CallUltra){ + return false; + } + + QString data = Varicode::unpackFastDataMessage(m); + + if(data.isEmpty()){ + return false; + } + + message_ = data; + frameType_ = Varicode::FrameData; + return true; +} + QStringList DecodedText::messageWords () const { if (is_standard_) diff --git a/decodedtext.h b/decodedtext.h index 896eb2c..7872ccb 100644 --- a/decodedtext.h +++ b/decodedtext.h @@ -30,14 +30,15 @@ class DecodedText { public: - explicit DecodedText (QString const& message, bool, QString const& my_grid); - explicit DecodedText (QString const& js8callmessage, int bits); + explicit DecodedText (QString const& message, bool, QString const& my_grid, int submode); + explicit DecodedText (QString const& js8callmessage, int bits, int submode); bool tryUnpack(); bool tryUnpackHeartbeat(); bool tryUnpackCompound(); bool tryUnpackDirected(); bool tryUnpackData(); + bool tryUnpackFastData(); quint8 frameType() const { return frameType_; } @@ -110,6 +111,7 @@ private: QString message_; bool is_standard_; int bits_; + int submode_; }; #endif // DECODEDTEXT_H diff --git a/js8.mod b/js8.mod new file mode 100644 index 0000000000000000000000000000000000000000..71d9ef2b42a7ad940720999853dd397753399cba GIT binary patch literal 1041 zcmV+s1n&DEiwFP!000001J#*PcbYI1$KUfQ?i>2BorIvm+o)zco+)~$cI%VJDsF5Q zHeqYGPrsXh7HQg9?K)`fF;Squ|Gl}n$<4dBBY)z%9<1Z#kLv(_2Ad>|BQTg{z+w~3 z(_jg!O}vILiT!%zP||2L;W=Jp+h`JOYW_?xX0t^cAyPUEt=R^Nj7Auxn=nekMH71l zFlaQ!{-`T@Q(wT;d+&`tc(3~2M0gXj?aB+b-|gNh{=S`h-ARAsff$G(-r){ljL#vi z@4J_?(R3pGSx=0G*Arg%GUN3HUS+A)e(C_vqug={Ip&ohwMR(+#Ph5QD z?mAMs&Y-W`>c@V=jGVW?-3H@oo&?un6lCao0v@n83`f1`KxF(q(H)SYt&H&bzi?$pWg21;4$2yW%c1(whq26;cGz8DAnP2Bz}Ao zRbN0$%WvoW$+x8X67;d_poG;bWp&`!4k8o3iaytXpP71oCi#*_1uj&24uF@r|y z`EB+2r3dsr!2BE4U>52)I(SUKQM`zgbY6#9NT)#N;O`g$SMhcA6|{8qt( zQ>Nisq_BskP??95H27A11zaycX5sX9`D0Uk1xzP^%OrfW3De*@{&b9n-Jb0P4dhP5 zUo>bX$UIzwJ(y$J+A+j24JW^%MTPd>oJ&M*0dE0s1MdL0fjeMPuozh8eGwSQiQ>jr z2hlHFzwe$sZ6~fUdi|mB&SjaVHysWSD#I{*7aubZK4mbeDfPjtiFOJr$yST-`RT$5 zEy_J)+?BTjGLBbQr;@13(TOA&j)|-%9m}#en2#F{Un{{*PH!p4;9(wWVNc&Os?~&B-DzW7Sz5j*M36@QXq_UxZUo zM@+v}i)SY#*s`)?2W++S8a~a-`Klg{pLdGIW$fF#N-cJryy%IzbXPyb4kLLj4%=o{ z)WQ}oR*0}~73(e7Z)MdBY_+$g0GgKt)UF!8uwj literal 0 HcmV?d00001 diff --git a/js8a.mod b/js8a.mod new file mode 100644 index 0000000000000000000000000000000000000000..76b704c733f13cfbcc82d19e70876629339cba22 GIT binary patch literal 162 zcmV;T0A2qdiwFP!0000019Nxt4+;r#^i#;qPbtkwRVYg>D$dN$Q&2ZFQCCPVN=+I}Q z_4D@g5BJmc^b2wI3xRV3g8ZFf94;uWV4z?Cu?tB63}JkrBfxx!lMu9lCKt#hPzM+& Q7-@0=01ghBm@xqW0MaTz`~Uy| literal 0 HcmV?d00001 diff --git a/js8params.mod b/js8params.mod new file mode 100644 index 0000000000000000000000000000000000000000..ded98cc0fc85e6f61e3fc861935636bb5dcd1b96 GIT binary patch literal 719 zcmV;=0xUsajM`DY$s2Q^+#)? zV1YDg|N8EM5Hy>%Gq#zW=x__ixu3n|zIS(h6@*df`mjrv_uCbGUuF3wO+XW-28(Pp zFIG!fXXy^U=61ZFXY*Ztxpp|~bh_{_zN{{E85W734q6;9(gZy#;*A++=$O{oBt^DK z^39@)mIeYkooN^hyx}bLVCKK~gOC2j$d5cfVzntN)c2Y*$Kz_|528`vgE#gj_=G!# zDYnDhFm!L@U>12{JoKiXKlJ>;ZRKz1VJ)+KoI`0KLTOY$`r(XMy3A-ZWXNE@9R~Yl z2BXbj9x>Re^n=-Eut1ytL`N}~t5kk++6~=_hktP5G*C{n(PTOv4Mx$$jr+kXoBj)5 z27!MQx!7b=kDb)h_+_vB*zbgP@Ve!F@7VF@5R+gy8=r>#h=37cuY7O!gFI^cIGW9w zp+9}};Xg)GK5~ss)B&w+I;QOR)it4;L`ZGW?(S4Uu=@mo16s0Fg}|~20>LH184OKQ zpTWSMApVp{oKp}&LZlCgDi{_?p&uynJw3v_K@jr27O1$%dR+*0DCo38)lI%ALm_mU z!jcsEkDV$UhC>at0tGnP%^y{vki9|o2P$`R#z^(LqS1FK1XS)MU8H$2S7)T6IHZ1m z!&l=|x>bdvM{wv;#Lwu7*G(y%nqKQt!W9y}7Y18hYIt6(_Ns6gG=^00;&FMOslp*h z3@P9b*``=+)6c4qkRVdSm09gMrcGv*+)#SHoy0*WHfT5)#Fhugzm%H@xOTUWg2ACz zt%o`Et5qcjyIP!aa1Kix4%KR>TqvL+SZltGw%$xz(J&5kKP;Nf1PTqSo`zt#S1CEK zG`$f-ykob81#PDqppli=;~bVnGgzRZv*wjU%Q(thykJ%tfF-NTegV*$EO0p#0015S BUatTE literal 0 HcmV?d00001 diff --git a/keyeater.cpp b/keyeater.cpp index 55bc57e..8f45f61 100644 --- a/keyeater.cpp +++ b/keyeater.cpp @@ -1,5 +1,20 @@ #include "keyeater.h" + +bool KeyPressEater::eventFilter(QObject *obj, QEvent *event){ + if (event->type() == QEvent::KeyPress) { + QKeyEvent *keyEvent = static_cast(event); + bool processed = false; + emit this->keyPressed(obj, keyEvent, &processed); + if(processed){ + return true; + } + } + + // standard event processing + return QObject::eventFilter(obj, event); +} + bool EscapeKeyPressEater::eventFilter(QObject *obj, QEvent *event){ if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); diff --git a/keyeater.h b/keyeater.h index e51c53d..abb011e 100644 --- a/keyeater.h +++ b/keyeater.h @@ -5,6 +5,20 @@ #include #include +class KeyPressEater : public QObject +{ + Q_OBJECT +public: + KeyPressEater(){} + virtual ~KeyPressEater(){} + +protected: + bool eventFilter(QObject *obj, QEvent *event); + +public: + Q_SIGNAL void keyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed); +}; + class EscapeKeyPressEater : public QObject { Q_OBJECT diff --git a/lib/CQnnnCAT.txt b/lib/CQnnnCAT.txt deleted file mode 100644 index d7e92d0..0000000 --- a/lib/CQnnnCAT.txt +++ /dev/null @@ -1,39 +0,0 @@ -Before using the new "CQ nnn ..." feature in JTMSK mode, I suggest -performing the following tests of the necessary CAT control for your -radio. (I'm assuming that you already have some experience with -JTMSK.) - -TEST 1: --------------------------------------------------------------------------- -1. Start WSJT-X -2. Settings: "Enable VHF/UHF/Microwave features, "Rx frequency offset - with 'CQ nnn ...'", Split=Rig, or Split="Fake it" -3. Main screen settings: Band=50.280, mode=JTMSK, T/R=15 s -4. Activate CQRx, set CQ Rx=265 - ==> Rx dial should now read 50.265 and Tx6 should be queued -5. Click "Enable Tx" - ==> Tx sequences should occur at 50.280, Rx at 50.265 - -With most rigs, this test should work with Split configured as either -"Rig" or "Fake it". - -TEST 2: --------------------------------------------------------------------------- -1. Start WSJT-X -2. Settings: MyCall=K1JT, "Enable VHF/UHF/Microwave features, - "Rx frequency offset with 'CQ nnn ...'", Split=Rig or "Fake it" -4. Main screen settings: Band=50.280, mode=JTMSK, T/R=15 s -5. Open file 150826_120515.wav - ==> see decoded message "K1JT VE1SKY FN74" -6. Click "Monitor" to restart monitoring -7. Activate CQRx, set CQ Rx=265 - ==> Rx dial should now read 50.265; Tx6 should be queued -8. Click "Enable Tx" - ==> Tx sequences should occur at 50.280, Rx at 50.265 -9. After the start of a transmission, double-click on the decoded message - "K1JT VE1SKY FN74" - ==> Tx2 should be generated and queued; transmission will pause - briefly, Tx freq changed to 50.265, then Tx resumed. - -The test file is posted at -http://physics.princeton.edu/pulsar/K1JT/150826_120515.wav diff --git a/lib/DXped_Operations.txt b/lib/DXped_Operations.txt deleted file mode 100644 index 9dc268b..0000000 --- a/lib/DXped_Operations.txt +++ /dev/null @@ -1,186 +0,0 @@ - White Paper: FT8 for DXpeditions - ----------------------------------- - Joe Taylor, K1JT - October 27, 2017 - -Assumptions: - -1. WSJT-X will have two distinct options that enable the maximum-rate -QSO exchanges described below. Fox must select "Fox"; all Hounds must -select "Hound". - -2. There will be an announced basic dial frequency for each band, say -f0=14082 kHz for 20m. This is the basic Channel. - -3. Fox always transmits in the 1st sequence, 200-800 Hz above f0. - -4. Hounds call in 2nd sequence, 1000-5000 Hz above f0. Hounds -transmitting below f0+1000 Hz will not be answered. - -5. If found necessary, additional Channels may be defined in which -Hounds can transmit. (However, I suggest that CQ-by-call-area may -be easier to implement and use; and the software could be made to -prevent Hounds in the wrong area from transmitting.) - -6. Ideally, Fox and Hounds should all use CAT control configured with -*Split Operation* set to *Rig* or *Fake It*, and transceiver dial -frequencies should best be calibrated to within a few Hz. (WSJT-X -provides tools that make this fairly easy to do.) - - -When Fox is running a pileup, QSOs will look something like the -following exchanges. Here I've assumed the Fox callsign is KH1DX, -his locator AJ10: - ------------------------------------------------------------------------- - Fox Hounds ------------------------------------------------------------------------- -1. CQ KH1DX AJ10 -2. KH1DX K1ABC FN42, KH1DX W9XYZ EN37, ... -3. K1ABC KH1DX -13 -4. KH1DX K1ABC R-11 -5. K1ABC RR73; W9XYZ -17 -6. ... no copy from W9XYZ ... -7. W9XYZ KH1DX -17 -8. ... no copy from W9XYZ ... -9. G4AAA KH1DX -11 -10. KH1DX G4AAA R-03 -11. G4AAA RR73; DL3BBB -12 -12. KH1DX DL3BBB R-09 -13. DL3BBB RR73; DE -14. ... ------------------------------------------------------------------------- - -All messages except those containing "<...>" are standard FT8 messages -(i3bit=0, iFreeText=0). Hounds transmit only standard messages. - -Fox transmits standard messages and also special messages with -i3bit=1. The special messages contain a callsign whose completed QSO -is being acknowledged; a callsign for the next station to be worked; a -hash code corresponding to the Fox callsign; and a signal report. -Users will see the Fox callsign enclosed in angle brackets, . -The 72-bit message payload contains two 28-bit callsigns, a 10-bit -hash code, and a 6-bit signal report. If no call has been queued up -by Fox for the next QSO, the acknowledgment message takes the -abbreviated form shown in line 13 above. - -When a Hound receives a message with i3bit=1, the decoder interprets -the remaining 72 bits as described above. If the 10-bit hash code -matches that for Fox's callsign, the message is displayed as in the -QSO exchanges shown above. Otherwise the message is considered a -false decode and is not displayed. - - -Station Setup and Operation for FOX ------------------------------------ - -A wide Rx bandwidth (up to 5 kHz) is selected. The basic dial -frequency is set 1 kHz above f0 (thus 14083 kHz in my example) and the -audio TxFreq somewhere between -200 and -800 Hz. (Yes, negative -numbers are OK. *Split Operation* will reset the Tx dial frequency as -needed and will keep the generated Tx audio frequency between 1500 and -2000 Hz.) Hounds with audio TxFreq set to N Hz will be received by Fox -at N-1000 Hz. - -WSJT-X at Fox will maintain and display a list of all decoded Hounds -calling Fox in the past 2 to 4 Rx cycles. The list might look -something like this (but typically will be much longer): - ----------------------------- -Call Grid Rpt Freq ----------------------------- -AA2UK FM29 -11 240 -AD9H EN61 +02 1260 -K0TPP EM48 -15 1980 -N2BJ EN61 +11 540 -N4NDR EL98 -17 4620 -NX4E EM70 +00 3780 -ON3LA JN29 -10 3300 -PD9BG JO21 -21 2100 -PJ4/KA1XYZ FK60 -07 1020 -VE1SKY FN74 +03 1620 -WB2REM EL97 -13 3060 -... ----------------------------- - -Fox can choose to have the list sorted on any column. - -Fox selects a Hound to call next by clicking on a line. Or he can hit -"F1" to have the program select a caller according to one of these -criteria (maybe others as well?): - - - Weakest caller - - Strongest caller - - Strongest one below -N dB (with N selectable) - - Choose a call at random - - Random choice with S/N between snrMin and snrMax dB. - -After a particular Hound has been called, Fox's Auto-Sequencer looks -for a response containing "R+rpt" originating from that same callsign. -If such a message is received, Fox's next transmission will be the -special "acknowledge-and-call-next" type, with i3bit=1. If the -expected message is not received, as in example line 6 above, the -report is sent to the same station again. If the second attempt fails -and another Hound callsign has been queued up, the QSO is aborted and -the next Hound is called. - - -Station Setup and Operation for Hounds --------------------------------------- - -Dial frequency is set to f0, 14082 kHz in my example. Rx bandwidth and -displayed range on the Wide Graph can be anything convenient, say 200 -to 2600 Hz. (Signal from Fox will be expected between 200 and 800 -Hz.) Enter callsign and locator of Fox on WSJT-X main window as *DX -Call* and *DX Grid*. Choose a TxFreq offset of 1000 + 60*N for some N -in the range 1 to 80 (maybe even higher?). Move TxFreq as desired, -hoping to find a clear slot, by using Shift+F11 and Shift+F12. - - - Hit F1 to call Fox in your next Tx sequence. Yes, you must hit F1 - repeatedly, in order to keep calling. - - - The Auto-sequencer will watch for a decoded message that contains - "MyCall DXcall rpt" or "MyCall rpt". When one of these is - received, your next transmission will be "DXcall MyCall R+rpt", - sent automatically. - - - After you send the "R+rpt" message, AutoSeq will watch for a - message that starts with "MyCall RR73; ...". When that is - received, you're in his log, and you'll be prompted to log the QSO. - -Random thoughts ---------------- - -Fox's decoder has access to signals in a 4 kHz (maybe even 5 kHz?) -window. At 60 Hz intervals, that's enough for around 65 (or 80?) -non-overlapping Hound signals. If the pileup becomes too deep, more -spectrum might be used; but note that WSJT-X can't access more than 5 -kHz at one time. A better solution might be for Fox to call "CQ n -KH1DX AJ10", where n is a single digit indicating call area. The -decoder could then limit the list of eligible calls to those in the -specified call area. After decoding such a CQ, the software at Hound -could refuse to transmit unless MyCall falls in the specified call -area. (Other special CQ formats can be imagined that would limit the -eligible Hound callsigns even further.) - -We haven't thought much, yet, about logging issues for Fox. I imagine -we could do what's necessary to join a N1MM+ logging network, if that's -deemed desirable. - -A few questions: - -Q1: Should the Auto-Sequencer allow for other cases in which a QSO has -been initiated by Fox, but one of next two messages is not copied by -either Fox or Hound? For example, what if K1ABC does not copy message -#5? Should he keep sending his message "KH1DX K1ABC R-11" ? If Fox -receives this message again, should he acknowledge again? And poor -W9XYZ, who never received an acknowledgment, will probably keep -sending "KH1DX W9XYZ R-19", or whatever. If Fox eventually copies the -message, should the program remember that W9XYZ had been called, and -thus send him an acknowledgment? - -Q2: Should we provide a stack for several to-be-called callsigns, -rather than just one? Should re-ordering of calls in the stack be -permitted? - -Q3: Can we handle WSJT-X "Type 1" and "Type 2" compound callsigns, for -Hounds? diff --git a/lib/DXped_pseudo_code.txt b/lib/DXped_pseudo_code.txt deleted file mode 100644 index 081bfda..0000000 --- a/lib/DXped_pseudo_code.txt +++ /dev/null @@ -1,71 +0,0 @@ -Auto-Sequencing algorithm for DXpedition station: - -Start: - CQMsg = "CQ KH1DX" (or "CQ UP KH1DX", "CQ 116 KH1DX", etc.) - TxMsg = CQMsg - Ntry = 0 - QCALL = "" # Callsign of current QSO partner - go to Transmit - -Transmit: - TX # (... takes 13.6 s) - go to Receive - -Receive: - RX # (... takes ~14 s) - N = number of decodes # RxMsg[i], i=1,N - if(N == 0) - go to Transmit - J = index of a reply from current QCALL # RxMsg[J] = "KH1DX QCALL R" - - if(QCALL == "") # No QSO in progress - Select new QCALL # Op chooses a caller - if(QCALL == "") - TxMsg = CQMsg # No callers, we'll CQ again - else # QSO in progress - if(J >= 1) # Expected message was received - log the QSO with QCALL - QCALL = "" - Select new QCALL # Op chooses a new caller - if(QCALL != "") - TxMsg = "73 NOW QCALL " # Start a new QSO - else - TxMsg = "73 " + CQMsg # No callers, we'll CQ again - else - Ntry = Ntry + 1 # Expected msg not received - if(Ntry <= NtryMax) - go to Transmit # Ask for a repeat - else - QCALL = "" # Max tries exceeded, abort this QSO - Select new QCALL # Choose a new caller - if(QCALL != "") - TxMsg = "NIL NOW QCALL " # Start a new QSO - else - TxMsg = "NIL " + CQMSG # No callers, we'll CQ again - go to Transmit - - -Auto-Sequencing algorithm for those calling the DXpedition: - -Start: - TxMsg = "KH1DX MyCall" - InQSO = false - -Transmit: - TX # (... takes 13.6 s) - go to Receive - -Receive: - RX # (... takes ~14 s) - if(RxMsg[i] contains "MyCall ") - InQSO = true - TxMsg = "KH1DX MyCall R" - go to Transmit - - if(RxMsg[i] contains "") - TxEnable = false - go to Receive - - if(RxMsg[i] contains "CQ KH1DX") - TxEnable = true - go to Transmit diff --git a/lib/Fast_Modes.txt b/lib/Fast_Modes.txt deleted file mode 100644 index da6e27b..0000000 --- a/lib/Fast_Modes.txt +++ /dev/null @@ -1,395 +0,0 @@ - Fast Modes in WSJT-X - -------------------- - -####################################################################### - -IMPORTANT - IMPORTANT - IMPORTANT - IMPORTANT - IMPORTANT - IMPORTANT - -Third-party individuals (i.e., others not part of the WSJT development -team) have been compiling WSJT-X from the open source code and making -unauthorized "releases" of their builds. I do NOT reccommend use of -unauthorized builds on the air. If a program revision has been released -in an official way, you will see it listed here. - -If you operate with an unauthorized "rXXXX" code revisions in our -experimental code branch you have no idea what you've got. Quite -possibly, the program was built from an intermediate temporary "save" -of various files, and was not even supposed to produce a usable -program. Your observetions about what works or does not work are then -worse than useless -- they waste your time and ours. - -So please, PLEASE, *PLEASE*: use *authorized*, "released* revisions -of this still-in-development software, like the revisions described here. - -*ALSO:* If you choose to try an experimental release of JTMSK, please -accept the responsibility of reporting on your results. You can send -reports to the "wsjtgroup" reflector, wsjtgroup@yahoogroups.com, or -email them directly to me. All suggestions for improvements are -welcome! - -Bug reports should include details on how to reproduce the undesirable -program behavior. Reports on decoding performance are especially -useful when accompanied by example *.wav files with signals that -you think should have decoded, but did not. - -####################################################################### - -September 18, 2015 ------------------ - -New alpha release of experimental WSJT-X v1.6.1, r5910 ------------------------------------------------------- -Changes since revision 5889 include the following: - -1. Improved behavior for auto-QSY with "CQ nnn ..." feature. (May not -be exactly correct, yet, for all radios. Please report if you find -problems with your rig.) - -2. Allow optional use of Wide Graph in fast modes. - -3. Add UTC labels to Fast Graph spectrograms. - -4. Display correct DXCC entiry for "CQ nnn ..." messages. - -5. Implement "Save Decoded" for fast modes. - -6. Select Tx6 when "CQ Rx nnn" is enabled. - -7. Fix bug in setting of TRperiod after switch to ISCAT mode. - -8. Display proper symbol '&' in Tx messages in JTMSK mode. - - -To download this alpha release for Windows, paste the following link -into your browser: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5910-win32.exe - - -- 73, Joe, K1JT - -####################################################################### - -September 12, 2015 ------------------ - -New alpha release of experimental WSJT-X v1.6.1, r5889 ------------------------------------------------------- - -A principal new feature in this release is designed to promote the use -of an agreed "calling frequency" for transmissions of the form - - CQ 265 K1ABC FN42 - -signifying that K1ABC will listen for replies on 50.265 (or 144.265, -or whatever) and will complete the QSO there. The feature uses the -rig-control features of WSJT-X to handle the necessary frequency -switching. - -########################################################################## -Changes since revision 5865 include the following: - -1. New features that allow automatic rig control when you transmit or -respond to messages of the form "CQ 265 K1ABC FN42" on an agreed -calling frequency. This feature should be especially useful for -meteor scatter. - -2. Yellow-highlighted "Tx" messages in the right text window are now -properly labeled with 6-digit UTC (hhmmss) in all fast modes. - -3. Fixed a bug (introduced in r5865) that inhibited transmitting in -JT4 mode. - -4. Fixed a bug that caused Wide Graph to continue issuing green -separator lines at short (e.g. 15 s) intervals after you have switched -to a slow mode. - -5. Fixed several more GUI appearance bugs associated with changing -modes or submodes. - -6. Fixed a bug in which double-clicking on the Fast Graph could cause -program crashes. - -7. Fixed a bug that sometimes caused "high tones" to be emitted in -JTMSK mode. - -####################################################################### -Here's a brief description of how to use the "CQ nnn ..." features. - -1. On program startup, go to the Settings | General tab and tick the -box labeled 'Rx frequency offset with "CQ nnn ..."' - -2. Select JTMSK mode and 50.280 (or your some other agreed calling -frequency) from the drop-down band menu. Remember that this menu is -not pre-populated with preferred frequencies for all modes on all -bands. Use Settings | Frequencies to add your desired modes and -frequencies to the list. - -3. Tick the unlabeled checkbox just under the "Report: spinner to -activate the "CQ Rx nnn" spinner. Set this control to your desired -QSO frequency in kHz above the nominal band edge. On 6 meters, for -example, "265" means "50.265". - -4. Your transceiver dial frequency should now show 50.265. Changes to -the "CQ Rx nnn" spinner value should be reflected immediately in the -transceiver dial frequency, the displayed value on the WSJT-X main -screen, and in Tx message #6, the "CQ nnn... " message. - -5. When you transmit the Tx6 message, the Tx frequency will be set at -the calling frequency. Otherwise (when receiving, or when -transmitting any of the messages Tx1 through Tx5) the offset frequency -(50.265 in my example) will be used. - -6. If you double-click on a received "CQ nnn ..." message on the -calling frequency, your rig will QSY to specified response frequency, -e.g. 50.265, for both Rx and Tx. - -7. To go back to listening on the calling frequency, uncheck the box -that activated the "CQ Rx nnn" spinner. - -####################################################################### - -Fair warning: I have not yet tested all possible combinations of -"Split Operation" configuration (i.e., "None", "Rig", and "Fake it"). -If you normally use Split operation, that should be OK for the "CQ -nnn ..." feature. - - -As always, please report any bugs that you find in r5889, including -pertinent details on your settings and the exact series of steps -required to reproduce the bug. - - -To download this alpha release for Windows, paste the following link -into your browser: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5889-win32.exe - - - -- 73, Joe, K1JT - -####################################################################### - -New alpha release of experimental WSJT-X v1.6.1, r5865 ------------------------------------------------------- - -This alpha release of WSJT-X includes major improvements to the JTMSK -decoder. Changes since revision 5823 include the following: - -1. On-screen controls labeled "Rx nnnn Hz" and "F Tol" (Rx frequency -and tolerance) now function as expected in JTMSK mode. The frequency -search range can be up to 500 Hz, but note that sensitivity is -necessarily reduced for signals off frequency by more than about 250 -Hz. Normally you should leave Rx Freq set at 1500 Hz; suitable values -for F Tol are 100 to 500 Hz. - -2. The JTMSK decoder now makes good use of strong, short pings (as -short as 0.1 s) as well as weak pings several times longer. - -3. Improved calculation of S/N and frequency of decoded signals. - -4. Unified appearance of window titles on all non-modal windows. - -5. CW ID is disabled (for now, at least) when operating in any of the -WSJT fast modes. - -6. In WSPR mode, display of "Receiving ... " messages is -disabled when band-hopping is not in use. - -7. Fixed several bugs affecting status and visibility of certain -on-screen controls after changes in operating mode. - -8. Fixed a bug allowing display of duplicate decodes for the same -signal. - -9. Fixed a bug preventing compilation on 64-bit systems, and cleaned -up some harmless compiler warnings. - -####################################################################### - Summary Description of JTMSK Protocol - -JTMSK uses the same standard message structure as slow modes JT4, JT9, -and JT65. User information is "source encoded" to 72 bits. A 15-bit -CRC is appended and a convolutional code with constraint length K=13 -and rate r=1/2 is applied, making a total of (72+15+12)*2 = 198 -information bits. Three copies of the "Barker-11" code and three -even-parity bits are added for synchronization, making a total of -198+33+3 = 234 channel symbols. Modulation uses a constant-envelope, -continuous-phase "minimum-shift keying" (MSK) waveform, with tone -frequencies of 1000 and 2000 Hz. - -####################################################################### - -To download this alpha release for Windows, paste the following link -into your browser: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5865-win32.exe - - -- 73, Joe, K1JT - -August 28, 2015 ---------------- - -New release of experimental WSJT-X v1.6.1, r5823 ------------------------------------------------- - -To download for Windows, paste the following link into your browser: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5823-win32.exe - -This experimental version of WSJT-X introduces a new fast mode called -JTMSK. The letters MS, of course, imply meteor scatter; the three -letters MSK mean "Minimum Shift Keying", the modulation scheme used in -this mode. - -Revision 5823 also includes a number of (mostly minor) bug fixes -relative to r5789. - -IMPORTANT: If you choose to try JTMSK, please accept the -responsibility of reporting on your results. You can send reports to -the "wsjtgroup" reflector, wsjtgroup@yahoogroups.com or email them -directly to me. All suggestions for improvements are welcome! Bug -reports should include details on how to reproduce the undesirable -program behavior. - -The present JTMSK decoder has been optimized for short pings. It does -not yet do a wide search for proper frequency alignment; you and your -QSO partner need to be "on frequency" to within +/- 100 Hz or better. -The decoder does not (yet) attempt to make optimal use of weak, slowly -varying signals. These and other characteristics may be improved in -coming revisions. - -KNOWN BUG: At present you should use T/R sequence lengths 15 s in -JTMSK mode. If you have a program crash, open Windows Task Manager, -select the "Processes" tab, right-click on wsjtx.exe, and select "End -Process Tree". Then restart the program. - -I view JTMSK as a candidate for replacing both FSK441 and JTMS for all -meteor scatter work. JTMSK has the major advantage of including -strong forward error correction (FEC), similar in usage to the schemes -used for many years in JT4, JT9, and JT65. The structure of user -messages and the format of minimal QSOs is also identical to those -other modes. But JTMSK is very fast, transmitting its full encoded -message content in 0.117 s, in a 2 kHz bandwidth. JTMSK therefore -makes much better use of short pings than (for example) JT9H can do. - -The Tx waveform of JTMSK has been carefully designed to have a number -of desirable features. All messages are exactly the same length: 72 -bits of user information are followed by a 15-bit CRC and encoded into -198 channel bits with a convolutional code (constraint length K=13, -rate r=1/2). Three sequences of the "Barker-11" code are added, along -with three parity bits, making a total of 234 channel bits in each -message. The MSK symbols for these bits are transmitted at 2000 baud, -and the full encoded message is repeated every 117 ms. - -A summary description of modulation parameters for all WSJT(-X) modes -is shown in a table posted here: -http://physics.princeton.edu/pulsar/K1JT/wsjt_modes.txt and -illustrated graphically here: -http://physics.princeton.edu/pulsar/K1JT/wsjt_modes.pdf - - -- 73, Joe, K1jT - -August 15, 2015 ---------------- - -New release of experimental WSJT-X v1.6.1, r5789 - -Changes since WSJT-X v1.6.1, revision 5779: - -1. Major speedup (5x) of fast-JT9 decoder. -2. Corrected logic for Auto-Sequencing operation. -3. Stop after sending 73 five times in auto-sequence mode. -4. Add an "Auto-Level" control to Fast Graph window. -5. Send fast-mode decodes to PSKreporter web site. -6. Support automatic logging via JTAlert-X. -7. Send fast-mode output to file ALL.TXT. -8. Better definition of dB levels for fast-JT9 signals. -9. Rationalize the GUI behavior when changing mode, submode, fast/slow - status, and T/R period. -10. Correct a flaw in the display of multiple decodes in a single - fast-JT9 sequence. -11. Fix minor bugs reported by G3WDG, ND0B, OZ1PIF, and others. - -To download for Windows, paste the following link into your browser: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5789-win32.exe - -Please keep in mind that this is an experimental version of WSJT-X. -Bug reports and other feedback will be much appreciated, and will help -to make the program better! - - -- 73, Joe, K1JT - - -August 11, 2015 ---------------- - -Since its origin in the dark ages (ca. 2001) WSJT has supported "fast" -modes (designed for meteor scatter, etc.) and "slow" modes (optimized -for EME and other weak-signal propagation types). The most recent new -mode, JT9, now has *both* fast and slow submodes. - -JT9A (the "original" JT9) is like JT65 and JT4: its T/R sequences are -one minute long, and its primary goal is best possible sensitivity for -very weak, approximately steady signals. The new experimental JT9 -submodes use the same message structure, encoding, and modulation type -(9-tone FSK) as JT9A, but wider tone spacing and (optionally) faster -keying rates. - -You can download an experimental version of WSJT-X (v1.6.1, r5779) here: -http://physics.princeton.edu/pulsar/K1JT/wsjtx-1.6.1-r5779-win32.exe - -The fast submodes currently being tested, JT9E - JT9H, have been found -highly effective for meteors and ionoscatter propagation on 6 and 10 -meters. Sensitivity is similar to ISCAT, or slightly better. -Decoding is much more reliable, because the JT9 protocol includes -strong forward error correction. Decoding results are like those for -all the WSJT "slow" modes: you should see messages exactly as they -were transmitted, or nothing at all. A potential side benefit is -automatic reporting of decodes to PSKreporter. - -For details on the modulation parameters of the JT9 submodes, see the -table posted at -http://physics.princeton.edu/pulsar/K1JT/wsjt_modes.txt. - -WSJT-X v1.6.1 r5779 has the following changes from r5769: - -1. Numerous bug fixes -2. Double-click on decoded message now behaves properly -3. Faster decoding (further optimization still to come) -4. Decoded text is highlighted as in WSJT-X slow modes -5. Optional auto-sequencing - -Fair warning: auto-sequencing is basically functional, but scarcely -tested. Please watch what it is doing, and tell us how you think it -should be improved! - -If you use WSJT-X also for other modes and other purposes, you may -want to save several different sets of configuration settings. In -that case it's convenient to use the "-r xxx" option and start the -program from a command-prompt window. For example: - -C:\Users\joe> cd \wsjt\wsjtx\bin -C:\WSJT\wsjtx\bin> wsjtx -r xxx - -... where "xxx" can be anything you like, for example "ISCAT", -"FAST9", etc. - -Proper configuration for the JT9 fast modes includes the following -settings: - -On the Settings | General tab: - - - check "Enable VHF/UHF/Microwave features" - -Main window settings: - - - Mode JT9 - - Tx 700 Hz - - Rx 700 Hz - - Sync 0 - - Submode G ... or E, F, and H (H not legal in US on 10m) - - Tick "Fast" - - T/R 30 s (also 5, 10, 15 s) - - FTol 500 - -Please keep in mind that this is an experimental version of WSJT-X. -It still has some rough edges, and no doubt some bugs. Your feedback -will be much appreciated, and will help to make the program better! - - -- 73, Joe, K1JT diff --git a/lib/Makefile b/lib/Makefile deleted file mode 100644 index c4d6279..0000000 --- a/lib/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -CC = gcc -CXX = g++ -FC = gfortran - -FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion -CFLAGS = -O2 -I. - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -#all: qratest.exe tplt.exe -all: qra64d.exe - -OBJS1 = qratest.o qra64a.o ana64.o sync64a.o four2a.o smo.o smo121.o averms.o \ - timer_module.o packjt.o twkfreq.o spec64.o fmtmsg.o pctile.o \ - grid2deg.o deg2grid.o shell.o badmsg.o qra64_subs.o \ - qracodes.o npfwht.o pdmath.o qra12_63_64_irr_b.o \ - qra13_64_64_irr_e.o qra64.o image.o \ - zplt64a.o zplt64b.o lorentzian.o fchisq0.o peakup.o sync64.o - -qra64_subs.o: qra/qra64/qra64_subs.c - gcc -c -O2 -o qra64_subs.o qra/qra64/qra64_subs.c - -qracodes.o: qra/qracodes/qracodes.c - gcc -c -O2 -o qracodes.o qra/qracodes/qracodes.c - -qra64.o: qra/qra64/qra64.c - gcc -c -O2 -o qra64.o qra/qra64/qra64.c - -npfwht.o: qra/qracodes/npfwht.c - gcc -c -O2 -o npfwht.o qra/qracodes/npfwht.c - -pdmath.o: qra/qracodes/pdmath.c - gcc -c -O2 -o pdmath.o qra/qracodes/pdmath.c - -qra12_63_64_irr_b.o: qra/qracodes/qra12_63_64_irr_b.c - gcc -c -O2 -o qra12_63_64_irr_b.o qra/qracodes/qra12_63_64_irr_b.c - -qra13_64_64_irr_e.o: qra/qracodes/qra13_64_64_irr_e.c - gcc -c -O2 -o qra13_64_64_irr_e.o qra/qracodes/qra13_64_64_irr_e.c - -qratest.exe: $(OBJS1) - $(FC) -o qratest.exe $(OBJS1) C:\JTSDK\fftw3f\libfftw3f-3.dll - -OBJS2 = tplt.o zplt64.o image.o -tplt.exe: $(OBJS2) - $(FC) -o tplt.exe $(OBJS2) - -OBJS3 = qra64d.o sync64a.o four2a.o smo.o smo121.o averms.o \ - timer_module.o packjt.o twkfreq.o spec64.o fmtmsg.o pctile.o \ - grid2deg.o deg2grid.o shell.o badmsg.o qra64_subs.o \ - qracodes.o npfwht.o pdmath.o qra12_63_64_irr_b.o \ - qra13_64_64_irr_e.o qra64.o image.o \ - zplt64a.o zplt64b.o lorentzian.o fchisq0.o peakup.o sync64.o - -qra64d.exe: $(OBJS3) - $(FC) -o qra64d.exe $(OBJS3) C:\JTSDK\fftw3f\libfftw3f-3.dll - -.PHONY : clean - -clean: - $(RM) *.o qratest.exe tplt.exe diff --git a/lib/Makefile.MinGW b/lib/Makefile.MinGW deleted file mode 100644 index 1cdc665..0000000 --- a/lib/Makefile.MinGW +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for MinGW on Windows -# -# Needed libraries are located using the following variables: -# -# QT_DIR - point this at the root of your Qt installation -# FFTW3_DIR - point this at the fftw v3 installation directory -# -# e.g. -# make -f Makefile.MinGW \ -# QT_DIR=c:/Qt/5.2.1/mingw48_32 \ -# FFTW3_DIR = c:/fftw-3.3.3-dll32-2 -# -# Windows re-direct: -# C> make > junk1 2>&1 - -# Set paths -EXE_DIR = ..\\..\\wsjtx_install -QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32 -FFTW3_DIR = .. - -INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include - -# Compilers -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -RANLIB = ranlib -MKDIR = mkdir -p -CP = cp -RM = rm -f - -FFLAGS = -O2 -fbounds-check -Wall -Wno-precision-loss -fno-second-underscore -CFLAGS = -I. -fbounds-check -mno-stack-arg-probe - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a libastro.a jt9.exe jt9code.exe jt65code.exe - -OBJS1 = prog_args.o options.o pctile.o graycode.o sort.o ssort.o chkmsg.o \ - unpackmsg.o igray.o unpackcall.o unpackgrid.o \ - fmtmsg.o grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \ - packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \ - nchar.o four2a.o grid2deg.o pfxdump.o f77_wisdom.o \ - symspec.o analytic.o db.o genjt9.o flat1.o smo.o \ - packbits.o unpackbits.o encode232.o interleave9.o \ - entail.o fano232.o gran.o sync9.o decode9.o \ - fil3.o decoder.o grid2n.o n2grid.o timer.o \ - softsym.o getlags.o afc9.o fchisq.o twkfreq.o downsam9.o \ - peakdt9.o symspec2.o stdmsg.o morse.o azdist.o geodist.o \ - fillcom.o chkss2.o zplot9.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat3.o polfit.o determ.o baddata.o - -libjt9.a: $(OBJS1) - $(AR) libjt9.a $(OBJS1) - $(RANLIB) libjt9.a - -OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o ipcomm.o sec_midn.o usleep.o -LIBS2 = -L${QT_DIR}/lib -lQt5Core -jt9.exe: $(OBJS2) libjt9.a - $(CXX) -o jt9.exe $(OBJS2) $(LIBS2) libjt9.a \ - -L$(FFTW3_DIR) -lfftw3f-3 $(shell $(FC) -print-file-name=lib$(FC).a) - -$(MKDIR) $(EXE_DIR) - $(CP) jt9.exe $(EXE_DIR) - -OBJS3 = jt9sim.o -jt9sim.exe: $(OBJS3) libjt9.a - $(FC) -o jt9sim.exe $(OBJS3) libjt9.a - -OBJS4 = jt9code.o -jt9code.exe: $(OBJS4) libjt9.a - $(FC) -o jt9code.exe $(OBJS4) libjt9.a - $(CP) jt9code.exe $(EXE_DIR) - -OBJS5 = jt65.o -jt65.exe: $(OBJS5) libjt9.a - $(FC) -o jt65.exe $(OBJS5) libjt9.a -L$(FFTW3_DIR) -lfftw3f-3 - -OBJS7 = astrosub.o astro0.o astro.o tm2.o grid2deg.o sun.o moondop.o \ - coord.o dot.o moon2.o tmoonsub.o toxyz.o geocentric.o \ - dcoord.o - -libastro.a: $(OBJS7) - $(AR) libastro.a $(OBJS7) - $(RANLIB) libastro.a - -OBJS6 = jt65code.o -jt65code.exe: $(OBJS6) libjt9.a - $(FC) -o jt65code.exe $(OBJS6) libjt9.a - $(CP) jt65code.exe $(EXE_DIR) - -sync9.o: sync9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c sync9.f90 - -spec9.o: spec9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c spec9.f90 - -peakdt9.o: peakdt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c peakdt9.f90 - -jt9sim.o: jt9sim.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c jt9sim.f90 - -genjt9.o: genjt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c genjt9.f90 - -redsync.o: redsync.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c redsync.f90 - -unpackmsg.o: unpackmsg.f90 - $(FC) -c -O0 -fbounds-check -Wall -Wno-precision-loss unpackmsg.f90 - -ipcomm.o: ipcomm.cpp - $(CXX) -c $(INCPATH) ipcomm.cpp - -sec_midn.o: sec_midn.f90 - $(FC) -c -fno-second-underscore sec_midn.f90 - -#rig_control.o: rig_control.c -# $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include rig_control.c - -tstrig.o: tstrig.c - $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include tstrig.c - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - - -.PHONY : clean - -clean: - $(RM) *.o libjt9.a wsjtx.exe jt9sim.exe jt9.exe jt65.exe diff --git a/lib/Makefile.MinGW.qt4 b/lib/Makefile.MinGW.qt4 deleted file mode 100644 index df90745..0000000 --- a/lib/Makefile.MinGW.qt4 +++ /dev/null @@ -1,122 +0,0 @@ -# Makefile for MinGW on Windows -# Windows re-direct: -# C> make > junk1 2>&1 - -# Set paths -EXE_DIR = ../../wsjtx_install -INCPATH = -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore' \ - -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include' \ - -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/ActiveQt' \ - -I'release' -I'.' -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/mkspecs/win32-g++' - -# Compilers -CC = gcc -CXX = g++ -FC = g95 - -FFLAGS = -O2 -fbounds-check -Wall -Wno-precision-loss -fno-second-underscore -CFLAGS = -I. -fbounds-check -mno-stack-arg-probe - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a jt9sim.exe jt9.exe jt9code.exe jt65.exe - -OBJS1 = pctile.o graycode.o sort.o ssort.o \ - unpackmsg.o igray.o unpackcall.o unpackgrid.o \ - grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \ - packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \ - nchar.o four2a.o grid2deg.o pfxdump.o f77_wisdom.o \ - symspec.o analytic.o db.o genjt9.o \ - packbits.o unpackbits.o encode232.o interleave9.o \ - entail.o fano232.o gran.o sync9.o decode9.o \ - fil3.o decoder.o grid2n.o n2grid.o timer.o \ - softsym.o getlags.o afc9.o fchisq.o twkfreq.o downsam9.o \ - peakdt9.o symspec2.o stdmsg.o morse.o azdist.o geodist.o \ - fillcom.o chkss2.o zplot9.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o - -libjt9.a: $(OBJS1) - ar cr libjt9.a $(OBJS1) - ranlib libjt9.a - -OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o ipcomm.o sec_midn.o usleep.o -LIBS2 = -L'c:/QtSDK/Desktop/Qt/4.7.4/mingw/lib' -lQtCore4 -jt9.exe: $(OBJS2) libjt9.a - $(CXX) -o jt9.exe $(OBJS2) $(LIBS2) libjt9.a ../libfftw3f_win.a \ - c:/MinGW/lib/libf95.a - mkdir -p $(EXE_DIR) - cp jt9.exe $(EXE_DIR) - -OBJS3 = jt9sim.o -jt9sim.exe: $(OBJS3) libjt9.a - $(FC) -o jt9sim.exe $(OBJS3) libjt9.a - -OBJS4 = jt9code.o -jt9code.exe: $(OBJS4) libjt9.a - $(FC) -o jt9code.exe $(OBJS4) libjt9.a - -OBJS5 = jt65.o -jt65.exe: $(OBJS5) libjt9.a - $(FC) -o jt65.exe $(OBJS5) libjt9.a ../libfftw3f_win.a - -sync9.o: sync9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c sync9.f90 - -spec9.o: spec9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c spec9.f90 - -peakdt9.o: peakdt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c peakdt9.f90 - -jt9sim.o: jt9sim.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c jt9sim.f90 - -genjt9.o: genjt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c genjt9.f90 - -redsync.o: redsync.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c redsync.f90 - -unpackmsg.o: unpackmsg.f90 - $(FC) -c -O0 -fbounds-check -Wall -Wno-precision-loss unpackmsg.f90 - -ipcomm.o: ipcomm.cpp - $(CXX) -c $(INCPATH) ipcomm.cpp - -sec_midn.o: sec_midn.f90 - $(FC) -c -fno-second-underscore sec_midn.f90 - -#rig_control.o: rig_control.c -# $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include rig_control.c - -tstrig.o: tstrig.c - $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include tstrig.c - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - - -.PHONY : clean - -clean: - rm -f *.o libjt9.a wsjtx.exe jt9sim.exe jt9.exe jt65.exe diff --git a/lib/Makefile.jt65 b/lib/Makefile.jt65 deleted file mode 100644 index 7409b5c..0000000 --- a/lib/Makefile.jt65 +++ /dev/null @@ -1,84 +0,0 @@ -# Set paths -EXE_DIR = ../../wsjtx_exp_install_latest -QT_DIR = /usr/include/qt5 -INCPATH = -I${QT_DIR} -I${QT_DIR}/QtCore - -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -MKDIR = mkdir -p -CP = cp -RANLIB = ranlib -RM = rm -f - -FFLAGS = -I/opt/local/include -O3 -funroll-loops -Wall -Wno-conversion -fno-second-underscore -DUNIX -CFLAGS = -I. -fbounds-check -fPIE - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a jt65 jt65sim t3 - -OBJS1 = astrosub.o astro0.o astro.o sun.o coord.o tmoonsub.o \ - fmtmsg.o deg2grid.o\ - prog_args.o options.o pctile.o graycode.o sort.o chkmsg.o \ - igray.o fftw3mod.o packjt.o\ - four2a.o grid2deg.o wisdom.o \ - symspec.o analytic.o db.o \ - encode232.o interleave9.o\ - entail.o fano232.o gran.o sync9.o \ - fil3.o decoder.o fqso_first.o \ - twkfreq.o symspec2.o shell.o sync65.o peakup.o slope.o xcor.o\ - chkss2.o zplot9.o flat1.o flat2.o \ - symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat4.o determ.o baddata.o subtract65.o - -libjt9.a: $(OBJS1) - $(AR) libjt9.a $(OBJS1) - $(RANLIB) libjt9.a - -OBJS7 = jt65.o -jt65: $(OBJS7) libjt9.a libsfrsd.a - $(FC) -o jt65 $(OBJS7) -L. -L/opt/local/lib -L./sfrsd2 -ljt9 -lsfrsd -lfftw3f_threads -lfftw3f - $(CP) jt65 $(EXE_DIR) - -OBJS2 = jt65sim.o wavhdr.o -jt65sim: $(OBJS2) libjt9.a - $(FC) -o jt65sim $(OBJS2) -L. -L/opt/local/lib -ljt9 -lfftw3f - $(CP) jt65sim $(EXE_DIR) - -OBJS3 = t3.o -t3: $(OBJS3) libjt9.a - $(FC) -o t3 $(OBJS3) -L. -L/opt/local/lib -ljt9 - -OBJS6 = jt65code.o -jt65code: $(OBJS6) libjt9.a - $(FC) -o jt65code $(OBJS6) libjt9.a - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - -.PHONY : clean - -clean: - $(RM) *.o libjt9.a jt65 diff --git a/lib/Makefile.jt65_Win b/lib/Makefile.jt65_Win deleted file mode 100644 index 08a4d22..0000000 --- a/lib/Makefile.jt65_Win +++ /dev/null @@ -1,76 +0,0 @@ -# Set paths -EXE_DIR = C:/JTSDK/wsjtx_exp/install/Debug/bin -QT_DIR = /usr/include/qt5 -INCPATH = -I${QT_DIR} -I${QT_DIR}/QtCore - -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -MKDIR = mkdir -p -CP = cp -RANLIB = ranlib -RM = rm -f - -FFLAGS = -O2 -Wall -Wno-conversion -fno-second-underscore -CFLAGS = -I. -fbounds-check -fPIE -DBIGSYM - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a jt65 jt65sim - -OBJS1 = astrosub.o astro0.o astro.o sun.o coord.o tmoonsub.o \ - fmtmsg.o deg2grid.o\ - prog_args.o options.o pctile.o graycode.o sort.o chkmsg.o \ - igray.o fftw3mod.o packjt.o\ - four2a.o grid2deg.o wisdom.o \ - symspec.o analytic.o db.o \ - encode232.o interleave9.o \ - entail.o fano232.o gran.o sync9.o decjt9.o \ - fil3.o decoder.o timer.o exp_decode65.o fqso_first.o \ - twkfreq.o symspec2.o shell.o sync65.o peakup.o slope.o xcor.o\ - fillcom.o chkss2.o zplot9.o flat1.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat4.o determ.o baddata.o subtract65.o - -libjt9.a: $(OBJS1) - $(AR) libjt9.a $(OBJS1) - $(RANLIB) libjt9.a - -OBJS7 = jt65.o -jt65: $(OBJS7) libjt9.a libsfrsd.a - $(FC) -o jt65 $(OBJS7) -L. -L./sfrsd2 -ljt9 -lsfrsd \ - C:\JTSDK\fftw3f\libfftw3f-3.dll - -OBJS2 = jt65sim.o wavhdr.o -jt65sim: $(OBJS2) libjt9.a - $(FC) -o jt65sim $(OBJS2) -L. -ljt9 C:\JTSDK\fftw3f\libfftw3f-3.dll - $(CP) jt65sim.exe $(EXE_DIR) - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - -.PHONY : clean - -clean: - $(RM) *.o libjt9.a jt65 diff --git a/lib/Makefile.jt65_osx b/lib/Makefile.jt65_osx deleted file mode 100644 index c831e70..0000000 --- a/lib/Makefile.jt65_osx +++ /dev/null @@ -1,74 +0,0 @@ -# Set paths -EXE_DIR = ../../wsjtx_install - -CC = clang -CXX = g++ -FC = gfortran -AR = ar cr -MKDIR = mkdir -p -CP = cp -RANLIB = ranlib -RM = rm -f - -FFLAGS = -I/opt/local/include -Wall -Wno-conversion -fno-second-underscore -DUNIX -CFLAGS = -I. -fbounds-check -fPIE - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a jt65 jt65sim - -OBJS1 = astrosub.o astro0.o astro.o sun.o coord.o tmoonsub.o \ - fmtmsg.o deg2grid.o\ - prog_args.o options.o pctile.o graycode.o sort.o chkmsg.o \ - igray.o fftw3mod.o packjt.o\ - four2a.o grid2deg.o wisdom.o \ - symspec.o analytic.o db.o \ - encode232.o interleave9.o\ - entail.o fano232.o sgran.o gran.o sync9.o decjt9.o \ - fil3.o decoder.o timer.o exp_decode65.o fqso_first.o\ - twkfreq.o symspec2.o shell.o sync65.o peakup.o slope.o xcor.o\ - fillcom.o chkss2.o zplot9.o flat1.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat4.o determ.o baddata.o subtract65.o - -libjt9.a: $(OBJS1) - $(AR) libjt9.a $(OBJS1) - $(RANLIB) libjt9.a - -OBJS7 = jt65.o -jt65: $(OBJS7) libjt9.a libftrsd.a - $(FC) -o jt65 $(OBJS7) -L. -L/opt/local/lib -L./ftrsd -ljt9 -lftrsd -lfftw3f_threads -lfftw3f - $(CP) jt65 $(EXE_DIR) - -OBJS2 = jt65sim.o wavhdr.o -jt65sim: $(OBJS2) libjt9.a - $(FC) -o jt65sim $(OBJS2) -L. -L/opt/local/lib -ljt9 -lfftw3f - $(CP) jt65sim $(EXE_DIR) - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - -.PHONY : clean - -clean: - $(RM) *.o libjt9.a jt65 diff --git a/lib/Makefile.jt9w b/lib/Makefile.jt9w deleted file mode 100644 index db7bd54..0000000 --- a/lib/Makefile.jt9w +++ /dev/null @@ -1,58 +0,0 @@ - -# Set paths -EXE_DIR = ..\\..\\wsjtx_install -QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32 -FFTW3_DIR = .. - -INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include - -# Compilers -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -RANLIB = ranlib -MKDIR = mkdir -p -CP = cp -RM = rm -f - -FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion -CFLAGS = -O2 -I. - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: jt9w - -OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \ - softsym9w.o four2a.o interleave9.o jt9fano.o fano232.o packjt.o \ - deg2grid.o grid2deg.o fmtmsg.o db.o decode9w.o - -jt9w: $(OBJS1) - $(FC) -o jt9w $(OBJS1) -lfftw3f - -OBJS2 = t1.o four2a.o db.o -t1: $(OBJS2) - $(FC) -o t1 $(OBJS2) -lfftw3f - -OBJS3 = t2.o four2a.o db.o -t2: $(OBJS3) - $(FC) -o t2 $(OBJS3) -lfftw3f - -OBJS4 = t3.o four2a.o db.o -t3: $(OBJS4) - $(FC) -o t3 $(OBJS4) -lfftw3f - -.PHONY : clean - -clean: - $(RM) *.o JTMSKcode JTMSKcode.exe diff --git a/lib/Makefile.jt9w_Win b/lib/Makefile.jt9w_Win deleted file mode 100644 index 28dbe30..0000000 --- a/lib/Makefile.jt9w_Win +++ /dev/null @@ -1,58 +0,0 @@ - -# Set paths -EXE_DIR = ..\\..\\wsjtx_install -QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32 -FFTW3_DIR = .. - -INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include - -# Compilers -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -RANLIB = ranlib -MKDIR = mkdir -p -CP = cp -RM = rm -f - -FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion -CFLAGS = -O2 -I. - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: jt9w - -OBJS1 = jt9w.o smo.o sync9w.o pctile.o shell.o lorentzian.o fchisq0.o \ - softsym9w.o four2a.o interleave9.o jt9fano.o fano232.o packjt.o \ - deg2grid.o grid2deg.o fmtmsg.o db.o decode9w.o - -jt9w: $(OBJS1) - $(FC) -o jt9w $(OBJS1) -lfftw3f - -OBJS2 = t1.o four2a.o db.o -t1: $(OBJS2) - $(FC) -o t1 $(OBJS2) -lfftw3f - -OBJS3 = t2.o four2a.o db.o -t2: $(OBJS3) - $(FC) -o t2 $(OBJS3) -lfftw3f - -OBJS4 = t3.o -t3: $(OBJS4) - $(FC) -o t3 $(OBJS4) -L. -ljt9 C:\JTSDK\fftw3f\libfftw3f-3.dll - -.PHONY : clean - -clean: - $(RM) *.o JTMSKcode JTMSKcode.exe diff --git a/lib/Makefile.jtsdk b/lib/Makefile.jtsdk deleted file mode 100644 index ce113a5..0000000 --- a/lib/Makefile.jtsdk +++ /dev/null @@ -1,137 +0,0 @@ -# Makefile for MinGW on Windows -# Windows re-direct: -# C> make > junk1 2>&1 - -# Set paths -EXE_DIR = ../../wsjtx_install - -INCPATH = -I'C:/JTSDK/Qt5/5.2.1/mingw48_32/include/QtCore' \ - -I'C:/JTSDK/Qt5/5.2.1/mingw48_32/include/' - -# Compilers -CC = c:/JTSDK/Qt5/Tools/mingw48_32/bin/gcc -FC = c:/JTSDK/Qt5/Tools/mingw48_32/bin/gfortran -CXX = c:/JTSDK/Qt5/Tools/mingw48_32/bin/g++ - -FFLAGS = -O3 -Wall -Wno-conversion -fno-second-underscore -DWIN32 -CFLAGS = -I. -DWIN32 - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a libastro.a jt9.exe jt9code.exe jt65code.exe jt9sim.exe - -OBJS1 = pctile.o graycode.o sort.o chkmsg.o \ - unpackmsg.o igray.o unpackcall.o unpackgrid.o \ - grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \ - packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \ - nchar.o four2a.o grid2deg.o pfxdump.o wisdom.o \ - symspec.o analytic.o db.o genjt9.o flat1.o smo.o \ - packbits.o unpackbits.o encode232.o interleave9.o \ - entail.o fano232.o gran.o sync9.o jt9fano.o \ - fil3.o decoder.o grid2n.o n2grid.o timer.o \ - softsym.o getlags.o afc9.o fchisq.o twkfreq.o downsam9.o \ - peakdt9.o symspec2.o stdmsg.o morse.o azdist.o geodist.o \ - fillcom.o chkss2.o zplot9.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat4.o polfit.o determ.o baddata.o prog_args.o \ - options.o fmtmsg.o decjt9.o - -libjt9.a: $(OBJS1) - ar cr libjt9.a $(OBJS1) - ranlib libjt9.a - -OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o ipcomm.o sec_midn.o usleep.o -LIBS2 = -L'C:/JTSDK/Qt5/5.2.1/mingw48_32/lib' -lQt5Core -jt9.exe: $(OBJS2) libjt9.a - $(CXX) -o jt9.exe -static $(OBJS2) $(LIBS2) libjt9.a \ - C:\JTSDK\fftw3f\libfftw3f-3.dll -lgfortran -# mkdir -p $(EXE_DIR) - cp jt9.exe $(EXE_DIR) - -OBJS3 = jt9sim.o -jt9sim.exe: $(OBJS3) libjt9.a - $(FC) -o jt9sim.exe $(OBJS3) libjt9.a - -OBJS4 = jt9code.o -jt9code.exe: $(OBJS4) libjt9.a - $(FC) -o jt9code.exe $(OBJS4) libjt9.a - cp jt9code.exe $(EXE_DIR) - -OBJS5 = jt65.o -jt65.exe: $(OBJS5) libjt9.a - $(FC) -o jt65.exe $(OBJS5) libjt9.a ../libfftw3f_win.a - -OBJS7 = astrosub.o astro0.o astro.o tm2.o grid2deg.o sun.o moondop.o \ - coord.o dot.o moon2.o tmoonsub.o toxyz.o geocentric.o \ - dcoord.o - -libastro.a: $(OBJS7) - ar cr libastro.a $(OBJS7) - ranlib libastro.a - -OBJS6 = jt65code.o -jt65code.exe: $(OBJS6) libjt9.a - $(FC) -o jt65code.exe $(OBJS6) libjt9.a - cp jt65code.exe $(EXE_DIR) - -sync9.o: sync9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c sync9.f90 - -spec9.o: spec9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c spec9.f90 - -peakdt9.o: peakdt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c peakdt9.f90 - -jt9sim.o: jt9sim.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c jt9sim.f90 - -genjt9.o: genjt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c genjt9.f90 - -redsync.o: redsync.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c redsync.f90 - -unpackmsg.o: unpackmsg.f90 - $(FC) -c -O0 -fbounds-check -Wall -Wno-precision-loss unpackmsg.f90 - -ipcomm.o: ipcomm.cpp - $(CXX) -c $(INCPATH) ipcomm.cpp - -sec_midn.o: sec_midn.f90 - $(FC) -c -fno-second-underscore sec_midn.f90 - -#rig_control.o: rig_control.c -# $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include rig_control.c - -tstrig.o: tstrig.c - $(CC) -c -Wall -I..\..\..\hamlib-1.2.15.3\include tstrig.c - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - - -.PHONY : clean - -clean: - rm -f *.o libjt9.a wsjtx.exe jt9sim.exe jt9.exe jt65.exe diff --git a/lib/Makefile.linux b/lib/Makefile.linux deleted file mode 100644 index 14bc077..0000000 --- a/lib/Makefile.linux +++ /dev/null @@ -1,115 +0,0 @@ -# Set paths -EXE_DIR = ../../wsjtx_install -QT_DIR = /usr/include/qt5 -INCPATH = -I${QT_DIR} -I${QT_DIR}/QtCore - -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -MKDIR = mkdir -p -CP = cp -RANLIB = ranlib -RM = rm -f - -FFLAGS = -O3 -funroll-loops -Wall -Wno-conversion -fno-second-underscore -DUNIX -CFLAGS = -I. -fbounds-check -fPIE - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libjt9.a jt9sim jt9 jt9code jt65code - -OBJS1 = astrosub.o astro0.o astro.o tm2.o sun.o moondop.o coord.o tmoonsub.o \ - fmtmsg.o geocentric.o moon2.o toxyz.o dot.o dcoord.o \ - prog_args.o options.o pctile.o graycode.o sort.o chkmsg.o \ - unpackmsg.o igray.o unpackcall.o unpackgrid.o \ - grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \ - packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \ - nchar.o four2a.o grid2deg.o pfxdump.o wisdom.o \ - symspec.o analytic.o db.o genjt9.o jt9fano.o \ - packbits.o unpackbits.o encode232.o interleave9.o \ - entail.o fano232.o gran.o sync9.o decjt9.o \ - fil3.o decoder.o grid2n.o n2grid.o timer.o \ - softsym.o peakdt9.o getlags.o afc9.o fchisq.o \ - twkfreq.o downsam9.o symspec2.o ipcomm.o sleep_msec.o \ - stdmsg.o sec_midn.o usleep.o azdist.o geodist.o morse.o \ - fillcom.o chkss2.o zplot9.o flat1.o flat2.o \ - jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ - filbig.o fil6521.o afc65b.o decode65b.o setup65.o \ - extract.o fchisq65.o demod64a.o chkhist.o interleave63.o ccf2.o \ - move.o indexx.o graycode65.o twkfreq65.o smo.o smo121.o \ - wrapkarn.o init_rs.o encode_rs.o decode_rs.o gen65.o fil4.o \ - flat4.o polfit.o determ.o baddata.o - -libjt9.a: $(OBJS1) - $(AR) libjt9.a $(OBJS1) - $(RANLIB) libjt9.a - -OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o - -jt9: $(OBJS2) libjt9.a - $(CXX) -o jt9 $(OBJS2) -L. -ljt9 -lQt5Core -lfftw3f_threads -lfftw3f `$(FC) -print-file-name=libgfortran.so` - $(MKDIR) -p $(EXE_DIR) - $(CP) jt9 $(EXE_DIR) - -OBJS3 = jt9sim.o -jt9sim: $(OBJS3) libjt9.a - $(FC) -o jt9sim $(OBJS3) -L. -ljt9 - -OBJS4 = jt9code.o -jt9code: $(OBJS4) libjt9.a - $(FC) -o jt9code $(OBJS4) -L. -ljt9 - $(CP) jt9code $(EXE_DIR) - -OBJS6 = jt65code.o -jt65code: $(OBJS6) libjt9.a - $(FC) -o jt65code $(OBJS6) libjt9.a - $(CP) jt65code $(EXE_DIR) - -sync9.o: sync9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c sync9.f90 - -peakdf9.o: peakdf9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c peakdf9.f90 - -peakdt9.o: peakdt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c peakdt9.f90 - -jt9sim.o: jt9sim.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c jt9sim.f90 - -genjt9.o: genjt9.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c genjt9.f90 - -redsync.o: redsync.f90 jt9sync.f90 - $(FC) $(FFLAGS) -c redsync.f90 - -ipcomm.o: ipcomm.cpp - $(CXX) -c $(INCPATH) -fPIE ipcomm.cpp - -sec_midn.o: sec_midn.f90 - $(FC) -c -fno-second-underscore sec_midn.f90 - -init_rs.o: init_rs.c - $(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c - -encode_rs.o: encode_rs.c - $(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c - -decode_rs.o: decode_rs.c - $(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c - -.PHONY : clean - -clean: - $(RM) *.o libjt9.a wsjtx jt9sim jt9 jt9code diff --git a/lib/Makefile.msk b/lib/Makefile.msk deleted file mode 100644 index 333b36c..0000000 --- a/lib/Makefile.msk +++ /dev/null @@ -1,71 +0,0 @@ - -# Set paths -EXE_DIR = ..\\..\\wsjtx_install -QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32 -FFTW3_DIR = .. - -INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include - -# Compilers -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -RANLIB = ranlib -MKDIR = mkdir -p -CP = cp -RM = rm -f - -FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion -CFLAGS = -O2 -I. - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -#all: jt9code JTMSKcode -all: jtmsk JTMSKcode - -OBJS4 = jt9code.o packjt.o fmtmsg.o gen9.o deg2grid.o grid2deg.o \ - entail.o encode232.o interleave9.o graycode.o igray.o -jt9code: $(OBJS4) - $(FC) -o jt9code $(OBJS4) - -OBJS5 = JTMSKcode.o packjt.o fmtmsg.o genmsk.o deg2grid.o grid2deg.o \ - entail.o nhash.o tab.o vit213.o -JTMSKcode: $(OBJS5) - $(FC) -o JTMSKcode $(OBJS5) - -OBJS6 = jtmsk.o jtmsk.o analytic.o four2a.o db.o mskdf.o pctile.o \ - sort.o tweak1.o syncmsk.o genmsk.o packjt.o fmtmsg.o indexx.o \ - deg2grid.o grid2deg.o entail.o nhash.o tab.o vit213.o -jtmsk: $(OBJS6) - $(FC) -o jtmsk $(OBJS6) -lfftw3f - -OBJS1 = t1.o four2a.o db.o -t1: $(OBJS1) - $(FC) -o t1 $(OBJS1) -lfftw3f - -OBJS2 = t2.o four2a.o db.o -t2: $(OBJS2) - $(FC) -o t2 $(OBJS2) -lfftw3f - -OBJS6 = t6.o four2a.o db.o -t6: $(OBJS6) - $(FC) -o t6 $(OBJS6) -lfftw3f - -nhash.o: wsprd/nhash.h wsprd/nhash.c - $(CC) -c -O2 wsprd/nhash.c - -.PHONY : clean - -clean: - $(RM) *.o JTMSKcode JTMSKcode.exe diff --git a/lib/Makefile.mskWin b/lib/Makefile.mskWin deleted file mode 100644 index 9d5e6e6..0000000 --- a/lib/Makefile.mskWin +++ /dev/null @@ -1,75 +0,0 @@ - -# Set paths -EXE_DIR = ..\\..\\wsjtx_install -QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32 -FFTW3_DIR = .. - -INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include - -# Compilers -CC = gcc -CXX = g++ -FC = gfortran -AR = ar cr -RANLIB = ranlib -MKDIR = mkdir -p -CP = cp -RM = rm -f - -FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion -CFLAGS = -O2 -I. - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -#all: jt9code JTMSKcode.exe -all: jtmsk.exe JTMSKsim.exe JTMSKcode.exe fixwav.exe - -OBJS3 = JTMSKsim.o wavhdr.o gran.o four2a.o db.o -JTMSKsim.exe: $(OBJS3) - $(FC) -o JTMSKsim.exe $(OBJS3) C:\JTSDK\fftw3f\libfftw3f-3.dll - -OBJS4 = jt9code.o packjt.o fmtmsg.o gen9.o deg2grid.o grid2deg.o \ - entail.o encode232.o interleave9.o graycode.o igray.o -jt9code: $(OBJS4) - $(FC) -o jt9code $(OBJS4) - -OBJS5 = JTMSKcode.o packjt.o fmtmsg.o genmsk.o deg2grid.o grid2deg.o \ - entail.o tab.o vit213.o hashing.o nhash.o -JTMSKcode.exe: $(OBJS5) - $(FC) -o JTMSKcode.exe $(OBJS5) - -OBJS6 = jtmsk.o analytic.o four2a.o db.o pctile.o \ - shell.o tweak1.o syncmsk.o genmsk.o packjt.o fmtmsg.o indexx.o \ - deg2grid.o grid2deg.o entail.o hashing.o nhash.o tab.o vit213.o \ - mskdt.o rectify_msk.o timer.o jtmsk_decode.o genmsk_short.o \ - jtmsk_short.o golay24_table.o hash.o - -jtmsk.exe: $(OBJS6) - $(FC) -o jtmsk.exe $(OBJS6) C:\JTSDK\fftw3f\libfftw3f-3.dll - -OBJS1 = fixwav.o wavhdr.o -fixwav.exe: $(OBJS1) - $(FC) -o fixwav.exe $(OBJS1) - -OBJS2 = t2.o four2a.o db.o -t2: $(OBJS2) - $(FC) -o t2 $(OBJS2) C:\JTSDK\fftw3f\libfftw3f-3.dll - -OBJS6 = t6.o four2a.o db.o -t6: $(OBJS6) - $(FC) -o t6 $(OBJS6) C:\JTSDK\fftw3f\libfftw3f-3.dll - -.PHONY : clean - -clean: - $(RM) *.o JTMSKcode JTMSKcode.exe diff --git a/lib/allsim.f90 b/lib/allsim.f90 deleted file mode 100644 index 2d948b6..0000000 --- a/lib/allsim.f90 +++ /dev/null @@ -1,78 +0,0 @@ -program allsim - -! Generate simulated data for WSJT-X slow modes: JT4, JT9, JT65, QRA64, -! and WSPR. Also unmodulated carrier and 20 WPM CW. - - - use wavhdr - use packjt - parameter (NMAX=60*12000) - type(hdr) h - integer*2 iwave(NMAX) !Generated waveform (no noise) - integer itone(206) !Channel symbols (values 0-8) - integer icw(250) - integer*1 msgbits(87) - logical*1 bcontest - real*4 dat(NMAX) - character message*22,msgsent*22,arg*8,mygrid*6 - - nargs=iargc() - if(nargs.ne.1) then - print*,'Usage: allsim ' - go to 999 - endif - - call getarg(1,arg) - read(arg,*) snrdb !S/N in dB (2500 hz reference BW) - - message='CQ KA2ABC FN20' - mygrid='FN20 ' - bcontest=.false. - rmsdb=25. - rms=10.0**(0.05*rmsdb) - sig=10.0**(0.05*snrdb) - npts=NMAX - - call init_random_seed() !Seed Fortran RANDOM_NUMBER generator - call sgran() !Seed C rand generator (used in gran) - - h=default_header(12000,npts) - open(10,file='000000_0000.wav',access='stream',status='unknown') - do i=1,npts !Generate gaussian noise - dat(i)=gran() - enddo - - itone=0 - call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier - - call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw) -! print*,ncw -! write(*,3001) icw(1:ncw) -!3001 format(50i1) - call addcw(icw,ncw,600,sig,dat) !CW - - call genwspr(message,msgsent,itone) - call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data) - - call gen9(message,0,msgsent,itone,itype) - call addit(itone,12000,85,6912,1000,sig,dat) !JT9 - - call gen4(message,0,msgsent,itone,itype) - call addit(itone,11025,206,2520,1200,sig,dat) !JT4 - - i3bit=0 ! ### TEMPORARY ??? ### - call genft8(message,mygrid,bcontest,i3bit,msgsent,msgbits,itone) - call addit(itone,12000,79,1920,1400,sig,dat) !FT8 - - call genqra64(message,0,msgsent,itone,itype) - call addit(itone,12000,84,6912,1600,sig,dat) !QRA64 - - call gen65(message,0,msgsent,itone,itype) - call addit(itone,11025,126,4096,1800,sig,dat) !JT65 - - iwave(1:npts)=nint(rms*dat(1:npts)) - - write(10) h,iwave(1:npts) - close(10) - -999 end program allsim diff --git a/lib/chkfft.txt b/lib/chkfft.txt deleted file mode 100644 index 970d7a7..0000000 --- a/lib/chkfft.txt +++ /dev/null @@ -1,124 +0,0 @@ - Brief Description of chkfft, by K1JT - ------------------------------------ - -Discrete Fourier transforms (DFTs) are found at the root of most -digital signal processing tasks. In WSJT and its sister programs the -transforms are done using the FFTW library, and subroutine four2 -provides a convenient interface to the library. Program chkfft is a -command-line utility offering a convenient way to test FFT execution -times under a variety of circumstances. - -To compile chkfft in Linux: - -$ gfortran -o chkfft chkfft.f90 four2a.f90 f77_wisdom.f90 gran.c -lfftw3f - -To compile chkfft in Windows (you may need to customize the hard-coded -path shown here for libfftw3f-3.dll): - -> gfortran -o chkfft chkfft.f90 four2a.f90 f77_wisdom.f90 gran.c \ - /JTSDK-QT/appsupport/runtime/libfftw3f-3.dll - -To see a brief usage message, type chkfft at the command prompt: - -$ chkfft - Usage: chkfft nr nw nc np - nfft: length of FFT - nfft=0: do lengths 2^n, n=2^4 to 2^23 - infile: name of file with nfft values, one per line - nr: 0/1 to not read (or read) wisdom - nw: 0/1 to not write (or write) wisdom - nc: 0/1 for real or complex data - np: 0-4 patience for finding best algorithm - -As an example, to measure the speed of a complex DFT of length 131072: - -####################################################################### -$ chkfft 131072 0 1 1 2 - -nfft: 131072 nr: 0 nw 1 nc: 1 np: 2 - - NFFT Time rms MHz MFlops iters tplan -------------------------------------------------------------- - 131072 0.0021948 0.00000032 59.72 5076.1 231 2.9 -####################################################################### - -Program output shows that on the test machine the average time for one -forward (or inverse) transform of length N=131072 is about 2.2 ms, -corresponding to slightly over 5 GFlops computing speed. The planning -time in FFTW was 2.9 s. - -Running the command again with parameter nr=1 will use the -"wisdom" already accumulated for complex N=131072 FFTs. The execution -speed will be essentially the same, but no planning time is required: - -####################################################################### -$ chkfft 131072 1 1 1 2 - -nfft: 131072 nr: 1 nw 1 nc: 1 np: 2 - - NFFT Time rms MHz MFlops iters tplan -------------------------------------------------------------- - 131072 0.0021575 0.00000032 60.75 5164.0 235 0.0 -####################################################################### - -Optimized algorithms can compute DFTs much faster for lengths that are -the product of small integers. Length N=131072 = 2^17 is a good -example, and FFTs should be very efficient. For comparison, look at -the speed for N=131071, a prime number. The average time is now about -7 times larger: - -####################################################################### -C:\JTSDK-QT\src\wsjtx\lib>chkfft 131071 1 1 1 2 - -nfft: 131071 nr: 1 nw 1 nc: 1 np: 2 - - NFFT Time rms MHz MFlops iters tplan -------------------------------------------------------------- - 131071 0.0153637 0.00000065 8.53 725.2 33 5.6 -####################################################################### - -Here's an example that measures execution times for all integral -power-of-2 lengths from 2^4 to 2^23: - -####################################################################### -$ chkfft 0 1 1 1 2 - -nfft: 0 nr: 1 nw 1 nc: 1 np: 2 - - n N=2^n Time rms MHz MFlops iters tplan ---------------------------------------------------------------- - 4 16 0.0000003 0.00000014 58.61 1172.2 1000000 0.0 - 5 32 0.0000004 0.00000016 89.19 2229.6 1000000 0.0 - 6 64 0.0000006 0.00000016 109.44 3283.2 866975 0.0 - 7 128 0.0000009 0.00000021 135.92 4757.1 538369 0.0 - 8 256 0.0000016 0.00000020 158.40 6335.8 313701 0.0 - 9 512 0.0000032 0.00000021 162.53 7313.8 160943 0.1 -10 1024 0.0000067 0.00000023 152.53 7626.5 75521 0.1 -11 2048 0.0000136 0.00000025 150.42 8273.3 37239 0.2 -12 4096 0.0000316 0.00000027 129.75 7784.8 16060 0.3 -13 8192 0.0000720 0.00000026 113.75 7393.8 7040 0.5 -14 16384 0.0001620 0.00000028 101.11 7078.0 3129 0.9 -15 32768 0.0003227 0.00000030 101.53 7615.1 1571 1.7 -16 65536 0.0010020 0.00000030 65.41 5232.5 506 4.1 -17 131072 0.0021575 0.00000032 60.75 5164.0 235 0.0 -18 262144 0.0053937 0.00000032 48.60 4374.2 94 3.6 -19 524288 0.0190668 0.00000034 27.50 2612.2 27 6.8 -20 1048576 0.0468001 0.00000035 22.41 2240.5 11 2.4 -21 2097152 0.0936012 0.00000036 22.41 2352.5 6 31.6 -22 4194304 0.1949997 0.00000037 21.51 2366.0 3 9.8 -23 8388608 0.4212036 0.00000038 19.92 2290.3 2 112.9 -####################################################################### - -Test data for all transforms is gaussian random noise of zero mean and -standard deviation 1. Tabulated values of "rms" are the -root-mean-square differences between the original data and the -back-transfmred data. - -File nfft.dat contains all numbers between 2^3 and 2^23 with no factor -greater than 7, followed by their factors. These numbers are good -choices for FFT lengths. File all_fft.out gives the result on one -machine of running the command - -$ chkfft nfft.dat 0 1 1 2 - -Take note: this task may take as much as 24 hours, or even more! diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 79d8c9d..204fa1d 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -3,43 +3,42 @@ subroutine multimode_decoder(ss,id2,params,nfsample) !$ use omp_lib use prog_args use timer_module, only: timer - use jt4_decode - use jt65_decode - use jt9_decode use ft8_decode + use js8b_decode + use js8c_decode + use js8d_decode include 'jt9com.f90' include 'timer_common.inc' - type, extends(jt4_decoder) :: counting_jt4_decoder - integer :: decoded - end type counting_jt4_decoder - - type, extends(jt65_decoder) :: counting_jt65_decoder - integer :: decoded - end type counting_jt65_decoder - - type, extends(jt9_decoder) :: counting_jt9_decoder - integer :: decoded - end type counting_jt9_decoder - type, extends(ft8_decoder) :: counting_ft8_decoder integer :: decoded end type counting_ft8_decoder + type, extends(js8b_decoder) :: counting_js8b_decoder + integer :: decoded + end type counting_js8b_decoder + + type, extends(js8c_decoder) :: counting_js8c_decoder + integer :: decoded + end type counting_js8c_decoder + + type, extends(js8d_decoder) :: counting_js8d_decoder + integer :: decoded + end type counting_js8d_decoder + real ss(184,NSMAX) - logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat,ex + logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat integer*2 id2(NTMAX*12000) type(params_block) :: params - real*4 dd(NTMAX*12000) character(len=20) :: datetime character(len=12) :: mycall, hiscall character(len=6) :: mygrid, hisgrid save - type(counting_jt4_decoder) :: my_jt4 - type(counting_jt65_decoder) :: my_jt65 - type(counting_jt9_decoder) :: my_jt9 - type(counting_ft8_decoder) :: my_ft8 + type(counting_ft8_decoder) :: my_js8a + type(counting_js8b_decoder) :: my_js8b + type(counting_js8c_decoder) :: my_js8c + type(counting_js8d_decoder) :: my_js8d !cast C character arrays to Fortran character strings datetime=transfer(params%datetime, datetime) @@ -49,10 +48,10 @@ subroutine multimode_decoder(ss,id2,params,nfsample) hisgrid=transfer(params%hisgrid,hisgrid) ! initialize decode counts - my_jt4%decoded = 0 - my_jt65%decoded = 0 - my_jt9%decoded = 0 - my_ft8%decoded = 0 + my_js8a%decoded = 0 + my_js8b%decoded = 0 + my_js8c%decoded = 0 + my_js8d%decoded = 0 single_decode=iand(params%nexp_decode,32).ne.0 bVHF=iand(params%nexp_decode,64).ne.0 @@ -79,20 +78,55 @@ subroutine multimode_decoder(ss,id2,params,nfsample) endif endif - if(params%nmode.eq.8) then -! We're in FT8 mode - call timer('decft8 ',0) + if(params%nmode.eq.8 .and. params%nsubmode.eq.3) then +! We're in JS8 mode C + call timer('decjs8d ',0) newdat=params%newdat - call my_ft8%decode(ft8_decoded,id2,params%nQSOProgress,params%nfqso, & + call my_js8d%decode(js8d_decoded,id2,params%nQSOProgress,params%nfqso, & params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nexp_decode,params%ndepth,logical(params%nagain), & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & mycall,mygrid,hiscall,hisgrid) - call timer('decft8 ',1) - if(nfox.gt.0) then - n30min=minval(n30fox(1:nfox)) - n30max=maxval(n30fox(1:nfox)) - endif + call timer('decjs8d ',1) + go to 800 + endif + + if(params%nmode.eq.8 .and. params%nsubmode.eq.2) then +! We're in JS8 mode C + call timer('decjs8c ',0) + newdat=params%newdat + call my_js8c%decode(js8c_decoded,id2,params%nQSOProgress,params%nfqso, & + params%nftx,newdat,params%nutc,params%nfa,params%nfb, & + params%nexp_decode,params%ndepth,logical(params%nagain), & + logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & + mycall,mygrid,hiscall,hisgrid) + call timer('decjs8c ',1) + go to 800 + endif + + if(params%nmode.eq.8 .and. params%nsubmode.eq.1) then +! We're in JS8 mode B + call timer('decjs8b ',0) + newdat=params%newdat + call my_js8b%decode(js8b_decoded,id2,params%nQSOProgress,params%nfqso, & + params%nftx,newdat,params%nutc,params%nfa,params%nfb, & + params%nexp_decode,params%ndepth,logical(params%nagain), & + logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & + mycall,mygrid,hiscall,hisgrid) + call timer('decjs8b ',1) + go to 800 + endif + + if(params%nmode.eq.8) then +! We're in JS8 mode A + call timer('decjs8a ',0) + newdat=params%newdat + call my_js8a%decode(js8a_decoded,id2,params%nQSOProgress,params%nfqso, & + params%nftx,newdat,params%nutc,params%nfa,params%nfb, & + params%nexp_decode,params%ndepth,logical(params%nagain), & + logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & + mycall,mygrid,hiscall,hisgrid) + call timer('decjs8a ',1) go to 800 endif @@ -122,27 +156,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) ! id2(1:nz)=0 ! temporarily disabled as it can breaak the JT9 decoder, maybe others endif - if(params%nmode.eq.4 .or. params%nmode.eq.65) open(14,file=trim(temp_dir)// & - '/avemsg.txt',status='unknown') - if(params%nmode.eq.164) open(17,file=trim(temp_dir)//'/red.dat', & - status='unknown') - - if(params%nmode.eq.4) then - jz=52*nfsample - if(params%newdat) then - if(nfsample.eq.12000) call wav11(id2,jz,dd) - if(nfsample.eq.11025) dd(1:jz)=id2(1:jz) - endif - call my_jt4%decode(jt4_decoded,dd,jz,params%nutc,params%nfqso, & - params%ntol,params%emedelay,params%dttol,logical(params%nagain), & - params%ndepth,logical(params%nclearave),params%minsync, & - params%minw,params%nsubmode,mycall,hiscall, & - hisgrid,params%nlist,params%listutc,jt4_average) - go to 800 - endif - npts65=52*12000 - if(params%nmode.eq.164) npts65=54*12000 if(baddata(id2,npts65)) then nsynced=0 ndecoded=0 @@ -154,268 +168,25 @@ subroutine multimode_decoder(ss,id2,params,nfsample) newdat9=params%newdat !$call omp_set_dynamic(.true.) -!$omp parallel sections num_threads(2) copyin(/timer_private/) shared(ndecoded) if(.true.) !iif() needed on Mac -!$omp section - if(params%nmode.eq.65 .or. params%nmode.eq.164 .or. & - (params%nmode.eq.(65+9) .and. params%ntxmode.eq.65)) then -! We're in JT65 or QRA64 mode, or should do JT65 first - - if(newdat65) dd(1:npts65)=id2(1:npts65) - nf1=params%nfa - nf2=params%nfb - call timer('jt65a ',0) - call my_jt65%decode(jt65_decoded,dd,npts65,newdat65,params%nutc, & - nf1,nf2,params%nfqso,ntol65,params%nsubmode,params%minsync, & - logical(params%nagain),params%n2pass,logical(params%nrobust), & - ntrials,params%naggressive,params%ndepth,params%emedelay, & - logical(params%nclearave),mycall,hiscall, & - hisgrid,params%nexp_decode,params%nQSOProgress, & - logical(params%ljt65apon)) - call timer('jt65a ',1) - - else if(params%nmode.eq.9 .or. (params%nmode.eq.(65+9) .and. params%ntxmode.eq.9)) then -! We're in JT9 mode, or should do JT9 first - call timer('decjt9 ',0) - call my_jt9%decode(jt9_decoded,ss,id2,params%nfqso, & - newdat9,params%npts8,params%nfa,params%nfsplit,params%nfb, & - params%ntol,params%nzhsym,logical(params%nagain),params%ndepth, & - params%nmode,params%nsubmode,params%nexp_decode) - call timer('decjt9 ',1) - endif - -!$omp section - if(params%nmode.eq.(65+9)) then !Do the other mode (we're in dual mode) - if (params%ntxmode.eq.9) then - if(newdat65) dd(1:npts65)=id2(1:npts65) - nf1=params%nfa - nf2=params%nfb - call timer('jt65a ',0) - call my_jt65%decode(jt65_decoded,dd,npts65,newdat65,params%nutc, & - nf1,nf2,params%nfqso,ntol65,params%nsubmode,params%minsync, & - logical(params%nagain),params%n2pass,logical(params%nrobust), & - ntrials,params%naggressive,params%ndepth,params%emedelay, & - logical(params%nclearave),mycall,hiscall, & - hisgrid,params%nexp_decode,params%nQSOProgress, & - logical(params%ljt65apon)) - call timer('jt65a ',1) - else - call timer('decjt9 ',0) - call my_jt9%decode(jt9_decoded,ss,id2,params%nfqso, & - newdat9,params%npts8,params%nfa,params%nfsplit,params%nfb, & - params%ntol,params%nzhsym,logical(params%nagain), & - params%ndepth,params%nmode,params%nsubmode,params%nexp_decode) - call timer('decjt9 ',1) - end if - endif - -!$omp end parallel sections - -! JT65 is not yet producing info for nsynced, ndecoded. -800 ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded + my_ft8%decoded +800 ndecoded = my_js8a%decoded + my_js8b%decoded + my_js8c%decoded write(*,1010) nsynced,ndecoded 1010 format('',2i4) call flush(6) - if(params%nmode.eq.4 .or. params%nmode.eq.65) close(14) - return contains - subroutine jt4_decoded(this,snr,dt,freq,have_sync,sync,is_deep, & - decoded0,qual,ich,is_average,ave) - implicit none - class(jt4_decoder), intent(inout) :: this - integer, intent(in) :: snr - real, intent(in) :: dt - integer, intent(in) :: freq - logical, intent(in) :: have_sync - logical, intent(in) :: is_deep - character(len=1), intent(in) :: sync - character(len=22), intent(in) :: decoded0 - real, intent(in) :: qual - integer, intent(in) :: ich - logical, intent(in) :: is_average - integer, intent(in) :: ave - - character*22 decoded - character*3 cflags - - if(ich.eq.-99) stop !Silence compiler warning - if (have_sync) then - decoded=decoded0 - cflags=' ' - if(decoded.ne.' ') cflags='f ' - if(is_deep) then - cflags(1:2)='d1' - write(cflags(3:3),'(i1)') min(int(qual),9) - if(qual.ge.10.0) cflags(3:3)='*' - if(qual.lt.3.0) decoded(22:22)='?' - endif - if(is_average) then - write(cflags(2:2),'(i1)') min(ave,9) - if(ave.ge.10) cflags(2:2)='*' - endif - write(*,1000) params%nutc,snr,dt,freq,sync,decoded,cflags -1000 format(i4.4,i4,f5.1,i5,1x,'$',a1,1x,a22,1x,a3) - else - write(*,1000) params%nutc,snr,dt,freq - end if - - select type(this) - type is (counting_jt4_decoder) - this%decoded = this%decoded + 1 - end select - end subroutine jt4_decoded - - subroutine jt4_average (this, used, utc, sync, dt, freq, flip) - implicit none - class(jt4_decoder), intent(inout) :: this - logical, intent(in) :: used - integer, intent(in) :: utc - real, intent(in) :: sync - real, intent(in) :: dt - integer, intent(in) :: freq - logical, intent(in) :: flip - character(len=1) :: cused, csync - - cused = '.' - csync = '*' - if (used) cused = '$' - if (flip) csync = '$' - write(14,1000) cused,utc,sync,dt,freq,csync -1000 format(a1,i5.4,f6.1,f6.2,i6,1x,a1) - end subroutine jt4_average - - subroutine jt65_decoded(this,sync,snr,dt,freq,drift,nflip,width, & - decoded0,ft,qual,nsmo,nsum,minsync) - - use jt65_decode + subroutine js8_decoded (sync,snr,dt,freq,decoded,nap,qual) implicit none - class(jt65_decoder), intent(inout) :: this - real, intent(in) :: sync - integer, intent(in) :: snr - real, intent(in) :: dt - integer, intent(in) :: freq - integer, intent(in) :: drift - integer, intent(in) :: nflip - real, intent(in) :: width - character(len=22), intent(in) :: decoded0 - integer, intent(in) :: ft - integer, intent(in) :: qual - integer, intent(in) :: nsmo - integer, intent(in) :: nsum - integer, intent(in) :: minsync - - integer i,nap,nft - logical is_deep,is_average - character decoded*22,csync*2,cflags*3 - - if(width.eq.-9999.0) stop !Silence compiler warning -!$omp critical(decode_results) - decoded=decoded0 - cflags=' ' - is_deep=ft.eq.2 - - if(ft.ge.80) then !QRA64 mode - nft=ft-100 - csync=': ' - if(sync-3.4.ge.float(minsync) .or. nft.ge.0) csync=':*' - if(nft.lt.0) then - write(*,1009) params%nutc,snr,dt,freq,csync,decoded - else - write(*,1009) params%nutc,snr,dt,freq,csync,decoded,nft -1009 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,i2) - endif - go to 100 - endif - - if(ft.eq.0 .and. minsync.ge.0 .and. int(sync).lt.minsync) then - write(*,1010) params%nutc,snr,dt,freq - else - is_average=nsum.ge.2 - if(bVHF .and. ft.gt.0) then - cflags='f ' - if(is_deep) then - cflags(1:2)='d1' - write(cflags(3:3),'(i1)') min(qual,9) - if(qual.ge.10) cflags(3:3)='*' - if(qual.lt.3) decoded(22:22)='?' - endif - if(is_average) then - write(cflags(2:2),'(i1)') min(nsum,9) - if(nsum.ge.10) cflags(2:2)='*' - endif - nap=ishft(ft,-2) - if(nap.ne.0) then - write(cflags(1:3),'(a1,i1)') 'a',nap - endif - endif - csync='# ' - i=0 - if(bVHF .and. nflip.ne.0 .and. & - sync.ge.max(0.0,float(minsync))) then - csync='#*' - if(nflip.eq.-1) then - csync='##' - if(decoded.ne.' ') then - do i=22,1,-1 - if(decoded(i:i).ne.' ') exit - enddo - if(i.gt.18) i=18 - decoded(i+2:i+4)='OOO' - endif - endif - endif - write(*,1010) params%nutc,snr,dt,freq,csync,decoded,cflags -1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,1x,a3) - endif - -100 call flush(6) - -!$omp end critical(decode_results) - select type(this) - type is (counting_jt65_decoder) - this%decoded = this%decoded + 1 - end select - end subroutine jt65_decoded - - subroutine jt9_decoded (this, sync, snr, dt, freq, drift, decoded) - use jt9_decode - implicit none - - class(jt9_decoder), intent(inout) :: this - real, intent(in) :: sync - integer, intent(in) :: snr - real, intent(in) :: dt - real, intent(in) :: freq - integer, intent(in) :: drift - character(len=22), intent(in) :: decoded - - !$omp critical(decode_results) - write(*,1000) params%nutc,snr,dt,nint(freq),decoded -1000 format(i4.4,i4,f5.1,i5,1x,'@ ',1x,a22) - call flush(6) - !$omp end critical(decode_results) - select type(this) - type is (counting_jt9_decoder) - this%decoded = this%decoded + 1 - end select - end subroutine jt9_decoded - - subroutine ft8_decoded (this,sync,snr,dt,freq,decoded,nap,qual) - use ft8_decode - implicit none - - class(ft8_decoder), intent(inout) :: this real, intent(in) :: sync integer, intent(in) :: snr real, intent(in) :: dt real, intent(in) :: freq character(len=37), intent(in) :: decoded - character c1*12,c2*12,g2*4,w*4,ctmp*12 - integer i0,i1,i2,i3,i4,i5,i6,n30,nwrap + character c1*12,c2*12,g2*4,w*4 + integer i0,i1,i2,i3,i4,i5,n30,nwrap integer, intent(in) :: nap real, intent(in) :: qual character*2 annot @@ -488,12 +259,103 @@ contains call flush(6) + return + end subroutine js8_decoded + + subroutine js8a_decoded (this,sync,snr,dt,freq,decoded,nap,qual) + use ft8_decode + implicit none + + class(ft8_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + save + + call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) + select type(this) type is (counting_ft8_decoder) this%decoded = this%decoded + 1 end select return - end subroutine ft8_decoded + end subroutine js8a_decoded + + subroutine js8b_decoded (this,sync,snr,dt,freq,decoded,nap,qual) + use js8b_decode + implicit none + + class(js8b_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + save + + call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) + + select type(this) + type is (counting_js8b_decoder) + this%decoded = this%decoded + 1 + end select + + return + end subroutine js8b_decoded + + subroutine js8c_decoded (this,sync,snr,dt,freq,decoded,nap,qual) + use js8c_decode + implicit none + + class(js8c_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + save + + call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) + + select type(this) + type is (counting_js8c_decoder) + this%decoded = this%decoded + 1 + end select + + return + end subroutine js8c_decoded + + subroutine js8d_decoded (this,sync,snr,dt,freq,decoded,nap,qual) + use js8d_decode + implicit none + + class(js8d_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + save + + call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) + + select type(this) + type is (counting_js8d_decoder) + this%decoded = this%decoded + 1 + end select + + return + end subroutine js8d_decoded end subroutine multimode_decoder diff --git a/lib/dxped_fifo.f90 b/lib/dxped_fifo.f90 deleted file mode 100644 index 96f3492..0000000 --- a/lib/dxped_fifo.f90 +++ /dev/null @@ -1,23 +0,0 @@ -subroutine dxped_fifo(cx,gx,isnrx) - - parameter (NCALLS=268) - character*6 xcall(NCALLS) - character*4 xgrid(NCALLS) - integer isnr(NCALLS) - - character cx*6,gx*4 - common/dxpfifo/nc,isnr,xcall,xgrid - - if(nc.lt.NCALLS) then - nc=nc+1 - cx=xcall(nc) - gx=xgrid(nc) - isnrx=isnr(nc) - else - cx=' ' - gx=' ' - isnrx=0 - endif - - return -end subroutine dxped_fifo diff --git a/lib/fast_decode.f90 b/lib/fast_decode.f90 deleted file mode 100644 index eebb731..0000000 --- a/lib/fast_decode.f90 +++ /dev/null @@ -1,97 +0,0 @@ -subroutine fast_decode(id2,narg,ntrperiod,line,mycall_12, & - hiscall_12) - - parameter (NMAX=30*12000) - integer*2 id2(NMAX) - integer*2 id2a(NMAX) - integer*2 id2b(NMAX) - integer narg(0:14) - real dat(30*12000) - complex cdat(262145),cdat2(262145) - real psavg(450) - logical pick,first - character*6 cfile6 - character*80 line(100) - character*12 mycall_12,hiscall_12 - character*6 mycall,hiscall - data first/.true./,nutca/0/,nutcb/0/ - save npts,cdat,cdat2,id2a,id2b,nutca,nutcb - - if(first) then - id2a=0 - id2b=0 - first=.false. - endif - - mycall=mycall_12(1:6) - hiscall=hiscall_12(1:6) - nutc=narg(0) - ndat0=narg(1) - nsubmode=narg(2) - newdat=narg(3) - minsync=narg(4) - npick=narg(5) - t0=0.001*narg(6) - t1=0.001*narg(7) - tmid=0.5*(t0+t1) - maxlines=narg(8) - nmode=narg(9) - nrxfreq=narg(10) - ntol=narg(11) - nhashcalls=narg(12) - - line(1:100)(1:1)=char(0) - if(t0.gt.float(ntrperiod)) go to 900 - if(t0.gt.t1) go to 900 - - if(nmode.eq.102) then - call fast9(id2,narg,line) - go to 900 - endif - - if(newdat.eq.1) then - cdat2=cdat - ndat=ndat0 - call wav11(id2,ndat,dat) - nzz=11025*ntrperiod - if(ndat.lt.nzz) dat(ndat+1:nzz)=0.0 - ndat=min(ndat,30*11025) - call ana932(dat,ndat,cdat,npts) !Make downsampled analytic signal - endif - -! Now cdat() is the downsampled analytic signal. -! New sample rate = fsample = BW = 11025 * (9/32) = 3100.78125 Hz -! NB: npts, nsps, etc., are all reduced by 9/32 - - write(cfile6,'(i6.6)') nutc - nfreeze=1 - mousedf=0 - mousebutton=0 - mode4=1 - if(nsubmode.eq.1) mode4=2 - nafc=0 - ndebug=0 - t2=0. - ia=1 - ib=npts - pick=.false. - - if(npick.gt.0) then - pick=.true. - dt=1.0/11025.0 * (32.0/9.0) - ia=t0/dt + 1. - ib=t1/dt + 1. - t2=t0 - endif - jz=ib-ia+1 - line(1:100)(1:1)=char(0) - if(npick.eq.2) then - call iscat(cdat2(ia),jz,3,40,t2,pick,cfile6,minsync,ntol,NFreeze, & - MouseDF,mousebutton,mode4,nafc,ndebug,psavg,nmax,nlines,line) - else - call iscat(cdat(ia),jz,3,40,t2,pick,cfile6,minsync,ntol,NFreeze, & - MouseDF,mousebutton,mode4,nafc,ndebug,psavg,maxlines,nlines,line) - endif - -900 return -end subroutine fast_decode diff --git a/lib/fer b/lib/fer deleted file mode 100755 index 7a74bf2..0000000 --- a/lib/fer +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -# jt65 end-to-end simulator. Run enough cases to get a given -# number of successful decodes or a given number of errors -# For better performance, copy this script and jt65, jt65sim -# executables to a ramdisk and run from there. - -mode=C -spread=4.0 - -for i in `seq 0 21`; -do -nruns=0 -ndecodes=0 -ngood=0 -nbad=0 -snr=$((-25+$i)) -#while [ $[ $nruns - $ngood ] -lt 200 ] -#while [ $ngood -lt 200 ] -while [ $nruns -lt 1000 ] -do - rm 000000_0001.wav - ./jt65sim -m $mode -n 1 -d $spread -s \\$snr > /dev/null - rm decoded.txt - ./jt65 -m $mode -a 10 -f 1500 -n 1000 -s 000000_0001.wav > decoded.txt - if [ -e decoded.txt ]; then - nd=$( wc -l < decoded.txt ) - ng=$( grep "K1ABC" decoded.txt | wc -l ) - nb=$[$nd-$ng] - ndecodes=$[$ndecodes + $nd] - ngood=$[$ngood + $ng] - nbad=$[$nbad + $nb] - fi - nruns=$[$nruns + 1] - nmissed=$[$nruns-$ngood] - pe=$( echo "scale=5; $nmissed/$nruns" | bc -l ) - ps=$( echo "scale=5; $ngood/$nruns" | bc -l ) - echo -en snr: $snr nruns: $nruns ndecodes: $ndecodes ngood: $ngood nbad: $nbad nmissed: $nmissed wer: $pe success: $ps"\r" -done -echo snr: $snr nruns: $nruns ndecodes: $ndecodes ngood: $ngood nbad: $nbad nmissed: $nmissed wer: $pe success: $ps -done diff --git a/lib/fer65.f90 b/lib/fer65.f90 deleted file mode 100644 index 1284fb5..0000000 --- a/lib/fer65.f90 +++ /dev/null @@ -1,195 +0,0 @@ -program fer65 - -! End-to-end simulator for testing JT65. - -! Options -! jt65sim jt65 -!---------------------------------------------------------------- -! -a aggressive -! -d Doppler spread -d depth -! -f Number of files -f freq -! -m (sub)mode -m (sub)mode -! -n number of generated sigs -n ntrials -! -t Time offset (s) -r robust sync -! -p Do not seed random #s -c mycall -! -x hiscall -! -g hisgrid -! -X hinted-decode flags -! -s S/N in 2500 Hz -s single-decode mode - - implicit real*8 (a-h,o-z) - real*8 s(7),sq(7) - character arg*12,cmnd*100,decoded*22,submode*1,csync*1,f1*15,f2*15 - character*12 outfile - logical syncok - - nargs=iargc() - if(nargs.ne.7) then - print*,'Usage: fer65 submode fspread snr1 snr2 Navg DS iters' - print*,'Example: fer65 C 3.0 -28 -12 8 1 1000' - go to 999 - endif - - call getarg(1,submode) - call getarg(2,arg) - read(arg,*) d - call getarg(3,arg) - read(arg,*) snr1 - call getarg(4,arg) - read(arg,*) snr2 - call getarg(5,arg) - read(arg,*) navg - call getarg(6,arg) - read(arg,*) nds - call getarg(7,arg) - read(arg,*) iters - - write(outfile,1001) submode,d,navg,nds -1001 format(a1,f6.2,'_',i2.2,'_',i1) - if(outfile(2:2).eq.' ') outfile(2:2)='0' - if(outfile(3:3).eq.' ') outfile(3:3)='0' - - ndepth=3 - if(navg.gt.1) ndepth=ndepth+16 - if(nds.ne.0) ndepth=ndepth+32 - - dfmax=3 - if(submode.eq.'b' .or. submode.eq.'B') dfmax=6 - if(submode.eq.'c' .or. submode.eq.'C') dfmax=11 - - ntrials=1000 - naggressive=10 - - open(20,file=outfile,status='unknown') - open(21,file='fer65.21',status='unknown') - - write(20,1000) submode,iters,ntrials,naggressive,d,ndepth,navg,nds -1000 format(/'JT65',a1,' Iters:',i5,' T:',i6,' Aggr:',i3, & - ' Dop:',f6.2,' Depth:',i2,' Navg:',i3,' DS:',i2) - write(20,1002) -1002 format(/' dB nsync ngood nbad sync dsnr ', & - 'DT Freq Nsum Width'/85('-')) - flush(20) - - do isnr=0,20 - snr=snr1+isnr - if(snr.gt.snr2) exit - nsync=0 - ngood=0 - nbad=0 - s=0. - sq=0. - do iter=1,iters - write(cmnd,1010) submode,d,snr,navg -1010 format('./jt65sim -n 1 -m ',a1,' -d',f7.2,' -s \\',f5.1,' -f',i3,' >devnull') - call unlink('000000_????.wav') - call system(cmnd) - if(navg.gt.1) then - do i=navg,2,-1 - j=2*i-1 - write(f1,1011) i - write(f2,1011) j -1011 format('000000_',i4.4,'.wav') - call rename(f1,f2) - enddo - endif - call unlink('decoded.txt') - call unlink('fort.13') - isync=0 - nsnr=0 - dt=0. - nfreq=0 - ndrift=0 - nwidth=0 - cmnd='./jt65 -m A -a 10 -c K1ABC -f 1500 -n 1000 -d 5 -s 000000_????.wav > decoded.txt' - cmnd(11:11)=submode - write(cmnd(47:48),'(i2)') ndepth - call system(cmnd) - open(13,file='fort.13',status='old',err=20) - do i=1,navg - read(13,1012) nutc,isync,nsnr,dt,nfreq,ndrift,nwidth,decoded, & - nft,nsum,nsmo -1012 format(i4,i4,i5,f6.2,i5,i4,i3,1x,a22,5x,3i3) - if(nft.gt.0) exit - enddo - close(13) - syncok=abs(dt).lt.0.2 .and. float(abs(nfreq-1500)).lt.dfmax - csync=' ' - if(syncok) csync='*' - write(21,1014) nutc,isync,nsnr,dt,nfreq,ndrift,nwidth, & - nft,nsum,nsmo,csync,decoded(1:16),nft,nsum,nsmo -1014 format(i4,i4,i5,f6.2,i5,i4,3x,4i3,1x,a1,1x,a16,i2,2i3) - flush(21) - - if(syncok) then - nsync=nsync+1 - s(1)=s(1) + isync - sq(1)=sq(1) + isync*isync - s(6)=s(6) + nwidth - sq(6)=sq(6) + nwidth*nwidth - if(decoded.eq.'K1ABC W9XYZ EN37 ') then - ngood=ngood+1 - s(2)=s(2) + nsnr - s(3)=s(3) + dt - s(4)=s(4) + nfreq - s(5)=s(5) + ndrift - s(7)=s(7) + nsum - - sq(2)=sq(2) + nsnr*nsnr - sq(3)=sq(3) + dt*dt - sq(4)=sq(4) + nfreq*nfreq - sq(5)=sq(5) + ndrift*ndrift - sq(7)=sq(7) + nsum*nsum - else if(decoded.ne.' ') then - nbad=nbad+1 - print*,'Nbad:',nbad,decoded - endif - endif -20 continue - fsync=float(nsync)/iter - fgood=float(ngood)/iter - fbad=float(nbad)/iter - write(*,1020) nint(snr),iter,isync,nsnr,dt,nfreq,ndrift,nwidth,fsync, & - fgood,fbad,decoded(1:16),nft,nsum,nsmo -1020 format(i3,i5,i3,i4,f6.2,i5,i3,i3,2f6.3,f7.4,1x,a16,i2,2i3) - enddo - - if(nsync.ge.1) then - xsync=s(1)/nsync - xwidth=s(6)/nsync - endif - esync=0. - if(nsync.ge.2) then - esync=sqrt(sq(1)/nsync - xsync**2) - ewidth=sqrt(sq(6)/nsync - xwidth**2) - endif - - if(ngood.ge.1) then - xsnr=s(2)/ngood - xdt=s(3)/ngood - xfreq=s(4)/ngood - xdrift=s(5)/ngood - xsum=s(7)/ngood - endif - if(ngood.ge.2) then - esnr=sqrt(sq(2)/ngood - xsnr**2) - edt=sqrt(sq(3)/ngood - xdt**2) - efreq=sqrt(sq(4)/ngood - xfreq**2) - edrift=sqrt(sq(5)/ngood - xdrift**2) - esum=sqrt(sq(7)/ngood - xsum**2) - endif - - dsnr=xsnr-snr - dfreq=xfreq-1500.0 - if(ngood.eq.0) then - dsnr=0. - dfreq=0. - endif - write(20,1100) snr,nsync,ngood,nbad,xsync,esync,dsnr,esnr, & - xdt,edt,dfreq,efreq,xsum,esum,xwidth,ewidth -1100 format(f5.1,2i6,i4,2f6.1,f6.1,f5.1,f6.2,f5.2,6f5.1) - flush(20) - if(ngood.ge.int(0.99*iters)) exit - enddo - -999 end program fer65 diff --git a/lib/fersum.f90 b/lib/fersum.f90 deleted file mode 100644 index 4a99561..0000000 --- a/lib/fersum.f90 +++ /dev/null @@ -1,72 +0,0 @@ -program fersum - - character mode*5 - character infile*40 - real dop(0:9) - real thresh(0:9,12),threshsync(0:9,12) - data dop/0.25,0.5,1.0,2.0,4.0,8.0,16.0,32.0,64.0,128.0/ - - nargs=iargc() - if(nargs.ne.1) then - print*,'Usage: fersum ' - go to 999 - endif - call getarg(1,infile) - open(10,file=infile,status='old') - thresh=0. - threshsync=0. - - do iblk=1,999 -1 read(10,1002,end=100) mode,iters,ntot,naggr,d,navg,nds -1002 format(a5,8x,i5,4x,i6,7x,i3,6x,f6.2,17x,i3,5x,i2) - write(33,*) iblk,mode - if(mode.eq.' ') go to 1 - read(10,1002) - read(10,1002) - read(10,1002) - - nsync0=0 - ngood0=0 - xsum0=0. - do n=1,99 - read(10,1010,end=100) snr,nsync,ngood,nbad,xsync,esync,dsnr,esnr, & - xdt,edt,dfreq,efreq,xsum,esum,xwidth,ewidth -1010 format(f5.1,2i6i4,2f6.1,f6.1,f5.1,f6.2,f5.2,6f5.1) - if(snr.eq.0.0) exit - if(mode(5:5).eq.'A') nmode=1 - if(mode(5:5).eq.'B') nmode=2 - if(mode(5:5).eq.'C') nmode=3 - j=nint(log(d)/log(2.0) + 2.0) - if(navg.eq.1 .and. nds.eq.0) k=nmode - if(navg.eq.1 .and. nds.eq.1) k=nmode+3 - if(navg.gt.1 .and. nds.eq.0) k=nmode+6 - if(navg.gt.1 .and. nds.eq.1) k=nmode+9 - if(nsync0.le.iters/2 .and. nsync.ge.iters/2) then - threshsync(j,k)=snr-float(nsync-iters/2)/(nsync-nsync0) - endif - if(ngood0.le.iters/2 .and. ngood.ge.iters/2) then - threshold=snr-float(ngood-iters/2)/(ngood-ngood0) - xsumavg=max(1.0,0.5*(xsum0+xsum)) -! write(*,1020) mode,iters,ntot,naggr,d,navg,nds,threshold,xsumavg -!1020 format(a5,i7,i7,i3,f7.2,i3,i3,f7.1,f6.1) - thresh(j,k)=threshold - endif - nsync0=nsync - ngood0=ngood - xsum0=xsum - enddo - enddo - -100 write(12,1100) -1100 format(' ') - do i=0,9 - write(12,1110) dop(i),thresh(i,1:12) -1110 format(f6.2,13f6.1) - enddo - - write(12,1110) - do i=0,9 - write(12,1110) dop(i),threshsync(i,1:12) - enddo - -999 end program fersum diff --git a/lib/fix_contest_msg.f90 b/lib/fix_contest_msg.f90 deleted file mode 100644 index 8c0345e..0000000 --- a/lib/fix_contest_msg.f90 +++ /dev/null @@ -1,32 +0,0 @@ -subroutine fix_contest_msg(mygrid,msg) - -! If distance from mygrid to grid1 is more thsn 10000 km, change "grid1" -! to "R grid2" where grid2 is the antipodes of grid1. - - character*6 mygrid - character*22 msg - character*6 g1,g2 - logical isgrid - - isgrid(g1)=g1(1:1).ge.'A' .and. g1(1:1).le.'R' .and. g1(2:2).ge.'A' .and. & - g1(2:2).le.'R' .and. g1(3:3).ge.'0' .and. g1(3:3).le.'9' .and. & - g1(4:4).ge.'0' .and. g1(4:4).le.'9' .and. g1(1:4).ne.'RR73' - - n=len(trim(msg)) - if(n.lt.4) return - - g1=msg(n-3:n)//' ' - if(isgrid(g1)) then - call azdist(mygrid,g1,0.d0,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) - if(ndkm.gt.10000) then - call grid2deg(g1,dlong,dlat) - dlong=dlong+180.0 - if(dlong.gt.180.0) dlong=dlong-360.0 - dlat=-dlat - call deg2grid(dlong,dlat,g2) - msg=msg(1:n-4)//'R '//g2(1:4) - endif - endif - - return -end subroutine fix_contest_msg diff --git a/lib/ft8/ft8code.f90 b/lib/ft8/ft8code.f90 index 7a78f40..3100148 100644 --- a/lib/ft8/ft8code.f90 +++ b/lib/ft8/ft8code.f90 @@ -81,7 +81,6 @@ program ft8code call extractmessage174(decoded,message,ncrcflag) decoded=decoded0 - if(bcontest) call fix_contest_msg(mygrid6,message) bad=" " comment=' ' if(itype.ne.6 .and. message.ne.msgchk) bad="*" diff --git a/lib/ft8_decode.f90 b/lib/ft8_decode.f90 index a38565c..b3c9166 100644 --- a/lib/ft8_decode.f90 +++ b/lib/ft8_decode.f90 @@ -121,12 +121,6 @@ contains hd=nharderrors+dmin call timer('ft8b ',1) if(nbadcrc.eq.0) then -! call jtmsg(message,iflag) - if(bcontest) then - call fix_contest_msg(mygrid6,message) - msg37(1:22)=message - endif -! if(iand(iflag,31).ne.0) message(22:22)='?' ldupe=.false. do id=1,ndecodes if(message.eq.allmessages(id).and.nsnr.le.allsnrs(id)) ldupe=.true. @@ -136,11 +130,6 @@ contains allmessages(ndecodes)=message allsnrs(ndecodes)=nsnr endif -! write(81,1004) nutc,ncand,icand,ipass,iaptype,iappass, & -! nharderrors,dmin,hd,min(sync,999.0),nint(xsnr), & -! xdt,nint(f1),message -!1004 format(i6.6,2i4,3i2,i3,3f6.1,i4,f6.2,i5,2x,a22) -! flush(81) if(.not.ldupe .and. associated(this%callback)) then qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0] call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual) diff --git a/lib/ftrsd/Makefile b/lib/ftrsd/Makefile deleted file mode 100644 index 61b1357..0000000 --- a/lib/ftrsd/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# Makefile for Windows in JTSDK-PY environment - -# Re-direct stdout and stderr: cmd.exe bash -# make > junk 2>&1 make &> junk - -CC = gcc -FC = gfortran - -FFLAGS = -O2 -DWIN32 -fbounds-check -fno-second-underscore -Wall \ - -Wno-conversion -Wno-character-truncation -CFLAGS = -I. -DWIN32 -DWin32 -DBIGSYM -DHAVE_STRUCT_TIMESPEC - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libftrsd.a - -OBJS1 = extract2.o ftrsd2.o init_rs_int.o encode_rs_int.o decode_rs_int.o -libftrsd.a: $(OBJS1) - ar cr libftrsd.a $(OBJS1) - ranlib libftrsd.a - cp libftrsd.a .. - -# Build rsdtest -OBJS2 = rsdtest.o -rsdtest: $(OBJS2) ../libjt.a - $(FC) -o rsdtest $(OBJS2) libftrsd.a ../libjt.a ../libpthreadGC2.a - -ftrsd: ftrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o - gcc -g -o $@ $^ - -encode_rs_int.o: encode_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -decode_rs_int.o: decode_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -init_rs_int.o: init_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -.PHONY : clean - -clean: - rm -rf *.o libjt.a rsdtest ftrsd diff --git a/lib/ftrsd/Makefile.sfrsd b/lib/ftrsd/Makefile.sfrsd deleted file mode 100644 index 3f68f7e..0000000 --- a/lib/ftrsd/Makefile.sfrsd +++ /dev/null @@ -1,30 +0,0 @@ -srcdir = . -prefix = /usr/local -exec_prefix=${prefix} -CC=gcc - -CFLAGS=-I/usr/local/include -Wall -O2 - -all: encode_rs_int.o decode_rs_int.o init_rs_int.o sfrsd2.o sfrsd.o sfrsd - -encode_rs_int.o: encode_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -decode_rs_int.o: decode_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -init_rs_int.o: init_rs.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -sfrsd2.o: sfrsd2.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -sfrsd.o: sfrsd.c - gcc -DBIGSYM=1 $(CFLAGS) -c -o $@ $^ - -sfrsd: sfrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o sfrsd2.o - gcc -g -o $@ $^ - -clean: - rm -f *.o *.a sfrsd - diff --git a/lib/ftrsd/Makefile.sfrsd3 b/lib/ftrsd/Makefile.sfrsd3 deleted file mode 100644 index 93023f3..0000000 --- a/lib/ftrsd/Makefile.sfrsd3 +++ /dev/null @@ -1,38 +0,0 @@ -# Makefile for Windows in JTSDK-PY environment - -# Re-direct stdout and stderr: cmd.exe bash -# make > junk 2>&1 make &> junk - -CC = gcc -FC = gfortran - -FFLAGS = -O2 -DWIN32 -fbounds-check -fno-second-underscore -Wall \ - -Wno-conversion -Wno-character-truncation -CFLAGS = -I. -DWIN32 -DWin32 -DBIGSYM -DHAVE_STRUCT_TIMESPEC - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: rsdtest - -# Build rsdtest -OBJS2 = rsdtest.o extract2.o demod64b.o sfrsd3.o -rsdtest: $(OBJS2) ../libjt.a - $(FC) -o rsdtest $(OBJS2) ../libjt.a ../libpthreadGC2.a - -sfrsd: sfrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o - gcc -g -o $@ $^ - -.PHONY : clean - -clean: - rm -rf *.o libjt.a rsdtest sfrsd diff --git a/lib/ftrsd/decode_rs.c b/lib/ftrsd/decode_rs.c deleted file mode 100644 index 990b687..0000000 --- a/lib/ftrsd/decode_rs.c +++ /dev/null @@ -1,268 +0,0 @@ -/* Reed-Solomon decoder - * Copyright 2002 Phil Karn, KA9Q - * May be used under the terms of the GNU General Public License (GPL) - * Modified by Steve Franke, K9AN, for use in a soft-symbol RS decoder - */ - -#ifdef DEBUG -#include -#endif - -#include -#include - -#define min(a,b) ((a) < (b) ? (a) : (b)) - -#ifdef FIXED -#include "fixed.h" -#elif defined(BIGSYM) -#include "int.h" -#else -#include "char.h" -#endif - -int DECODE_RS( -#ifndef FIXED - void *p, -#endif - DTYPE *data, int *eras_pos, int no_eras, int calc_syn){ - -#ifndef FIXED - struct rs *rs = (struct rs *)p; -#endif - int deg_lambda, el, deg_omega; - int i, j, r,k; - DTYPE u,q,tmp,num1,num2,den,discr_r; - DTYPE lambda[NROOTS+1]; // Err+Eras Locator poly - static DTYPE s[51]; // and syndrome poly - DTYPE b[NROOTS+1], t[NROOTS+1], omega[NROOTS+1]; - DTYPE root[NROOTS], reg[NROOTS+1], loc[NROOTS]; - int syn_error, count; - - if( calc_syn ) { - /* form the syndromes; i.e., evaluate data(x) at roots of g(x) */ - for(i=0;i 0) { - /* Init lambda to be the erasure locator polynomial */ - lambda[1] = ALPHA_TO[MODNN(PRIM*(NN-1-eras_pos[0]))]; - for (i = 1; i < no_eras; i++) { - u = MODNN(PRIM*(NN-1-eras_pos[i])); - for (j = i+1; j > 0; j--) { - tmp = INDEX_OF[lambda[j - 1]]; - if(tmp != A0) - lambda[j] ^= ALPHA_TO[MODNN(u + tmp)]; - } - } - -#if DEBUG >= 1 - /* Test code that verifies the erasure locator polynomial just constructed - Needed only for decoder debugging. */ - - /* find roots of the erasure location polynomial */ - for(i=1;i<=no_eras;i++) - reg[i] = INDEX_OF[lambda[i]]; - - count = 0; - for (i = 1,k=IPRIM-1; i <= NN; i++,k = MODNN(k+IPRIM)) { - q = 1; - for (j = 1; j <= no_eras; j++) - if (reg[j] != A0) { - reg[j] = MODNN(reg[j] + j); - q ^= ALPHA_TO[reg[j]]; - } - if (q != 0) - continue; - /* store root and error location number indices */ - root[count] = i; - loc[count] = k; - count++; - } - if (count != no_eras) { - printf("count = %d no_eras = %d\n lambda(x) is WRONG\n",count,no_eras); - count = -1; - goto finish; - } -#if DEBUG >= 2 - printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n"); - for (i = 0; i < count; i++) - printf("%d ", loc[i]); - printf("\n"); -#endif -#endif - } - for(i=0;i 0; j--){ - if (reg[j] != A0) { - reg[j] = MODNN(reg[j] + j); - q ^= ALPHA_TO[reg[j]]; - } - } - if (q != 0) - continue; /* Not a root */ - /* store root (index-form) and error location number */ -#if DEBUG>=2 - printf("count %d root %d loc %d\n",count,i,k); -#endif - root[count] = i; - loc[count] = k; - /* If we've already found max possible roots, - * abort the search to save time - */ - if(++count == deg_lambda) - break; - } - if (deg_lambda != count) { - /* - * deg(lambda) unequal to number of roots => uncorrectable - * error detected - */ - count = -1; - goto finish; - } - /* - * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo - * x**NROOTS). in index form. Also find deg(omega). - */ - deg_omega = 0; - for (i = 0; i < NROOTS;i++){ - tmp = 0; - j = (deg_lambda < i) ? deg_lambda : i; - for(;j >= 0; j--){ - if ((s[i - j] != A0) && (lambda[j] != A0)) - tmp ^= ALPHA_TO[MODNN(s[i - j] + lambda[j])]; - } - if(tmp != 0) - deg_omega = i; - omega[i] = INDEX_OF[tmp]; - } - omega[NROOTS] = A0; - - /* - * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = - * inv(X(l))**(FCR-1) and den = lambda_pr(inv(X(l))) all in poly-form - */ - for (j = count-1; j >=0; j--) { - num1 = 0; - for (i = deg_omega; i >= 0; i--) { - if (omega[i] != A0) - num1 ^= ALPHA_TO[MODNN(omega[i] + i * root[j])]; - } - num2 = ALPHA_TO[MODNN(root[j] * (FCR - 1) + NN)]; - den = 0; - - /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */ - for (i = min(deg_lambda,NROOTS-1) & ~1; i >= 0; i -=2) { - if(lambda[i+1] != A0) - den ^= ALPHA_TO[MODNN(lambda[i+1] + i * root[j])]; - } - if (den == 0) { -#if DEBUG >= 1 - printf("\n ERROR: denominator = 0\n"); -#endif - count = -1; - goto finish; - } - /* Apply error to data */ - if (num1 != 0) { - data[loc[j]] ^= ALPHA_TO[MODNN(INDEX_OF[num1] + INDEX_OF[num2] + NN - INDEX_OF[den])]; - } - } -finish: - if(eras_pos != NULL){ - for(i=0;i - -#ifdef FIXED -#include "fixed.h" -#elif defined(BIGSYM) -#include "int.h" -#else -#include "char.h" -#endif - -void ENCODE_RS( -#ifndef FIXED -void *p, -#endif -DTYPE *data, DTYPE *bb){ -#ifndef FIXED - struct rs *rs = (struct rs *)p; -#endif - int i, j; - DTYPE feedback; - - memset(bb,0,NROOTS*sizeof(DTYPE)); - - for(i=0;i -#include -#include -#include -#include -#include "rs2.h" - -static void *rs; -void getpp_(int workdat[], float *pp); - -void ftrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], - int* ntrials0, int correct[], int param[], int ntry[]) -{ - int rxdat[63], rxprob[63], rxdat2[63], rxprob2[63]; - int workdat[63]; - int indexes[63]; - int era_pos[51]; - int i, j, numera, nerr, nn=63; - int ntrials = *ntrials0; - int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768; - int ntotal=0,ntotal_min=32768,ncandidates; - int nera_best=0; - float pp,pp1,pp2; - static unsigned int nseed; - -// Power-percentage symbol metrics - composite gnnf/hf - int perr[8][8] = { - { 4, 9, 11, 13, 14, 14, 15, 15}, - { 2, 20, 20, 30, 40, 50, 50, 50}, - { 7, 24, 27, 40, 50, 50, 50, 50}, - {13, 25, 35, 46, 52, 70, 50, 50}, - {17, 30, 42, 54, 55, 64, 71, 70}, - {25, 39, 48, 57, 64, 66, 77, 77}, - {32, 45, 54, 63, 66, 75, 78, 83}, - {51, 58, 57, 66, 72, 77, 82, 86}}; - - -// Initialize the KA9Q Reed-Solomon encoder/decoder - unsigned int symsize=6, gfpoly=0x43, fcr=3, prim=1, nroots=51; - rs=init_rs_int(symsize, gfpoly, fcr, prim, nroots, 0); - -// Reverse the received symbol vectors for BM decoder - for (i=0; i<63; i++) { - rxdat[i]=mrsym[62-i]; - rxprob[i]=mrprob[62-i]; - rxdat2[i]=mr2sym[62-i]; - rxprob2[i]=mr2prob[62-i]; - } - -// Sort rxprob to find indexes of the least reliable symbols - int k, pass, tmp, nsym=63; - int probs[63]; - for (i=0; i<63; i++) { - indexes[i]=i; - probs[i]=rxprob[i]; - } - for (pass = 1; pass <= nsym-1; pass++) { - for (k = 0; k < nsym - pass; k++) { - if( probs[k] < probs[k+1] ) { - tmp = probs[k]; - probs[k] = probs[k+1]; - probs[k+1] = tmp; - tmp = indexes[k]; - indexes[k] = indexes[k+1]; - indexes[k+1] = tmp; - } - } - } - -// See if we can decode using BM HDD, and calculate the syndrome vector. - memset(era_pos,0,51*sizeof(int)); - numera=0; - memcpy(workdat,rxdat,sizeof(rxdat)); - nerr=decode_rs_int(rs,workdat,era_pos,numera,1); - if( nerr >= 0 ) { - // Hard-decision decoding succeeded. Save codeword and some parameters. - nhard=0; - for (i=0; i<63; i++) { - if( workdat[i] != rxdat[i] ) nhard=nhard+1; - } - memcpy(correct,workdat,63*sizeof(int)); - param[0]=0; - param[1]=nhard; - param[2]=0; - param[3]=0; - param[4]=0; - param[5]=0; - param[7]=1000*1000; - ntry[0]=0; - return; - } - -/* -Hard-decision decoding failed. Try the FT soft-decision method. -Generate random erasure-locator vectors and see if any of them -decode. This will generate a list of "candidate" codewords. The -soft distance between each candidate codeword and the received -word is estimated by finding the largest (pp1) and second-largest -(pp2) outputs from a synchronized filter-bank operating on the -symbol spectra, and using these to decide which candidate -codeword is "best". -*/ - - nseed=1; //Seed for random numbers - float ratio; - int thresh, nsum; - int thresh0[63]; - ncandidates=0; - nsum=0; - int ii,jj; - for (i=0; i= 0 ) { - // We have a candidate codeword. Find its hard and soft distance from - // the received word. Also find pp1 and pp2 from the full array - // s3(64,63) of synchronized symbol spectra. - ncandidates=ncandidates+1; - nhard=0; - nsoft=0; - for (i=0; i<63; i++) { - if(workdat[i] != rxdat[i]) { - nhard=nhard+1; - if(workdat[i] != rxdat2[i]) { - nsoft=nsoft+rxprob[i]; - } - } - } - nsoft=63*nsoft/nsum; - ntotal=nsoft+nhard; - - getpp_(workdat,&pp); - if(pp>pp1) { - pp2=pp1; - pp1=pp; - nsoft_min=nsoft; - nhard_min=nhard; - ntotal_min=ntotal; - memcpy(correct,workdat,63*sizeof(int)); - nera_best=numera; - ntry[0]=k; - } else { - if(pp>pp2 && pp!=pp1) pp2=pp; - } - if(nhard_min <= 41 && ntotal_min <= 71) break; - } - if(k == ntrials) ntry[0]=k; - } - - param[0]=ncandidates; - param[1]=nhard_min; - param[2]=nsoft_min; - param[3]=nera_best; - param[4]=1000.0*pp2/pp1; - param[5]=ntotal_min; - param[6]=ntry[0]; - param[7]=1000.0*pp2; - param[8]=1000.0*pp1; - if(param[0]==0) param[2]=-1; - return; -} diff --git a/lib/ftrsd/ftrsd_paper/JT65B_EME.png b/lib/ftrsd/ftrsd_paper/JT65B_EME.png deleted file mode 100644 index d5c86fb0dd1420ef6dff52409bea4ff44e20d3f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35719 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 Hu0mjfepH^L diff --git a/lib/ftrsd/ftrsd_paper/Makefile b/lib/ftrsd/ftrsd_paper/Makefile deleted file mode 100644 index a594397..0000000 --- a/lib/ftrsd/ftrsd_paper/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -CC = gcc -FC = gfortran - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: mfsk probs.out - -OBJS1 = prob.o binomial_subs.o -prob: $(OBJS1) - $(FC) -o prob $(OBJS1) - -OBJS2 = mfsk.o binomial_subs.o -mfsk: $(OBJS2) - $(FC) -o mfsk $(OBJS2) - -OBJS3 = bodide.o binomial_subs.o -bodide: $(OBJS3) - $(FC) -o bodide $(OBJS3) - - -probs.out: prob -# x N X s - prob 35 63 40 40 > probs.out - prob 37 63 40 45 >> probs.out - prob 37 53 40 45 >> probs.out - prob 38 53 40 47 >> probs.out - -clean: - rm -rf *.o prob probs.out - diff --git a/lib/ftrsd/ftrsd_paper/binomial.c b/lib/ftrsd/ftrsd_paper/binomial.c deleted file mode 100644 index fcbdafd..0000000 --- a/lib/ftrsd/ftrsd_paper/binomial.c +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include - -/* Original code copied from - http://rosettacode.org/wiki/Evaluate_binomial_coefficients -*/ - -/* We go to some effort to handle overflow situations */ - -static unsigned long gcd_ui(unsigned long x, unsigned long y) { - unsigned long t; - if (y < x) { t = x; x = y; y = t; } - while (y > 0) { - t = y; y = x % y; x = t; /* y1 <- x0 % y0 ; x1 <- y0 */ - } - return x; -} - -unsigned long binomial(unsigned long n, unsigned long k) { - unsigned long d, g, r = 1; - if (k == 0) return 1; - if (k == 1) return n; - if (k >= n) return (k == n); - if (k > n/2) k = n-k; - for (d = 1; d <= k; d++) { - if (r >= ULONG_MAX/n) { /* Possible overflow */ - unsigned long nr, dr; /* reduced numerator / denominator */ - g = gcd_ui(n, d); nr = n/g; dr = d/g; - g = gcd_ui(r, dr); r = r/g; dr = dr/g; - if (r >= ULONG_MAX/nr) return 0; /* Unavoidable overflow */ - r *= nr; - r /= dr; - n--; - } else { - r *= n--; - r /= d; - } - } - return r; -} - -int main() { - - //Get test results - printf("%lu\n", binomial(5, 3)); // 10 - printf("%lu\n", binomial(40, 19)); // 131282408400 - printf("%lu\n", binomial(67, 31)); // 11923179284862717872 - - // Compute special cases for paper on TF soft-decision RS decoder: - double a,b,c,p; - a=(double)binomial(40, 35); - b=(double)binomial(23, 5); - c=(double)binomial(63, 40); - p=a*b/c; - printf("%e %e %e %e\n",a,b,c,p); - - a=(double)binomial(40, 36); - b=(double)binomial(23, 4); - c=(double)binomial(63, 40); - p=a*b/c; - printf("%e %e %e %e\n",a,b,c,p); - - a=(double)binomial(40, 37); - b=(double)binomial(23, 8); - c=(double)binomial(63, 45); - p=a*b/c; - printf("%e %e %e %e\n",a,b,c,p); - return 0; -} diff --git a/lib/ftrsd/ftrsd_paper/binomial_subs.c b/lib/ftrsd/ftrsd_paper/binomial_subs.c deleted file mode 100644 index be4a0ae..0000000 --- a/lib/ftrsd/ftrsd_paper/binomial_subs.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include - -/* Original code copied from - http://rosettacode.org/wiki/Evaluate_binomial_coefficients -*/ - -/* We go to some effort to handle overflow situations */ - -static unsigned long long gcd_ui(unsigned long long x, unsigned long long y) { - unsigned long long t; - if (y < x) { t = x; x = y; y = t; } - while (y > 0) { - t = y; y = x % y; x = t; /* y1 <- x0 % y0 ; x1 <- y0 */ - } - return x; -} - -unsigned long long binomial(unsigned long long n, unsigned long long k) { - unsigned long long d, g, r = 1; - if (k == 0) return 1; - if (k == 1) return n; - if (k >= n) return (k == n); - if (k > n/2) k = n-k; - for (d = 1; d <= k; d++) { - if (r >= ULLONG_MAX/n) { /* Possible overflow */ - unsigned long long nr, dr; /* reduced numerator / denominator */ - g = gcd_ui(n, d); nr = n/g; dr = d/g; - g = gcd_ui(r, dr); r = r/g; dr = dr/g; - if (r >= ULLONG_MAX/nr) return 0; /* Unavoidable overflow */ - r *= nr; - r /= dr; - n--; - } else { - r *= n--; - r /= d; - } - } - return r; -} - -unsigned long long binomial_(int *n, int *k) -{ - // printf("n=%d k=%d %lu\n",*n,*k,binomial(*n,*k)); - return binomial(*n,*k); -} - -double hypergeo_(int *x, int *NN, int *XX, int *s) -{ - double a,b,c; - a=(double)binomial(*XX, *x); - b=(double)binomial(*NN-*XX, *s-*x); - c=(double)binomial(*NN, *s); - return a*b/c; -} diff --git a/lib/ftrsd/ftrsd_paper/bmdata-rf.dat b/lib/ftrsd/ftrsd_paper/bmdata-rf.dat deleted file mode 100644 index 17d5331..0000000 --- a/lib/ftrsd/ftrsd_paper/bmdata-rf.dat +++ /dev/null @@ -1,11 +0,0 @@ -fspread0 0.2, BM (ntrials=0) --22.0 0.09 --21.5 0.20 --21.0 0.36 --20.5 0.55 --20.0 0.69 --19.5 0.83 --19.0 0.91 --18.5 0.960 --18.0 0.978 --17.5 0.987 diff --git a/lib/ftrsd/ftrsd_paper/bmdata.dat b/lib/ftrsd/ftrsd_paper/bmdata.dat deleted file mode 100644 index 987bbbb..0000000 --- a/lib/ftrsd/ftrsd_paper/bmdata.dat +++ /dev/null @@ -1,8 +0,0 @@ --24.5 0.000 --24.0 0.006 --23.5 0.046 0.066 --23.0 0.250 0.305 --22.5 0.630 0.701 --22.0 0.900 0.945 --21.5 0.992 0.9974 --21.0 0.99987 diff --git a/lib/ftrsd/ftrsd_paper/bmtheory25.dat b/lib/ftrsd/ftrsd_paper/bmtheory25.dat deleted file mode 100644 index de85456..0000000 --- a/lib/ftrsd/ftrsd_paper/bmtheory25.dat +++ /dev/null @@ -1,43 +0,0 @@ -Es/No P(word error) ----------------------- - 0.0 0.9008E+00 0.1000E+01 - 0.5 0.8877E+00 0.1000E+01 - 1.0 0.8724E+00 0.1000E+01 - 1.5 0.8545E+00 0.1000E+01 - 2.0 0.8338E+00 0.1000E+01 - 2.5 0.8096E+00 0.1000E+01 - 3.0 0.7817E+00 0.1000E+01 - 3.5 0.7496E+00 0.1000E+01 - 4.0 0.7128E+00 0.1000E+01 - 4.5 0.6712E+00 0.1000E+01 - 5.0 0.6246E+00 0.9998E+00 - 5.5 0.5731E+00 0.9964E+00 - 6.0 0.5170E+00 0.9629E+00 - 6.5 0.4572E+00 0.7979E+00 - 7.0 0.3949E+00 0.4327E+00 - 7.5 0.3316E+00 0.1100E+00 - 8.0 0.2696E+00 0.9707E-02 - 8.5 0.2109E+00 0.2303E-03 - 9.0 0.1578E+00 0.1170E-05 - 9.5 0.1121E+00 0.1027E-08 -10.0 0.7499E-01 0.1263E-12 -10.5 0.4684E-01 0.1768E-17 -11.0 0.2703E-01 0.2282E-23 -11.5 0.1426E-01 0.2200E-30 -12.0 0.6789E-02 -.1348E-32 -12.5 0.2879E-02 -.1733E-32 -13.0 0.1072E-02 -.2119E-32 -13.5 0.3448E-03 0.3081E-32 -14.0 0.9421E-04 0.3852E-33 -14.5 0.2148E-04 -.1156E-32 -15.0 0.4006E-05 -.1733E-32 -15.5 0.5984E-06 0.2215E-32 -16.0 0.6994E-07 -.4430E-32 -16.5 0.6230E-08 -.3081E-32 -17.0 0.4105E-09 -.2889E-32 -17.5 0.1934E-10 -.1926E-33 -18.0 0.6266E-12 0.3852E-32 -18.5 0.1335E-13 -.1926E-33 -19.0 0.1777E-15 0.2119E-32 -19.5 0.1396E-17 0.1733E-32 -20.0 0.6076E-20 -.3852E-33 diff --git a/lib/ftrsd/ftrsd_paper/bmtheory40.dat b/lib/ftrsd/ftrsd_paper/bmtheory40.dat deleted file mode 100644 index 4903ef5..0000000 --- a/lib/ftrsd/ftrsd_paper/bmtheory40.dat +++ /dev/null @@ -1,43 +0,0 @@ -Es/No P(word error) ----------------------- - 0.0 0.9008E+00 0.1000E+01 - 0.5 0.8877E+00 0.1000E+01 - 1.0 0.8724E+00 0.1000E+01 - 1.5 0.8545E+00 0.1000E+01 - 2.0 0.8338E+00 0.9999E+00 - 2.5 0.8096E+00 0.9991E+00 - 3.0 0.7817E+00 0.9944E+00 - 3.5 0.7496E+00 0.9713E+00 - 4.0 0.7128E+00 0.8887E+00 - 4.5 0.6712E+00 0.6883E+00 - 5.0 0.6246E+00 0.3865E+00 - 5.5 0.5731E+00 0.1310E+00 - 6.0 0.5170E+00 0.2215E-01 - 6.5 0.4572E+00 0.1536E-02 - 7.0 0.3949E+00 0.3562E-04 - 7.5 0.3316E+00 0.2223E-06 - 8.0 0.2696E+00 0.2951E-09 - 8.5 0.2109E+00 0.6449E-13 - 9.0 0.1578E+00 0.1758E-17 - 9.5 0.1121E+00 0.4426E-23 -10.0 0.7499E-01 0.7428E-30 -10.5 0.4684E-01 -.1733E-32 -11.0 0.2703E-01 0.1348E-32 -11.5 0.1426E-01 0.2985E-32 -12.0 0.6789E-02 -.1348E-32 -12.5 0.2879E-02 -.1733E-32 -13.0 0.1072E-02 -.2119E-32 -13.5 0.3448E-03 0.3081E-32 -14.0 0.9421E-04 0.3852E-33 -14.5 0.2148E-04 -.1156E-32 -15.0 0.4006E-05 -.1733E-32 -15.5 0.5984E-06 0.2215E-32 -16.0 0.6994E-07 -.4430E-32 -16.5 0.6230E-08 -.3081E-32 -17.0 0.4105E-09 -.2889E-32 -17.5 0.1934E-10 -.1926E-33 -18.0 0.6266E-12 0.3852E-32 -18.5 0.1335E-13 -.1926E-33 -19.0 0.1777E-15 0.2119E-32 -19.5 0.1396E-17 0.1733E-32 -20.0 0.6076E-20 -.3852E-33 diff --git a/lib/ftrsd/ftrsd_paper/bmtheory43.dat b/lib/ftrsd/ftrsd_paper/bmtheory43.dat deleted file mode 100644 index b22ab8d..0000000 --- a/lib/ftrsd/ftrsd_paper/bmtheory43.dat +++ /dev/null @@ -1,43 +0,0 @@ -Es/No P(word error) ----------------------- - 0.0 0.9008E+00 0.1000E+01 - 0.5 0.8877E+00 0.1000E+01 - 1.0 0.8724E+00 0.9999E+00 - 1.5 0.8545E+00 0.9996E+00 - 2.0 0.8338E+00 0.9977E+00 - 2.5 0.8096E+00 0.9889E+00 - 3.0 0.7817E+00 0.9559E+00 - 3.5 0.7496E+00 0.8599E+00 - 4.0 0.7128E+00 0.6586E+00 - 4.5 0.6712E+00 0.3780E+00 - 5.0 0.6246E+00 0.1397E+00 - 5.5 0.5731E+00 0.2826E-01 - 6.0 0.5170E+00 0.2632E-02 - 6.5 0.4572E+00 0.9396E-04 - 7.0 0.3949E+00 0.1052E-05 - 7.5 0.3316E+00 0.2965E-08 - 8.0 0.2696E+00 0.1650E-11 - 8.5 0.2109E+00 0.1388E-15 - 9.0 0.1578E+00 0.1316E-20 - 9.5 0.1121E+00 0.1021E-26 -10.0 0.7499E-01 -.9630E-33 -10.5 0.4684E-01 -.1733E-32 -11.0 0.2703E-01 0.1348E-32 -11.5 0.1426E-01 0.2985E-32 -12.0 0.6789E-02 -.1348E-32 -12.5 0.2879E-02 -.1733E-32 -13.0 0.1072E-02 -.2119E-32 -13.5 0.3448E-03 0.3081E-32 -14.0 0.9421E-04 0.3852E-33 -14.5 0.2148E-04 -.1156E-32 -15.0 0.4006E-05 -.1733E-32 -15.5 0.5984E-06 0.2215E-32 -16.0 0.6994E-07 -.4430E-32 -16.5 0.6230E-08 -.3081E-32 -17.0 0.4105E-09 -.2889E-32 -17.5 0.1934E-10 -.1926E-33 -18.0 0.6266E-12 0.3852E-32 -18.5 0.1335E-13 -.1926E-33 -19.0 0.1777E-15 0.2119E-32 -19.5 0.1396E-17 0.1733E-32 -20.0 0.6076E-20 -.3852E-33 diff --git a/lib/ftrsd/ftrsd_paper/bodide.f90 b/lib/ftrsd/ftrsd_paper/bodide.f90 deleted file mode 100644 index 72e0f13..0000000 --- a/lib/ftrsd/ftrsd_paper/bodide.f90 +++ /dev/null @@ -1,54 +0,0 @@ -program bodide -! Compute probability of word error for a bounded distance decoder. -! Hardwired for non-coherent 64-FSK and the JT65 RS (63,12) code on GF(64). -! -! Let ps be symbol error probability. -! The probability of getting an error pattern with e symbol errors is: -! ps^e * (1-ps)*(n-e) -! The number of error patterns with e errors is binomial(63,e) -! Overall probability of getting a word with e errors is: -! P(e)= binomial(63,e)* ps^e * (1-ps)*(n-e) -! Probability that word is correct is P(0 to 25 errors) = sum{e=0}^{25} P(e) -! Probability that word is wrong is 1-P(0 to 25 errors) -! P_word_error=1-( sum_{e=0}^{t} P(e) ) -! - implicit real*16 (a-h,o-z) - - integer*8 binomial - integer x,s,XX,NN,M - character arg*8 - - nargs=iargc() - if(nargs.ne.1) then - print*,'Probability of word error for noncoherent 64-FSK with bounded distance decoding' - print*,'Usage: bounded_distance D' - print*,'Example: bounded_distance 25' - go to 999 - endif - call getarg(1,arg) - read(arg,*) nt - M=64 - write(*,1012) -1012 format('Es/No P(word error)'/ & - '----------------------') - do isnr=0,40 - esno=10**(isnr/2.0/10.0) - hsum=0.d0 - do k=1,M-1 - h=binomial(M-1,k) - h=h*((-1)**(k+1))/(k+1) - h=h*exp(-esno*k/(k+1)) - hsum=hsum + h - enddo - ps=hsum - hsum=0.d0 - do i=0,nt - h=binomial(63,i) - h=h*ps**i - h=h*(1-ps)**(63-i) - hsum=hsum+h - enddo - pw=1-hsum - write(*,'(f4.1,4x,e10.4,4x,e10.4)') isnr/2.0, ps, pw - enddo -999 end program bodide diff --git a/lib/ftrsd/ftrsd_paper/bodide.lab b/lib/ftrsd/ftrsd_paper/bodide.lab deleted file mode 100644 index 6fa108e..0000000 --- a/lib/ftrsd/ftrsd_paper/bodide.lab +++ /dev/null @@ -1,4 +0,0 @@ -7.5 0.05 BM -6.9 0.015 Theory -5.55 0.05 KV -5.3 0.005 FT diff --git a/lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot b/lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot deleted file mode 100644 index b8bb0ad..0000000 --- a/lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot +++ /dev/null @@ -1,24 +0,0 @@ -# gnuplot script for comparison to theoretical word error rate for -# bounded distance decoding - -# run: gnuplot fig_bodide.gnuplot -# then: pdflatex fig_bodide.tex - -set term epslatex standalone size 6in,2*6/3in -set output "fig_bodide.tex" -set xlabel "$E_b/N_0$ (dB)" -set ylabel "Word Error Rate" -set style func linespoints -set key off -set tics in -set mxtics 2 -set mytics 10 -set grid -set logscale y -plot [3:9] [1e-4:1] \ - "bmdata.dat" using ($1+29.1):(1-$2) with linespoints lt 2 lw 2 pt 2, \ - "ftdata-100000.dat" using ($1+29.1):(1-$3) with linespoints lt 1 lw 2 pt 7, \ - "bmtheory25.dat" using ($1-0.6):3 with linespoints lt 1 pt 5, \ - "kvasd-15.dat" using ($1+29.1):(1-$3) with linespoints lt 4 pt 6, \ - "bodide.lab" with labels - diff --git a/lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot b/lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot deleted file mode 100644 index 9a6c9b0..0000000 --- a/lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot +++ /dev/null @@ -1,14 +0,0 @@ -# gnuplot script for "ntrials_vs_nhard" figure -# run: gnuplot fig_ntrials_vs_nhard.gnuplot -# then: pdflatex fig_ntrials_vs_nhard.tex -# -set term epslatex standalone size 6in,2*6/3in -set output "fig_ntrials_vs_nhard.tex" -set xlabel "Errors in received word, $X$" -set ylabel "Number of trials" -set tics in -set mxtics 5 -set mytics 10 -#set grid -set logscale y -plot "stats-100000-24db-3.dat" using 1:4 pt 12 notitle diff --git a/lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot b/lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot deleted file mode 100644 index 3718e29..0000000 --- a/lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot +++ /dev/null @@ -1,25 +0,0 @@ -# gnuplot script for "Percent copy" figure -# run: gnuplot fig_psuccess.gnuplot -# then: pdflatex fig_psuccess.tex -# -set term epslatex standalone size 6in,4in -set output "fig_psuccess.tex" -set xlabel "SNR in 2500 Hz Bandwidth (dB)" -set ylabel "Percent copy" -set style func linespoints -set key off -set tics in -set mxtics 2 -set mytics 2 -set grid -plot [-30:-18] [0:105] \ - "stats_0.0" using 1:($4)/10.0 with linespoints lt 2 lw 2 pt 2, \ - "stats_0.0" using 1:($5)/10.0 with linespoints lt 1 lw 2 pt 3, \ - "stats_0.0" using 1:($6)/10.0 with linespoints lt 3 lw 2 pt 4, \ - "stats_0.2" using 1:($4)/10.0 with linespoints lt 2 pt 2, \ - "stats_0.2" using 1:($5)/10.0 with linespoints lt 1 pt 3, \ - "stats_0.2" using 1:($6)/10.0 with linespoints lt 3 pt 4, \ - "stats_1.0" using 1:($4)/10.0 with linespoints lt 2 pt 2, \ - "stats_1.0" using 1:($5)/10.0 with linespoints lt 1 pt 3, \ - "stats_1.0" using 1:($6)/10.0 with linespoints lt 3 pt 4, \ - "psuccess.lab" with labels diff --git a/lib/ftrsd/ftrsd_paper/fig_psuccess.pdf b/lib/ftrsd/ftrsd_paper/fig_psuccess.pdf deleted file mode 100644 index 7464629ee65958855ef7969a71dd59b6e8d847d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26687 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�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 Ole5E-lZ(oW!Tkr;7U7)$ diff --git a/lib/ftrsd/ftrsd_paper/fig_subtracted.tiff b/lib/ftrsd/ftrsd_paper/fig_subtracted.tiff deleted file mode 100644 index b6f0f2fad82655a8d603b6b6e1d52e97b7edee0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512012 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 z 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

btmgl)5i%!L*dsx0cdm(Q1dYi$cpSOCXb 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 z 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

LD#cV4>hHd^gE>;96fdDmuTsC2 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͘JJmXn-1_j$clNzo*=nGT+@^aM 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 DpVf*Z diff --git a/lib/ftrsd/ftrsd_paper/fig_waterfall.tiff b/lib/ftrsd/ftrsd_paper/fig_waterfall.tiff deleted file mode 100644 index ae2cbdd684eb2e9238e7edc60f5eddb9b37f3e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538486 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 z 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

PFnVeUfx1ip0v4w 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

lMSbJ~Q~gD

T^$gpzrT=jS$`rvNe#y18Kxf(J077UB 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

f%9ty-`+1bo|H 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

=B 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,X,s) '/ & - '-------------------------------') - - hsum=0.d0 - do ix=x,XX - h=hypergeo(ix,NN,XX,s) - hsum=hsum + h - write(*,1020) ix,h,hsum -1020 format(i3,2d13.4) - enddo - -999 end program prob diff --git a/lib/ftrsd/ftrsd_paper/psuccess.lab b/lib/ftrsd/ftrsd_paper/psuccess.lab deleted file mode 100644 index 21ed973..0000000 --- a/lib/ftrsd/ftrsd_paper/psuccess.lab +++ /dev/null @@ -1,14 +0,0 @@ --21.5 55 BM --24.5 50 FT --27.0 68 DS --25.2 25 0 --25.7 37 0.2 --24.6 16 1.0 --22.6 35 0 --20.9 29 0.2 --19.5 35 1.0 --28.5 25 1.0 --28.2 56 0.2 --28.5 72 0 - - diff --git a/lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat b/lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat deleted file mode 100644 index bd2a10f..0000000 --- a/lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat +++ /dev/null @@ -1,930 +0,0 @@ - 35 19 45 12 - 34 20 46 6 - 35 27 43 4519 - 33 21 44 11 - 32 22 39 8 - 34 21 48 333 - 30 20 42 2 - 38 25 43 12 - 38 25 49 2958 - 28 20 43 10 - 41 29 44 4070 - 32 19 44 1 - 28 19 43 2 - 38 28 43 10421 - 25 0 0 0 - 36 24 42 8 - 38 25 42 243 - 39 25 45 81 - 33 17 39 2 - 38 25 39 157 - 37 27 45 1 - 31 18 39 8 - 35 22 41 2 - 31 20 45 32 - 40 30 45 11123 - 34 25 48 516 - 37 22 49 73 - 32 19 45 2 - 39 25 43 49 - 35 25 42 12 - 43 32 45 3645 - 35 21 45 124 - 39 26 48 31 - 40 26 48 23 - 36 25 43 169 - 33 21 41 8 - 31 21 49 3 - 37 23 46 2 - 32 27 41 8 - 36 23 43 2112 - 29 19 49 4 - 34 24 41 170 - 27 15 44 1 - 34 21 43 2 - 39 25 47 28 - 30 18 43 10 - 37 22 40 8 - 42 33 48 64709 - 36 25 43 10 - 35 20 51 17 - 37 28 45 301 - 34 18 40 9 - 34 25 47 23 - 39 28 43 4856 - 36 24 45 7057 - 35 25 47 769 - 38 28 47 208 - 39 27 47 52290 - 35 22 44 85 - 34 23 48 7 - 37 21 47 82 - 42 25 39 1677 - 29 17 41 8 - 41 24 46 656 - 35 24 43 2 - 38 22 45 10400 - 36 20 42 14 - 33 22 46 2 - 25 0 0 0 - 33 20 45 12 - 30 17 45 1 - 34 20 43 40 - 32 21 42 14 - 28 15 44 1 - 37 23 42 8 - 32 21 40 8 - 39 28 44 65 - 30 17 41 2 - 32 25 44 134 - 38 24 43 12 - 38 23 47 153 - 39 26 42 8 - 37 20 47 35 - 39 27 47 1003 - 36 23 45 215 - 38 28 49 46 - 34 24 47 200 - 35 23 40 8 - 30 19 44 1 - 38 25 43 32 - 32 22 39 103 - 33 23 42 2 - 34 24 47 6 - 33 22 43 13 - 42 28 43 2127 - 34 22 41 113 - 39 30 41 517 - 30 17 42 8 - 32 20 45 1 - 34 20 51 17 - 32 15 39 9 - 37 23 47 223 - 28 15 43 1 - 38 24 42 251 - 41 26 45 2 - 39 25 49 7 - 35 26 47 237 - 32 18 43 25 - 33 23 43 8 - 41 29 43 2667 - 28 17 45 1 - 34 23 47 53 - 32 19 39 9 - 34 24 42 59 - 36 22 44 8 - 34 20 45 59 - 37 24 45 12 - 28 17 44 1 - 41 29 43 24865 - 32 19 46 6 - 33 22 47 6 - 36 20 47 143 - 36 22 47 34 - 33 19 39 9 - 38 22 44 523 - 34 24 42 737 - 36 24 39 170 - 35 22 43 2 - 32 19 48 22 - 33 20 49 76 - 42 24 49 6910 - 37 22 47 94 - 40 24 43 6 - 35 25 45 33 - 29 22 41 2 - 40 24 46 2096 - 37 20 45 135 - 36 26 43 113 - 36 21 43 13 - 37 24 47 49 - 35 24 43 54 - 37 22 43 8 - 35 23 44 2 - 30 20 43 11 - 39 30 47 2870 - 42 33 44 585 - 26 17 45 2 - 41 29 47 79 - 40 24 46 836 - 33 19 45 201 - 34 21 39 13 - 33 21 49 60 - 35 24 44 248 - 33 24 43 24 - 39 29 44 151 - 31 23 46 1 - 36 23 46 1 - 41 27 47 5565 - 42 26 47 378 - 35 27 45 4571 - 40 30 47 6422 - 32 20 42 8 - 38 28 45 449 - 38 26 47 595 - 39 24 47 1555 - 41 25 49 645 - 32 19 40 8 - 35 25 45 97 - 25 0 0 0 - 30 19 44 25 - 31 18 45 1 - 41 24 51 6915 - 34 23 46 1917 - 30 19 43 2 - 35 22 47 20 - 38 23 43 882 - 30 20 48 5 - 37 25 44 919 - 34 20 45 74 - 38 25 46 394 - 39 21 49 738 - 35 20 47 22 - 40 30 47 190 - 41 27 45 1515 - 39 27 49 55 - 35 25 41 994 - 39 27 47 7117 - 37 22 46 19 - 33 21 41 2 - 34 18 47 19 - 30 20 46 6 - 31 21 46 1 - 36 24 47 98 - 40 24 43 39 - 38 25 45 138 - 41 27 47 33 - 40 29 49 2510 - 36 26 43 2 - 34 21 45 1 - 40 26 49 1924 - 36 17 43 2 - 38 27 45 68 - 34 22 45 61 - 32 22 40 8 - 37 19 43 4784 - 32 16 43 8 - 38 27 50 46 - 35 21 43 38 - 35 22 49 4 - 38 27 49 31 - 39 28 47 4677 - 30 18 45 2 - 43 28 47 8235 - 38 28 43 830 - 32 21 47 15 - 37 24 42 10 - 37 23 45 259 - 37 25 45 35 - 40 24 45 524 - 35 19 44 1 - 36 23 45 84 - 36 24 50 17 - 31 20 46 1 - 35 24 42 74 - 42 27 47 1445 - 40 28 48 31 - 36 23 45 151 - 34 22 46 6 - 33 24 49 16 - 30 20 45 2 - 38 22 43 125 - 40 25 49 64 - 35 23 49 86 - 38 24 46 613 - 42 25 47 4232 - 34 24 43 31 - 32 18 41 2 - 37 26 43 70 - 37 27 41 14 - 37 22 39 129 - 38 27 49 3 - 32 22 47 15 - 41 27 41 472 - 38 24 43 25 - 35 28 43 309 - 41 25 47 82 - 40 23 43 8 - 40 21 43 1716 - 38 22 48 5 - 37 20 47 22 - 42 28 43 315 - 32 23 43 79 - 25 0 0 0 - 42 23 47 2245 - 35 24 45 2 - 41 25 44 12 - 36 23 43 1 - 36 19 45 151 - 41 28 45 2207 - 40 27 45 76 - 34 20 47 6 - 41 28 46 370 - 38 20 45 12 - 32 20 43 8 - 39 24 45 8 - 41 27 47 26941 - 35 23 46 3 - 34 25 41 14 - 43 27 47 26905 - 35 25 45 2 - 32 20 50 3 - 31 17 41 2 - 38 26 47 4157 - 33 24 41 2 - 41 29 43 26513 - 35 22 45 297 - 37 26 44 99 - 33 19 43 10 - 39 23 45 138 - 39 26 47 1320 - 33 22 42 2 - 42 32 45 791 - 33 23 51 3 - 38 25 43 8 - 40 27 49 1210 - 43 27 45 32969 - 37 26 49 108 - 38 18 45 1268 - 40 28 49 7810 - 36 25 44 47 - 38 27 48 20 - 34 20 44 10 - 41 27 45 429 - 33 18 43 8 - 29 17 45 1 - 40 25 42 9 - 30 21 49 4 - 37 22 45 10 - 23 0 0 0 - 36 15 45 2509 - 29 21 45 18 - 33 23 45 53 - 43 27 49 7533 - 37 28 45 2652 - 36 24 49 31 - 32 20 43 25 - 42 27 49 1500 - 41 26 45 8 - 40 25 47 152 - 37 26 45 151 - 37 27 43 139 - 34 20 47 4 - 31 21 43 44 - 37 28 45 241 - 35 25 45 422 - 33 22 45 6 - 39 26 48 23 - 38 27 49 359 - 42 26 45 1430 - 36 28 47 116 - 33 23 41 232 - 38 25 47 73 - 35 24 43 16 - 42 29 47 398 - 38 27 49 2203 - 32 20 47 3 - 32 18 48 3 - 36 23 47 44 - 37 24 48 147 - 39 22 45 31 - 31 20 44 1 - 34 21 43 8 - 39 27 47 201 - 34 23 44 12 - 34 24 43 8 - 36 17 46 2 - 41 27 47 8709 - 41 26 45 112 - 37 23 47 216 - 38 24 45 93 - 32 19 45 44 - 34 22 45 8 - 33 24 41 14 - 34 22 41 9 - 35 23 42 136 - 36 26 43 3272 - 34 18 44 40 - 38 25 43 316 - 29 23 39 9 - 35 23 45 2 - 41 29 42 136 - 37 26 43 12 - 34 21 46 43 - 39 21 47 23 - 40 29 49 14666 - 36 19 45 400 - 37 24 43 8 - 35 19 44 2 - 36 26 45 14 - 36 22 43 103 - 33 19 45 6 - 35 24 43 1 - 31 22 43 80 - 35 23 46 22 - 28 18 41 2 - 35 24 45 31 - 34 24 47 46 - 37 24 42 2 - 37 27 43 525 - 31 16 41 9 - 30 18 45 2 - 39 25 47 1416 - 37 24 46 23 - 40 28 49 5 - 39 26 46 2071 - 28 13 42 8 - 31 17 47 3 - 34 22 49 3 - 42 23 47 61 - 30 21 41 2 - 40 23 47 208 - 38 22 48 6 - 35 17 40 8 - 36 20 45 32 - 37 22 47 1116 - 41 28 47 14145 - 43 28 49 96342 - 35 19 45 102 - 31 23 43 8 - 33 20 43 1 - 30 19 46 90 - 41 27 45 19090 - 35 26 45 2942 - 40 25 47 127 - 35 23 45 12 - 37 26 46 76 - 31 19 44 32 - 42 31 49 4951 - 43 30 44 38924 - 35 19 51 17 - 41 31 44 6637 - 33 22 42 2 - 33 25 46 12 - 31 24 44 10 - 27 16 49 4 - 39 24 45 16 - 33 20 40 8 - 39 31 48 5073 - 39 21 47 72 - 35 21 47 3 - 38 27 41 1168 - 35 22 43 8 - 28 18 45 1 - 38 28 40 776 - 33 22 51 3 - 34 22 41 370 - 37 25 43 3210 - 32 24 43 8 - 35 24 46 3 - 39 20 45 41 - 35 17 43 49 - 39 29 46 20 - 31 21 44 1 - 43 24 48 4400 - 36 23 48 350 - 38 29 47 520 - 36 24 45 49 - 39 27 43 493 - 34 15 45 6 - 41 31 43 59993 - 34 24 42 27 - 31 14 41 1 - 40 30 47 13295 - 35 23 47 202 - 36 22 47 35 - 38 26 45 18576 - 34 26 43 54 - 40 30 51 173 - 43 29 47 105 - 34 24 39 9 - 33 20 43 8 - 35 27 45 65 - 31 18 42 2 - 31 21 45 6 - 40 27 45 979 - 36 21 47 3 - 29 14 43 1 - 37 24 47 432 - 39 24 50 4778 - 33 20 44 2 - 40 27 44 7398 - 36 22 47 148 - 35 21 44 11 - 35 22 45 206 - 30 18 42 8 - 40 30 43 8 - 30 22 42 9 - 29 21 39 9 - 41 26 43 1248 - 39 24 43 14 - 38 24 49 605 - 35 20 42 155 - 33 22 47 53 - 34 20 43 10 - 35 26 49 21 - 31 18 45 1 - 32 19 39 9 - 31 20 43 19 - 41 23 41 157 - 36 23 42 9 - 28 19 45 1 - 33 19 43 10 - 38 22 44 25 - 29 19 41 2 - 34 19 42 8 - 35 21 39 9 - 34 23 45 2 - 41 30 47 71025 - 40 26 48 3059 - 36 24 45 1346 - 35 19 47 34 - 36 25 45 112 - 39 27 41 7065 - 38 24 47 4 - 29 18 42 1 - 30 20 41 2 - 32 22 49 3 - 40 29 45 4589 - 38 25 42 234 - 42 28 49 3171 - 35 22 45 34 - 39 24 41 5693 - 29 20 43 2 - 29 16 44 14 - 37 25 45 19 - 36 18 44 8 - 36 27 45 1224 - 38 28 47 8906 - 29 15 51 3 - 33 20 47 46 - 33 17 41 9 - 40 22 45 1775 - 32 22 45 8 - 35 21 43 8 - 38 24 41 9 - 41 22 47 10005 - 36 27 43 12 - 33 21 47 35 - 35 21 39 9 - 34 22 44 2 - 34 17 45 67 - 31 18 45 1 - 34 21 46 32 - 35 26 44 1 - 34 23 44 8 - 31 24 47 3 - 43 23 49 9210 - 40 20 48 114 - 36 25 42 8 - 37 24 46 336 - 37 23 43 138 - 38 26 47 89 - 38 24 47 6494 - 30 18 45 1 - 43 28 47 677 - 31 23 48 3 - 32 19 43 1 - 36 23 44 19 - 43 30 47 81276 - 37 22 48 106 - 37 24 45 12 - 37 22 45 68 - 28 17 43 24 - 43 28 45 1446 - 40 30 46 2753 - 35 23 44 1 - 28 16 43 2 - 29 19 42 2 - 31 21 42 2 - 39 26 48 98 - 41 30 47 21848 - 35 22 47 5 - 40 31 45 448 - 34 23 45 94 - 29 17 42 8 - 39 30 46 1231 - 41 22 47 49 - 30 15 51 7 - 35 26 41 9 - 29 17 49 7 - 33 22 43 12 - 33 19 46 5 - 35 24 45 12 - 33 22 42 9 - 34 18 43 13 - 36 21 43 63 - 37 27 45 32 - 37 23 49 474 - 31 17 46 19 - 38 24 41 2 - 40 28 47 1621 - 39 25 47 214 - 32 21 42 19 - 34 22 47 105 - 35 26 42 2 - 35 21 44 13 - 40 25 47 556 - 39 27 49 3 - 36 25 45 32 - 39 27 41 10 - 35 20 45 1 - 28 17 45 1 - 35 23 47 6 - 33 20 50 137 - 34 22 43 177 - 30 19 41 9 - 33 23 47 579 - 33 22 39 9 - 39 20 42 74 - 42 28 47 112 - 40 29 44 197 - 36 23 43 2 - 30 17 49 3 - 37 27 45 3815 - 35 24 43 74 - 35 22 47 24 - 40 27 46 82 - 36 25 41 366 - 33 23 44 1 - 37 21 40 131 - 34 22 45 16 - 36 24 45 306 - 39 26 47 82 - 29 17 45 1 - 36 23 48 3 - 35 20 44 63 - 35 23 46 5 - 39 25 43 792 - 32 22 49 5 - 35 23 41 9 - 37 24 41 12711 - 41 32 43 36575 - 34 23 42 8 - 31 21 43 2 - 35 24 41 2 - 35 24 39 8 - 37 23 48 75 - 35 19 43 12 - 40 25 49 914 - 38 22 49 60 - 34 19 42 10 - 42 33 44 9038 - 37 27 45 1849 - 29 20 42 138 - 37 27 43 332 - 36 26 45 36 - 32 18 45 6 - 37 25 46 4676 - 29 18 45 6 - 34 22 43 8 - 41 32 45 1966 - 30 18 42 12 - 33 20 45 1 - 31 23 45 6 - 30 21 46 1 - 36 21 43 14 - 34 18 45 37 - 42 32 47 3508 - 41 32 41 13 - 37 25 45 719 - 33 20 45 111 - 38 28 42 8 - 35 23 43 14 - 39 23 47 123 - 28 13 44 1 - 34 19 41 38 - 35 21 43 8 - 33 26 47 124 - 30 18 41 9 - 43 30 46 11935 - 40 28 48 2329 - 35 19 45 286 - 30 21 43 80 - 37 21 49 474 - 41 27 49 1560 - 42 24 46 1802 - 38 28 42 6807 - 38 24 43 63 - 33 24 49 35 - 41 27 41 9795 - 29 16 41 2 - 29 17 43 2 - 34 21 45 125 - 39 28 45 1008 - 34 21 42 8 - 36 23 45 2 - 34 22 41 8 - 34 21 41 74 - 37 21 43 262 - 30 18 41 8 - 33 22 49 3 - 33 21 42 1 - 35 28 49 21 - 31 19 43 1 - 36 24 44 10 - 40 23 49 583 - 33 19 37 9 - 32 21 45 6 - 38 24 47 15 - 42 27 47 2847 - 36 28 45 106 - 39 28 43 53 - 30 16 42 2 - 28 18 49 3 - 33 21 44 1 - 36 24 45 3050 - 37 27 40 8 - 35 19 43 12 - 41 29 43 19008 - 21 0 0 0 - 38 26 41 762 - 33 21 46 12 - 41 26 47 14517 - 33 24 49 3 - 41 31 47 287 - 35 24 51 17 - 37 27 42 38 - 34 22 43 24 - 39 26 46 135 - 38 26 41 493 - 35 22 42 8 - 38 24 41 1082 - 32 23 42 1 - 33 24 40 8 - 37 25 48 640 - 28 14 39 9 - 39 20 45 212 - 37 29 45 610 - 34 26 47 57 - 29 21 41 8 - 35 16 45 53 - 35 21 44 2 - 38 26 48 188 - 34 25 41 10 - 36 23 44 8 - 35 21 45 8 - 35 26 41 8 - 37 26 40 9 - 28 12 43 1 - 34 22 51 3 - 35 25 44 13 - 32 16 44 32 - 32 19 45 143 - 29 17 43 1 - 35 22 43 93 - 38 21 43 99 - 36 26 49 242 - 34 22 45 8 - 40 24 45 136 - 40 24 48 88 - 38 21 46 49 - 40 27 49 116 - 41 26 44 3696 - 35 23 42 8 - 28 15 45 104 - 33 21 43 106 - 35 25 45 31 - 33 24 40 113 - 36 24 46 23 - 37 25 45 334 - 32 21 46 12 - 35 21 41 2 - 36 22 45 8 - 37 18 43 13 - 37 26 47 48 - 39 25 46 400 - 37 27 43 174 - 37 23 47 41 - 40 21 47 1811 - 38 26 45 79 - 26 15 43 1 - 39 27 49 19 - 31 19 44 1 - 37 22 43 8 - 32 24 38 9 - 34 23 48 3 - 37 24 51 22 - 27 18 42 2 - 31 22 47 5 - 33 17 41 2 - 40 28 45 14534 - 37 21 47 5 - 27 15 43 2 - 43 26 47 46658 - 39 22 43 8 - 36 23 41 2 - 31 19 43 12 - 36 24 43 10 - 33 20 43 149 - 30 19 47 3 - 39 27 51 1236 - 41 26 45 4744 - 39 22 47 100 - 32 18 44 6 - 32 21 43 54 - 40 30 46 777 - 35 25 43 355 - 36 24 41 138 - 40 30 47 3056 - 39 28 46 19 - 34 21 46 6 - 34 18 46 52 - 36 27 41 232 - 35 25 51 3 - 36 28 44 110 - 33 23 45 1 - 37 22 46 64301 - 39 23 49 41 - 39 30 40 25 - 36 23 48 6 - 29 17 42 2 - 36 23 44 1 - 32 17 43 40 - 32 16 49 86 - 29 19 49 5 - 38 26 41 9 - 40 28 43 56710 - 41 29 45 1711 - 36 23 49 345 - 35 25 43 8 - 35 24 46 19 - 37 23 41 648 - 30 18 45 1 - 30 21 43 1 - 34 20 45 12 - 42 25 47 431 - 40 27 41 15878 - 34 22 43 8 - 41 29 48 49 - 32 21 43 2 - 37 22 43 2 - 39 28 49 86 - 43 28 45 8032 - 41 30 49 15674 - 34 22 48 17 - 36 24 48 107 - 28 20 44 1 - 43 28 48 1986 - 40 25 47 2585 - 38 21 43 59 - 38 28 41 167 - 34 22 39 9 - 43 27 48 4196 - 32 20 44 120 - 33 25 45 99 - 26 12 42 2 - 26 15 47 4 - 37 21 42 10 - 35 25 49 3 - 42 30 49 11151 - 33 20 44 2 - 39 26 45 65238 - 31 16 40 2 - 38 26 39 8 - 36 22 45 82 - 32 22 49 7 - 33 20 45 2 - 40 24 43 12 - 32 18 50 3 - 31 21 40 2 - 34 18 44 2 - 38 28 46 194 - 36 21 43 12 - 32 20 43 8 - 30 18 42 2 - 37 21 47 31 - 36 23 47 15 - 36 21 45 113 - 34 23 44 1 - 43 29 49 3889 - 37 24 47 32 - 41 22 43 243 - 38 25 47 707 - 35 22 43 18399 - 33 22 45 123 - 37 24 42 8 - 39 25 47 1087 - 34 23 47 107 - 32 21 42 2 - 42 25 47 106 - 39 24 42 13560 - 42 29 49 52387 - 38 27 43 59 - 31 18 39 9 - 40 28 48 41 - 37 25 45 11 - 30 23 45 242 - 38 23 47 1673 - 36 23 45 751 - 29 22 41 2 - 36 19 48 3 - 36 22 45 12 - 35 18 47 20 - 40 28 49 17369 - 29 19 46 2 - 36 26 42 25 - 42 30 49 4767 - 30 20 45 6 - 35 24 44 12 - 41 24 42 1537 - 38 25 47 629 - 31 21 44 2 - 34 22 43 1 - 33 20 47 3 - 34 20 43 8 - 40 26 49 4320 - 31 16 43 9 - 34 22 45 8 - 32 22 46 124 - 32 20 43 13 - 40 28 47 1185 - 41 24 45 30643 - 39 23 43 1658 - 33 23 44 8 - 36 22 46 23 - 41 25 47 114 - 36 21 42 12 - 33 19 48 31 - 42 28 48 76 - 29 22 39 9 - 36 21 47 3 - 37 27 45 282 - 42 29 46 24995 - 36 26 39 9 - 40 25 46 123 - 39 26 41 8 - 41 30 45 3143 - 34 20 41 27 - 38 31 42 17297 - 40 24 51 3052 - 36 28 45 190 - 31 23 42 8 - 42 26 42 68 - 39 31 45 37327 - 37 27 41 8 - 36 20 45 76 - 38 26 42 10 - 36 21 45 63 - 40 31 43 140 - 40 27 49 21 - 31 22 36 9 - 34 22 39 9 - 29 17 43 2 - 36 26 45 61 - 38 23 45 15 - 31 21 43 54 - 36 22 41 93 - 31 18 43 2 - 35 25 49 108 - 41 29 45 18292 - 37 25 45 104 - 28 20 41 2 - 35 26 46 35 - 34 20 46 19 - 38 22 51 183 - 34 14 43 8 - 32 23 43 16 - 27 17 44 1 - 29 15 42 2 - 37 26 41 129 diff --git a/lib/ftrsd/ftrsd_paper/stats_0.0 b/lib/ftrsd/ftrsd_paper/stats_0.0 deleted file mode 100644 index 75c9778..0000000 --- a/lib/ftrsd/ftrsd_paper/stats_0.0 +++ /dev/null @@ -1,27 +0,0 @@ - SNR Files Sync BM FT Hint Total False BadSync --------------------------------------------------------- --18.0 1000 1000 1000 1000 1000 1000 0 0 --18.5 1000 1000 1000 1000 1000 1000 0 0 --19.0 1000 1000 1000 1000 1000 1000 0 0 --19.5 1000 1000 1000 1000 1000 1000 0 0 --20.0 1000 1000 1000 1000 1000 1000 0 0 --20.5 1000 1000 1000 1000 1000 1000 0 0 --21.0 1000 1000 1000 1000 1000 1000 0 0 --21.5 1000 1000 991 1000 1000 1000 0 0 --22.0 1000 1000 918 1000 1000 1000 0 0 --22.5 1000 1000 631 1000 1000 1000 0 0 --23.0 1000 1000 261 1000 1000 1000 0 0 --23.5 1000 1000 57 990 1000 1000 0 0 --24.0 1000 1000 0 925 1000 1000 0 0 --24.5 1000 1000 0 737 1000 1000 0 0 --25.0 1000 999 0 445 999 999 1 ? --25.5 1000 996 0 191 996 996 2 ? --26.0 1000 980 0 68 985 985 3 ? --26.5 1000 953 0 18 975 975 3 ? --27.0 1000 904 0 3 926 926 4 ? --27.5 1000 816 0 2 874 874 3 ? --28.0 1000 722 0 0 786 786 7 ? --28.5 1000 590 0 0 616 616 12 ? --29.0 1000 451 0 0 479 479 15 ? --29.5 1000 355 0 0 303 303 27 ? --30.0 1000 277 0 0 173 173 28 ? diff --git a/lib/ftrsd/ftrsd_paper/stats_0.2 b/lib/ftrsd/ftrsd_paper/stats_0.2 deleted file mode 100644 index 1e0cb00..0000000 --- a/lib/ftrsd/ftrsd_paper/stats_0.2 +++ /dev/null @@ -1,27 +0,0 @@ - SNR Files Sync BM FT Hint Total False BadSync --------------------------------------------------------- --18.0 1000 998 973 998 998 998 0 2 --18.5 1000 1000 960 1000 1000 1000 0 0 --19.0 1000 1000 917 1000 1000 1000 0 0 --19.5 1000 1000 849 1000 1000 1000 0 0 --20.0 1000 1000 725 1000 1000 1000 0 0 --20.5 1000 1000 549 1000 1000 1000 0 0 --21.0 1000 1000 373 1000 1000 1000 0 0 --21.5 1000 1000 216 1000 1000 1000 0 0 --22.0 1000 1000 100 998 1000 1000 0 0 --22.5 1000 1000 32 998 1000 1000 0 0 --23.0 1000 1000 12 991 1000 1000 0 0 --23.5 1000 998 2 958 1000 1000 0 2 --24.0 1000 992 0 878 998 998 1 8 --24.5 1000 986 0 739 995 995 0 14 --25.0 1000 977 0 533 991 991 0 23 --25.5 1000 959 0 324 975 975 3 41 --26.0 1000 930 0 153 953 953 1 70 --26.5 1000 874 0 51 924 924 8 126 --27.0 1000 808 0 14 866 866 6 192 --27.5 1000 716 0 3 799 799 10 284 --28.0 1000 610 0 1 689 689 14 390 --28.5 1000 497 0 0 596 596 19 503 --29.0 1000 399 0 0 451 451 21 601 --29.5 1000 300 0 0 270 270 27 700 --30.0 1000 243 0 0 172 172 26 757 diff --git a/lib/ftrsd/ftrsd_paper/stats_1.0 b/lib/ftrsd/ftrsd_paper/stats_1.0 deleted file mode 100644 index 34f94c6..0000000 --- a/lib/ftrsd/ftrsd_paper/stats_1.0 +++ /dev/null @@ -1,27 +0,0 @@ - SNR Files Sync BM FT Hint Total False BadSync --------------------------------------------------------- --18.0 1000 998 917 998 998 998 1 2 --18.5 1000 998 824 998 998 998 0 2 --19.0 1000 999 695 999 999 999 0 1 --19.5 1000 999 504 999 999 999 0 1 --20.0 1000 1000 300 1000 1000 1000 0 0 --20.5 1000 1000 148 1000 1000 1000 0 0 --21.0 1000 1000 56 1000 1000 1000 0 0 --21.5 1000 1000 10 1000 1000 1000 0 0 --22.0 1000 999 3 995 1000 1000 0 1 --22.5 1000 998 0 972 1000 1000 0 2 --23.0 1000 997 0 899 999 999 0 3 --23.5 1000 996 0 758 999 999 0 4 --24.0 1000 990 0 545 999 999 0 10 --24.5 1000 981 0 305 988 988 2 19 --25.0 1000 964 0 128 987 987 0 36 --25.5 1000 930 0 43 956 956 4 70 --26.0 1000 870 0 15 932 932 4 130 --26.5 1000 810 0 4 889 889 8 190 --27.0 1000 737 0 0 798 798 9 263 --27.5 1000 632 0 0 650 650 10 368 --28.0 1000 522 0 0 526 526 15 478 --28.5 1000 426 0 0 383 383 19 574 --29.0 1000 332 0 0 226 226 34 668 --29.5 1000 260 0 0 136 136 32 740 --30.0 1000 209 0 0 64 64 47 791 diff --git a/lib/ftrsd/ftrsd_paper/wer.lab b/lib/ftrsd/ftrsd_paper/wer.lab deleted file mode 100644 index e69de29..0000000 diff --git a/lib/ftrsd/ftrsd_paper/wer2.lab b/lib/ftrsd/ftrsd_paper/wer2.lab deleted file mode 100644 index b3440f8..0000000 --- a/lib/ftrsd/ftrsd_paper/wer2.lab +++ /dev/null @@ -1,7 +0,0 @@ --25.7 30 $10^5$ --25.25 36 $10^4$ --24.5 44 $10^3$ --24.15 48 $10^2$ --23.7 44 10 --22.5 48 BM --25.2 24 KV \ No newline at end of file diff --git a/lib/ftrsd/ftrsdap.c b/lib/ftrsd/ftrsdap.c deleted file mode 100644 index b2b85dd..0000000 --- a/lib/ftrsd/ftrsdap.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - ftrsdap.c - - A soft-decision decoder for the JT65 (63,12) Reed-Solomon code. - - This decoding scheme is built around Phil Karn's Berlekamp-Massey - errors and erasures decoder. The approach is inspired by a number of - publications, including the stochastic Chase decoder described - in "Stochastic Chase Decoding of Reed-Solomon Codes", by Leroux et al., - IEEE Communications Letters, Vol. 14, No. 9, September 2010 and - "Soft-Decision Decoding of Reed-Solomon Codes Using Successive Error- - and-Erasure Decoding," by Soo-Woong Lee and B. V. K. Vijaya Kumar. - - Steve Franke K9AN and Joe Taylor K1JT - */ - -#include -#include -#include -#include -#include -#include "../ftrsd/rs2.h" - -static void *rs; -void getpp_(int workdat[], float *pp); - -void ftrsdap_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], - int ap[], int* ntrials0, int correct[], int param[], int ntry[]) -{ - int rxdat[63], rxprob[63], rxdat2[63], rxprob2[63]; - int workdat[63]; - int indexes[63]; - int era_pos[51]; - int i, j, numera, nerr, nn=63; - int ntrials = *ntrials0; - int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768; - int ntotal=0,ntotal_min=32768,ncandidates; - int nera_best=0; - float pp,pp1,pp2; - static unsigned int nseed; - -// Power-percentage symbol metrics - composite gnnf/hf - int perr[8][8] = { - { 4, 9, 11, 13, 14, 14, 15, 15}, - { 2, 20, 20, 30, 40, 50, 50, 50}, - { 7, 24, 27, 40, 50, 50, 50, 50}, - {13, 25, 35, 46, 52, 70, 50, 50}, - {17, 30, 42, 54, 55, 64, 71, 70}, - {25, 39, 48, 57, 64, 66, 77, 77}, - {32, 45, 54, 63, 66, 75, 78, 83}, - {51, 58, 57, 66, 72, 77, 82, 86}}; - - -// Initialize the KA9Q Reed-Solomon encoder/decoder - unsigned int symsize=6, gfpoly=0x43, fcr=3, prim=1, nroots=51; - rs=init_rs_int(symsize, gfpoly, fcr, prim, nroots, 0); - -// Reverse the received symbol vectors for BM decoder - for (i=0; i<63; i++) { - rxdat[i]=mrsym[62-i]; - rxprob[i]=mrprob[62-i]; - rxdat2[i]=mr2sym[62-i]; - rxprob2[i]=mr2prob[62-i]; - } - -// Set ap symbols and ap mask - for (i=0; i<12; i++) { - if(ap[i]>=0) { - rxdat[11-i]=ap[i]; - rxprob2[11-i]=-1; - } - } - -// Sort rxprob to find indexes of the least reliable symbols - int k, pass, tmp, nsym=63; - int probs[63]; - for (i=0; i<63; i++) { - indexes[i]=i; - probs[i]=rxprob[i]; - } - for (pass = 1; pass <= nsym-1; pass++) { - for (k = 0; k < nsym - pass; k++) { - if( probs[k] < probs[k+1] ) { - tmp = probs[k]; - probs[k] = probs[k+1]; - probs[k+1] = tmp; - tmp = indexes[k]; - indexes[k] = indexes[k+1]; - indexes[k+1] = tmp; - } - } - } - -// See if we can decode using BM HDD, and calculate the syndrome vector. - memset(era_pos,0,51*sizeof(int)); - numera=0; - memcpy(workdat,rxdat,sizeof(rxdat)); - nerr=decode_rs_int(rs,workdat,era_pos,numera,1); - if( nerr >= 0 ) { - // Hard-decision decoding succeeded. Save codeword and some parameters. - nhard=0; - for (i=0; i<63; i++) { - if( workdat[i] != rxdat[i] ) nhard=nhard+1; - } - memcpy(correct,workdat,63*sizeof(int)); - param[0]=0; - param[1]=nhard; - param[2]=0; - param[3]=0; - param[4]=0; - param[5]=0; - param[7]=1000*1000; - ntry[0]=0; - return; - } - -/* -Hard-decision decoding failed. Try the FT soft-decision method. -Generate random erasure-locator vectors and see if any of them -decode. This will generate a list of "candidate" codewords. The -soft distance between each candidate codeword and the received -word is estimated by finding the largest (pp1) and second-largest -(pp2) outputs from a synchronized filter-bank operating on the -symbol spectra, and using these to decide which candidate -codeword is "best". -*/ - - nseed=1; //Seed for random numbers - float ratio; - int thresh, nsum; - int thresh0[63]; - ncandidates=0; - nsum=0; - int ii,jj; - for (i=0; i=0 ) { - ratio = (float)rxprob2[j]/((float)rxprob[j]+0.01); - ii = 7.999*ratio; - jj = (62-i)/8; - thresh0[i] = 1.3*perr[ii][jj]; - } else { - thresh0[i] = 0.0; - } -//printf("%d %d %d\n",i,j,rxdat[i]); - } - - if(nsum<=0) return; - - pp1=0.0; - pp2=0.0; - for (k=1; k<=ntrials; k++) { - memset(era_pos,0,51*sizeof(int)); - memcpy(workdat,rxdat,sizeof(rxdat)); - -/* -Mark a subset of the symbols as erasures. -Run through the ranked symbols, starting with the worst, i=0. -NB: j is the symbol-vector index of the symbol with rank i. -*/ - numera=0; - for (i=0; i= 0 ) { - // We have a candidate codeword. Find its hard and soft distance from - // the received word. Also find pp1 and pp2 from the full array - // s3(64,63) of synchronized symbol spectra. - ncandidates=ncandidates+1; - nhard=0; - nsoft=0; - for (i=0; i<63; i++) { - if(workdat[i] != rxdat[i]) { - nhard=nhard+1; - if(workdat[i] != rxdat2[i]) { - nsoft=nsoft+rxprob[i]; - } - } - } - nsoft=63*nsoft/nsum; - ntotal=nsoft+nhard; - - getpp_(workdat,&pp); - if(pp>pp1) { - pp2=pp1; - pp1=pp; - nsoft_min=nsoft; - nhard_min=nhard; - ntotal_min=ntotal; - memcpy(correct,workdat,63*sizeof(int)); - nera_best=numera; - ntry[0]=k; - } else { - if(pp>pp2 && pp!=pp1) pp2=pp; - } - if(nhard_min <= 41 && ntotal_min <= 71) break; - } - if(k == ntrials) ntry[0]=k; - } - - param[0]=ncandidates; - param[1]=nhard_min; - param[2]=nsoft_min; - param[3]=nera_best; - param[4]=1000.0*pp2/pp1; - param[5]=ntotal_min; - param[6]=ntry[0]; - param[7]=1000.0*pp2; - param[8]=1000.0*pp1; - if(param[0]==0) param[2]=-1; - return; -} diff --git a/lib/ftrsd/init_rs.c b/lib/ftrsd/init_rs.c deleted file mode 100644 index 4b1d1ed..0000000 --- a/lib/ftrsd/init_rs.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Initialize a RS codec - * - * Copyright 2002 Phil Karn, KA9Q - * May be used under the terms of the GNU General Public License (GPL) - */ -#include - -#ifdef CCSDS -#include "ccsds.h" -#elif defined(BIGSYM) -#include "int.h" -#else -#include "char.h" -#endif - -void FREE_RS(void *p){ - struct rs *rs = (struct rs *)p; - - free(rs->alpha_to); - free(rs->index_of); - free(rs->genpoly); - free(rs); -} - -/* Initialize a Reed-Solomon codec - * symsize = symbol size, bits (1-8) - * gfpoly = Field generator polynomial coefficients - * fcr = first root of RS code generator polynomial, index form - * prim = primitive element to generate polynomial roots - * nroots = RS code generator polynomial degree (number of roots) - */ -void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned fcr,unsigned prim, - unsigned int nroots){ - struct rs *rs; - int i, j, sr,root,iprim; - - if(symsize > 8*sizeof(DTYPE)) - return NULL; /* Need version with ints rather than chars */ - - if(fcr >= (1<= (1<= (1<mm = symsize; - rs->nn = (1<alpha_to = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1)); - if(rs->alpha_to == NULL){ - free(rs); - return NULL; - } - rs->index_of = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1)); - if(rs->index_of == NULL){ - free(rs->alpha_to); - free(rs); - return NULL; - } - - /* Generate Galois field lookup tables */ - rs->index_of[0] = A0; /* log(zero) = -inf */ - rs->alpha_to[A0] = 0; /* alpha**-inf = 0 */ - sr = 1; - for(i=0;inn;i++){ - rs->index_of[sr] = i; - rs->alpha_to[i] = sr; - sr <<= 1; - if(sr & (1<nn; - } - if(sr != 1){ - /* field generator polynomial is not primitive! */ - free(rs->alpha_to); - free(rs->index_of); - free(rs); - return NULL; - } - - /* Form RS code generator polynomial from its roots */ - rs->genpoly = (DTYPE *)malloc(sizeof(DTYPE)*(nroots+1)); - if(rs->genpoly == NULL){ - free(rs->alpha_to); - free(rs->index_of); - free(rs); - return NULL; - } - rs->fcr = fcr; - rs->prim = prim; - rs->nroots = nroots; - - /* Find prim-th root of 1, used in decoding */ - for(iprim=1;(iprim % prim) != 0;iprim += rs->nn) - ; - rs->iprim = iprim / prim; - - rs->genpoly[0] = 1; - for (i = 0,root=fcr*prim; i < nroots; i++,root += prim) { - rs->genpoly[i+1] = 1; - - /* Multiply rs->genpoly[] by @**(root + x) */ - for (j = i; j > 0; j--){ - if (rs->genpoly[j] != 0) - rs->genpoly[j] = rs->genpoly[j-1] ^ rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[j]] + root)]; - else - rs->genpoly[j] = rs->genpoly[j-1]; - } - /* rs->genpoly[0] can never be zero */ - rs->genpoly[0] = rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[0]] + root)]; - } - /* convert rs->genpoly[] to index form for quicker encoding */ - for (i = 0; i <= nroots; i++) - rs->genpoly[i] = rs->index_of[rs->genpoly[i]]; - - return rs; -} diff --git a/lib/ftrsd/int.h b/lib/ftrsd/int.h deleted file mode 100644 index ada5bfd..0000000 --- a/lib/ftrsd/int.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Include file to configure the RS codec for integer symbols - * - * Copyright 2002, Phil Karn, KA9Q - * May be used under the terms of the GNU General Public License (GPL) - */ -#define DTYPE int - -/* Reed-Solomon codec control block */ -struct rs { - unsigned int mm; /* Bits per symbol */ - unsigned int nn; /* Symbols per block (= (1<= rs->nn) { - x -= rs->nn; - x = (x >> rs->mm) + (x & rs->nn); - } - return x; -} -#define MODNN(x) modnn(rs,x) - -#define MM (rs->mm) -#define NN (rs->nn) -#define ALPHA_TO (rs->alpha_to) -#define INDEX_OF (rs->index_of) -#define GENPOLY (rs->genpoly) -#define NROOTS (rs->nroots) -#define FCR (rs->fcr) -#define PRIM (rs->prim) -#define IPRIM (rs->iprim) -#define A0 (NN) - -#define ENCODE_RS encode_rs_int -#define DECODE_RS decode_rs_int -#define INIT_RS init_rs_int -#define FREE_RS free_rs_int - -void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); -int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras, int calc_syn); -void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr, - unsigned int prim,unsigned int nroots); -void FREE_RS(void *p); - - - - diff --git a/lib/ftrsd/rs2.h b/lib/ftrsd/rs2.h deleted file mode 100644 index c2b807d..0000000 --- a/lib/ftrsd/rs2.h +++ /dev/null @@ -1,16 +0,0 @@ -/* User include file for the Reed-Solomon codec - * Copyright 2002, Phil Karn KA9Q - * May be used under the terms of the GNU General Public License (GPL) - */ - -/* General purpose RS codec, integer symbols */ -void encode_rs_int(void *rs,int *data,int *parity); -int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras, int calc_syn); -void *init_rs_int(int symsize,int gfpoly,int fcr, - int prim,int nroots,int pad); -void free_rs_int(void *rs); - -/* Tables to map from conventional->dual (Taltab) and - * dual->conventional (Tal1tab) bases - */ -extern unsigned char Taltab[],Tal1tab[]; diff --git a/lib/ftrsd/rsdtest.f90 b/lib/ftrsd/rsdtest.f90 deleted file mode 100644 index 2c862e5..0000000 --- a/lib/ftrsd/rsdtest.f90 +++ /dev/null @@ -1,34 +0,0 @@ -program rsdtest - - real s3(64,63) - character msg*22,arg*12 - integer param(0:7) - - nargs=iargc() - if(nargs.ne.2) then - print*,'Usage: rsdtest ntrials nfiles' - go to 999 - endif - call getarg(1,arg) - read(arg,*) ntrials - call getarg(2,arg) - read(arg,*) nfiles - - open(10,file='s3_1000.bin',access='stream', status='old') - open(22,file='kvasd.dat',access='direct',recl=1024,status='unknown') - - nadd=1 - ifile0=0 - if(nfiles.lt.0) then - ifile0=-nfiles - nfiles=99999 - endif - - do ifile=1,nfiles - read(10,end=999) s3 - if(ifile.lt.ifile0) cycle - call extract2(s3,nadd,ntrials,param,msg) - if(ifile.eq.ifile0) exit - enddo - -999 end program rsdtest diff --git a/lib/ftrsd/sfrsd.c b/lib/ftrsd/sfrsd.c deleted file mode 100644 index e64dfc9..0000000 --- a/lib/ftrsd/sfrsd.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - sfrsd.c - - A soft-decision decoder for the JT65 (63,12) Reed-Solomon code. - - This decoding scheme is built around Phil Karn's Berlekamp-Massey - errors and erasures decoder. The approach is inspired by a number of - publications, including the stochastic Chase decoder described - in "Stochastic Chase Decoding of Reed-Solomon Codes", by Leroux et al., - IEEE Communications Letters, Vol. 14, No. 9, September 2010 and - "Soft-Decision Decoding of Reed-Solomon Codes Using Successive Error- - and-Erasure Decoding," by Soo-Woong Lee and B. V. K. Vijaya Kumar. - - Steve Franke K9AN, Urbana IL, September 2015 - */ - -#include -#include -#include -#include -#include -#include "sfrsd2.h" - -//*************************************************************************** -void usage(void) -{ - printf("Usage: sfrsd [options...] \n"); - printf(" input file should be in kvasd format\n"); - printf("\n"); - printf("Options:\n"); - printf(" -n number of random erasure vectors to try\n"); - printf(" -v verbose\n"); -} - -int main(int argc, char *argv[]){ - - extern char *optarg; - extern int optind; - - int correct[63], indx[63], param[8]; - int c,i; - char *infile; - - FILE *datfile, *logfile; - int nsec, maxe, nads; - float xlambda; - int mrsym[63],mrprob[63],mr2sym[63],mr2prob[63]; - int nsec2,ncount,dat4[12]; - int ntrials, nverbose, ntry; - int nhard; - double tt; - - ntrials=10000; - nverbose=1; - - while ( (c = getopt(argc, argv, "n:qv")) !=-1 ) { - switch (c) { - case 'n': - ntrials=(int)strtof(optarg,NULL); - printf("ntrials set to %d\n",ntrials); - break; - case 'v': - nverbose=1; - break; - case 'q': //accept (and ignore) -q option for WSJT10 compatibility - break; - case '?': - usage(); - exit(1); - } - } - - if( optind+1 > argc) { - // usage(); - // exit(1); - infile="kvasd.dat"; - } else { - infile=argv[optind]; - } - - logfile=fopen("/tmp/sfrsd.log","a"); - if( !logfile ) { - printf("Unable to open sfrsd.log\n"); - exit(1); - } - - datfile=fopen(infile,"rb"); - if( !datfile ) { - printf("Unable to open kvasd.dat\n"); - exit(1); - } else { - fread(&nsec,sizeof(int),1,datfile); - fread(&xlambda,sizeof(float),1,datfile); - fread(&maxe,sizeof(int),1,datfile); - fread(&nads,sizeof(int),1,datfile); - fread(&mrsym,sizeof(int),63,datfile); - fread(&mrprob,sizeof(int),63,datfile); - fread(&mr2sym,sizeof(int),63,datfile); - fread(&mr2prob,sizeof(int),63,datfile); - fread(&nsec2,sizeof(int),1,datfile); - fread(&ncount,sizeof(int),1,datfile); - fread(&dat4,sizeof(int),12,datfile); - fclose(datfile); - } - - sfrsd2_(mrsym,mrprob,mr2sym,mr2prob,&ntrials,&nverbose,correct,param,indx,&tt,&ntry); - nhard=param[1]; - if( nhard>=0 ) { - for (i=0; i<12; i++) { - dat4[i]=correct[11-i]; - } - } else { - nhard=-1; - memset(dat4,0,12*sizeof(int)); - } - datfile=fopen(infile,"wb"); - if( !datfile ) { - printf("Unable to open kvasd.dat\n"); - return 1; - } else { - fwrite(&nsec,sizeof(int),1,datfile); - fwrite(&xlambda,sizeof(float),1,datfile); - fwrite(&maxe,sizeof(int),1,datfile); - fwrite(&nads,sizeof(int),1,datfile); - fwrite(&mrsym,sizeof(int),63,datfile); - fwrite(&mrprob,sizeof(int),63,datfile); - fwrite(&mr2sym,sizeof(int),63,datfile); - fwrite(&mr2prob,sizeof(int),63,datfile); - fwrite(&nsec2,sizeof(int),1,datfile); - fwrite(&nhard,sizeof(int),1,datfile); - fwrite(&dat4,sizeof(int),12,datfile); - fclose(datfile); - } - exit(0); -} - - diff --git a/lib/ftrsd/sfrsd2.h b/lib/ftrsd/sfrsd2.h deleted file mode 100644 index 4ef7ab4..0000000 --- a/lib/ftrsd/sfrsd2.h +++ /dev/null @@ -1,3 +0,0 @@ -void ftrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], - int* ntrials0, int* verbose0, int correct[], int param[], - int indexes[], double tt[], int ntry[]); diff --git a/lib/ftrsd/sfrsd3.c b/lib/ftrsd/sfrsd3.c deleted file mode 100644 index f117dcc..0000000 --- a/lib/ftrsd/sfrsd3.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - sfrsd2.c - - A soft-decision decoder for the JT65 (63,12) Reed-Solomon code. - - This decoding scheme is built around Phil Karn's Berlekamp-Massey - errors and erasures decoder. The approach is inspired by a number of - publications, including the stochastic Chase decoder described - in "Stochastic Chase Decoding of Reed-Solomon Codes", by Leroux et al., - IEEE Communications Letters, Vol. 14, No. 9, September 2010 and - "Soft-Decision Decoding of Reed-Solomon Codes Using Successive Error- - and-Erasure Decoding," by Soo-Woong Lee and B. V. K. Vijaya Kumar. - - Steve Franke K9AN and Joe Taylor K1JT - */ - -#include -#include -#include -#include -#include -#include "rs2.h" - -static void *rs; - -void sfrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], - int* ntrials0, int* verbose0, int correct[], int param[], - int indexes[], double tt[], int ntry[]) -{ - int rxdat[63], rxprob[63], rxdat2[63], rxprob2[63]; - int workdat[63],workdat2[63]; - int era_pos[51]; - int c, i, j, numera, nmr2, nerr, nn=63, kk=12; - FILE *datfile, *logfile; - int ntrials = *ntrials0; - int verbose = *verbose0; - int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768, ncandidates; - int ngmd,nera_best; - clock_t t0=0,t1=0; - int perr[8][8] = { - 12, 31, 44, 52, 60, 57, 50, 50, - 28, 38, 49, 58, 65, 69, 64, 80, - 40, 41, 53, 62, 66, 73, 76, 81, - 50, 53, 53, 64, 70, 76, 77, 81, - 50, 50, 52, 60, 71, 72, 77, 84, - 50, 50, 56, 62, 67, 73, 81, 85, - 50, 50, 71, 62, 70, 77, 80, 85, - 50, 50, 62, 64, 71, 75, 82, 87}; - - int pmr2[8][8] = { - 4, 8, 9, 7, 6, 0, 0, 0, - 13, 18, 15, 11, 9, 7, 5, 0, - 0, 23, 21, 15, 12, 10, 7, 4, - 0, 34, 28, 20, 16, 14, 11, 7, - 0, 20, 26, 25, 19, 14, 12, 9, - 0, 0, 28, 27, 22, 19, 14, 11, - 0, 0, 40, 29, 29, 23, 18, 12, - 0, 0, 40, 35, 31, 21, 20, 13}; - - if(verbose) { - logfile=fopen("sfrsd.log","a"); - if( !logfile ) { - printf("Unable to open sfrsd.log\n"); - exit(1); - } - } - -// Initialize the KA9Q Reed-Solomon encoder/decoder - unsigned int symsize=6, gfpoly=0x43, fcr=3, prim=1, nroots=51; - rs=init_rs_int(symsize, gfpoly, fcr, prim, nroots, 0); - -// Reverse the received symbol vector for BM decoder - for (i=0; i<63; i++) { - rxdat[i]=mrsym[62-i]; - rxprob[i]=mrprob[62-i]; - rxdat2[i]=mr2sym[62-i]; - rxprob2[i]=mr2prob[62-i]; - } - -// Sort the mrsym probabilities to find the least reliable symbols - int k, pass, tmp, nsym=63; - int probs[63]; - for (i=0; i<63; i++) { - indexes[i]=i; - probs[i]=rxprob[i]; - } - for (pass = 1; pass <= nsym-1; pass++) { - for (k = 0; k < nsym - pass; k++) { - if( probs[k] < probs[k+1] ) { - tmp = probs[k]; - probs[k] = probs[k+1]; - probs[k+1] = tmp; - tmp = indexes[k]; - indexes[k] = indexes[k+1]; - indexes[k+1] = tmp; - } - } - } - -// See if we can decode using BM HDD, and calculate the syndrome vector. - memset(era_pos,0,51*sizeof(int)); - numera=0; - memcpy(workdat,rxdat,sizeof(rxdat)); - nerr=decode_rs_int(rs,workdat,era_pos,numera,1); - if( nerr >= 0 ) { - if(verbose) fprintf(logfile," BM decode nerrors= %3d : ",nerr); - memcpy(correct,workdat,63*sizeof(int)); - ngmd=-1; - param[0]=0; - param[1]=0; - param[2]=0; - param[3]=0; - param[4]=0; - return; - } - -/* -Generate random erasure-locator vectors and see if any of them -decode. This will generate a list of potential codewords. The -"soft" distance between each codeword and the received word is -used to decide which codeword is "best". -*/ - -#ifdef WIN32 - srand(0xdeadbeef); -#else - srandom(0xdeadbeef); -#endif - - float ratio, ratio0[63]; - int threshe, thresh2, nsum; - int thresh0[63],thresh1[63], mr2flag; - ncandidates=0; - nsum=0; - int ii,jj; - for (i=0; i= 0 ) { - ncandidates=ncandidates+1; - nhard=0; - nsoft=0; - for (i=0; i<63; i++) { - if(workdat[i] != rxdat[i]) { - nhard=nhard+1; - if(workdat[i] != rxdat2[i]) { - nsoft=nsoft+rxprob[i]; - } - } - } - nsoft=63*nsoft/nsum; - if((nsoft < 33) && (nhard < 43) && (nhard+nsoft) < 74) { //??? - if( (nsoft < nsoft_min) ) { - nsoft_min=nsoft; - nhard_min=nhard; - memcpy(correct,workdat,63*sizeof(int)); - ngmd=0; - nera_best=numera; - ntry[0]=k; - } - } - if(nsoft_min < 27) break; - if((nsoft_min < 32) && (nhard_min < 43) && - (nhard_min+nsoft_min) < 74) break; - } - if(k == ntrials-1) ntry[0]=k+1; - } - - if(verbose) fprintf(logfile, - "%d trials and %d candidates after stochastic loop\n",k,ncandidates); - - if( (ncandidates >= 0) && (nsoft_min < 36) && (nhard_min < 44) ) { - if(verbose) { - for (i=0; i<63; i++) { - fprintf(logfile,"%3d %3d %3d %3d %3d %3d\n",i,correct[i], - rxdat[i],rxprob[i],rxdat2[i],rxprob2[i]); - } - fprintf(logfile,"**** ncandidates %d nhard %d nsoft %d nsum %d\n", - ncandidates,nhard_min,nsoft_min,nsum); - } - } else { - nhard_min=-1; - } - - if(verbose) { - fprintf(logfile,"exiting sfrsd\n"); - fclose(logfile); - } - param[0]=ncandidates; - param[1]=nhard_min; - param[2]=nsoft_min; - param[3]=nera_best; - param[4]=ngmd; - if(param[0]==0) param[2]=-1; - return; -} diff --git a/lib/g1 b/lib/g1 deleted file mode 100644 index 52f7616..0000000 --- a/lib/g1 +++ /dev/null @@ -1,4 +0,0 @@ -gcc -c gran.c -gfortran -c four2a.f90 -gfortran -c f77_wisdom.f90 -gfortran -o chkfft chkfft.f90 four2a.o f77_wisdom.o gran.o -lfftw3f diff --git a/lib/g1.bat b/lib/g1.bat deleted file mode 100644 index 6242f25..0000000 --- a/lib/g1.bat +++ /dev/null @@ -1,4 +0,0 @@ -gcc -c gran.c -gfortran -c four2a.f90 -gfortran -c f77_wisdom.f90 -gfortran -o chkfft chkfft.f90 four2a.o f77_wisdom.o gran.o /JTSDK-QT/appsupport/runtime/libfftw3f-3.dll diff --git a/lib/g2.bat b/lib/g2.bat deleted file mode 100644 index 4067107..0000000 --- a/lib/g2.bat +++ /dev/null @@ -1,4 +0,0 @@ -gcc -c gran.c -gfortran -c fftw3mod.f90 -gfortran -c f77_wisdom.f90 -gfortran -o chkfft2 chkfft2.f90 f77_wisdom.o gran.o /JTSDK-QT/appsupport/runtime/libfftw3f-3.dll diff --git a/lib/g3.bat b/lib/g3.bat deleted file mode 100644 index 904fce9..0000000 --- a/lib/g3.bat +++ /dev/null @@ -1,4 +0,0 @@ -gcc -c gran.c -gfortran -c fftw3mod.f90 -gfortran -c f77_wisdom.f90 -gfortran -o chkfft3 chkfft3.f90 f77_wisdom.o gran.o /JTSDK-QT/appsupport/runtime/libfftw3f-3.dll diff --git a/lib/g4.bat b/lib/g4.bat deleted file mode 100644 index 6475dad..0000000 --- a/lib/g4.bat +++ /dev/null @@ -1,3 +0,0 @@ -gcc -c gran.c -gfortran -c -Wall fftw3mod.f90 -gfortran -o timefft -Wall timefft.f90 timefft_opts.f90 gran.o libfftw3f-3.dll diff --git a/lib/gen4.f90 b/lib/gen4.f90 deleted file mode 100644 index 7b06be8..0000000 --- a/lib/gen4.f90 +++ /dev/null @@ -1,43 +0,0 @@ -subroutine gen4(msg0,ichk,msgsent,itone,itype) - -! Encode a JT4 message. Returns msgsent, the message as it will be -! decoded, an integer array itone(206) of 4-FSK tons values in the -! range 0-3; and itype, the JT message type. - - use jt4 - use packjt - character*22 msg0 - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - character*1 c - integer itone(206) - integer*4 i4Msg6BitWords(13) !72-bit message as 6-bit words - integer mettab(-128:127,0: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 - msgsent=msg0 - else - call getmet4(mettab,ndelta) - - message=msg0 - call fmtmsg(message,iz) - call packmsg(message,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes - call unpackmsg(i4Msg6BitWords,msgsent,.false.,' ') !Unpack to get msgsent - if(ichk.ne.0) go to 999 - call encode4(message,itone) !Encode the information bits - i1=index(message,'-') - c=message(i1+1:i1+1) - if(i1.ge.9 .and. c.ge.'0' .and. c.le.'3') then - itone=2*itone + (1-npr(2:)) !Inverted '#' sync - else - itone=2*itone + npr(2:) !Data = MSB, sync = LSB - endif - endif - -999 return -end subroutine gen4 diff --git a/lib/gen65.f90 b/lib/gen65.f90 deleted file mode 100644 index ab61fd3..0000000 --- a/lib/gen65.f90 +++ /dev/null @@ -1,83 +0,0 @@ -subroutine gen65(msg0,ichk,msgsent,itone,itype) - -! Encodes a JT65 message to yieild itone(1:126) -! Temporarily, does not implement EME shorthands - - 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) - ntest=0 - if(flip.lt.0.0) ntest=1 - if(nspecial.eq.0) then - call packmsg(message,dgen,itype,.false.) !Pack message into 72 bits - call unpackmsg(dgen,msgsent,.false.,' ') !Unpack to get message sent - msgsent(20:22)=cok - call fmtmsg(msgsent,iz) - if(ichk.ne.0) go to 999 !Return if checking only - - call rs_encode(dgen,sent) !Apply Reed-Solomon code - call interleave63(sent,1) !Apply interleaving - call graycode65(sent,63,1) !Apply Gray code - nsym=126 !Symbols per transmission - k=0 - do j=1,nsym - if(nprc(j).eq.ntest) 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 gen65 diff --git a/lib/gen9.f90 b/lib/gen9.f90 deleted file mode 100644 index 503ef6d..0000000 --- a/lib/gen9.f90 +++ /dev/null @@ -1,65 +0,0 @@ -subroutine gen9(msg0,ichk,msgsent,i4tone,itype) - -! Encodes a JT9 message and returns msgsent, the message as it will -! be decoded, and an integer array i4tone(85) of 9-FSK tone values -! in the range 0-8. - - use packjt - character*22 msg0 - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - integer*4 i4Msg6BitWords(13) !72-bit message as 6-bit words - integer*1 i1Msg8BitBytes(13) !72 bits and zero tail as 8-bit bytes - integer*1 i1EncodedBits(207) !Encoded information-carrying bits - integer*1 i1ScrambledBits(207) !Encoded bits after interleaving - integer*4 i4DataSymbols(69) !Data symbols (values 0-7) - integer*4 i4GrayCodedSymbols(69) !Gray-coded symbols (values 0-7) - integer*4 i4tone(85) !Tone #s, data and sync (values 0-8) - include 'jt9sync.f90' - save - - if(msg0(1:1).eq.'@') then - read(msg0(2:5),*,end=1,err=1) nfreq - go to 2 -1 nfreq=1000 -2 i4tone(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 packmsg(message,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes - call unpackmsg(i4Msg6BitWords,msgsent,.false.,' ') !Unpack to get msgsent - if(ichk.ne.0) go to 999 - call entail(i4Msg6BitWords,i1Msg8BitBytes) !Add tail, make 8-bit bytes - nsym2=206 - call encode232(i1Msg8BitBytes,nsym2,i1EncodedBits) !Encode K=32, r=1/2 - i1EncodedBits(207)=0 - call interleave9(i1EncodedBits,1,i1ScrambledBits) !Interleave bits - i1ScrambledBits(207)=0 - call packbits(i1ScrambledBits,69,3,i4DataSymbols) !Pk 3-bits into words - call graycode(i4DataSymbols,69,1,i4GrayCodedSymbols) !Apply Gray code - -! Insert sync symbols at ntone=0 and add 1 to the data-tone numbers. - j=0 - do i=1,85 - if(isync(i).eq.1) then - i4tone(i)=0 - else - j=j+1 - i4tone(i)=i4GrayCodedSymbols(j)+1 - endif - enddo - endif - -999 return -end subroutine gen9 diff --git a/lib/geniscat.f90 b/lib/geniscat.f90 deleted file mode 100644 index 6df6ed9..0000000 --- a/lib/geniscat.f90 +++ /dev/null @@ -1,55 +0,0 @@ -subroutine geniscat(msg,msgsent,itone) - -! Generate an ISCAT waveform. - - parameter (NSZ=1291) - character msg*28,msgsent*28 !Message to be transmitted - integer imsg(30) - integer itone(NSZ) - real*8 sps - character c*42 - integer icos(4) !Costas array - data icos/0,1,3,2/ - data nsync/4/,nlen/2/,ndat/18/ - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?@-'/ - - sps=256.d0*12000.d0/11025.d0 - nsym=int(30*12000.d0/sps) - nblk=nsync+nlen+ndat - - do i=22,1,-1 - if(msg(i:i).ne.' ' .and. msg(i:i).ne.char(0)) exit - enddo - nmsg=i - msglen=nmsg+1 - k=0 - kk=1 - imsg(1)=40 !Always start with BOM char: '@' - do i=1,nmsg !Define the tone sequence - imsg(i+1)=36 !Illegal char set to blank - do j=1,42 - if(msg(i:i).eq.c(j:j)) imsg(i+1)=j-1 - enddo - enddo - - do i=1,nsym !Total symbols in 30 s - j=mod(i-1,nblk)+1 - if(j.le.nsync) then - itone(i)=icos(j) !Insert 4x4 Costas array - else if(j.gt.nsync .and. j.le.nsync+nlen) then - itone(i)=msglen !Insert message-length indicator - if(j.ge.nsync+2) then - n=msglen + 5*(j-nsync-1) - if(n.gt.41) n=n-42 - itone(i)=n - endif - else - k=k+1 - kk=mod(k-1,msglen)+1 - itone(i)=imsg(kk) - endif - enddo - msgsent=msg - - return -end subroutine geniscat diff --git a/lib/genmet.f90 b/lib/genmet.f90 deleted file mode 100644 index 81f2e56..0000000 --- a/lib/genmet.f90 +++ /dev/null @@ -1,90 +0,0 @@ -program genmet - -! Generate metric table for M-FSK modulation. - - character*12 arg - real*4 r(0:255) - integer hist(2,-128:128) - data hist/514*0/,idum/-1/ - - lim(x)=min(127,max(-128,nint(scale*x))) - - nargs=iargc() - if(nargs.ne.5) then - print*,'Usage: genmet ncoh nadd m0 snr iters' - go to 999 - endif - call getarg(1,arg) - read(arg,*) ncoh - call getarg(2,arg) - read(arg,*) nadd - call getarg(3,arg) - read(arg,*) m0 - call getarg(4,arg) - read(arg,*) snr - call getarg(5,arg) - read(arg,*) iters - - ntones=2**m0 - xm0=m0 - scale=5.0 - fac=sqrt(1.0/nadd) - s=sqrt(10.0**(0.1*snr)) - hist=0 - nerr=0 - - call sgran() - - do iter=1,iters - do i=0,ntones-1 - r(i)=0. - do n=1,nadd - x1=0.707*gran() - y1=0.707*gran() - if(i.eq.0) x1=x1+s - if(ncoh.eq.0) r(i)=r(i) + x1*x1 + y1*y1 - if(ncoh.ne.0) r(i)=r(i) + x1 - enddo - r(i)=fac*r(i) - enddo - do m=0,m0-1 - n=2**m - r1=0. - r2=0. - do i=0,ntones-1 - if(iand(i,n).ne.0) r1=max(r1,r(i)) - if(iand(i,n).eq.0) r2=max(r2,r(i)) - enddo - don=r2-r1 - doff=r1-r2 - if(don.lt.0.0) nerr=nerr+1 - j1=lim(doff) - hist(1,j1)=hist(1,j1)+1 - j2=lim(don) - hist(2,j2)=hist(2,j2)+1 - enddo - enddo - - do i=-128,127 - write(13,1010) i/scale,hist(1,i)/(xm0*iters),hist(2,i)/(xm0*iters) -1010 format(f8.3,2f12.9) - enddo - - ber=nerr/(xm0*iters) - write(*,1020) nadd,m0,snr,ber -1020 format('nadd:',i3,' m0:',i2,' snr: 'f5.1,' BER:',f8.3) - - xln2=log(2.0) - do i=-128,127 - p1=hist(2,i)/(xm0*iters) - p0=hist(1,i)/(xm0*iters) - if(p0+p1.eq.0.0 .and. i.lt.0) p0=1.e-6 - if(p0+p1.eq.0.0 .and. i.gt.0) p1=1.e-6 - xlhd0=log(max(0.001,2.0*p0/(p0+p1)))/xln2 - xlhd1=log(max(0.001,2.0*p1/(p0+p1)))/xln2 - write(14,1012) i/scale,xlhd0,xlhd1,p0/(p0+p1),p1/(p0+p1) -1012 format(f7.1,2f8.3,2f9.6) - enddo - -999 end program genmet - diff --git a/lib/genmsk144.f90 b/lib/genmsk144.f90 deleted file mode 100644 index 5f9ce93..0000000 --- a/lib/genmsk144.f90 +++ /dev/null @@ -1,147 +0,0 @@ -subroutine genmsk144(msg0,mygrid,ichk,bcontest,msgsent,i4tone,itype) -! s8 + 48bits + s8 + 80 bits = 144 bits (72ms message duration) -! -! Encode an MSK144 message -! Input: -! - msg0 requested message to be transmitted -! - ichk if ichk=1, return only msgsent -! if ichk.ge.10000, set imsg=ichk-10000 for short msg -! - msgsent message as it will be decoded -! - i4tone array of audio tone values, 0 or 1 -! - itype message type -! 1 = standard message "Call_1 Call_2 Grid/Rpt" -! 2 = type 1 prefix -! 3 = type 1 suffix -! 4 = type 2 prefix -! 5 = type 2 suffix -! 6 = free text (up to 13 characters) -! 7 = short message " Rpt" - - use iso_c_binding, only: c_loc,c_size_t - use packjt - use hashing - character*22 msg0 - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - character*6 mygrid - integer*4 i4Msg6BitWords(13) !72-bit message as 6-bit words - integer*4 i4tone(144) ! - integer*1, target:: i1Msg8BitBytes(10) !80 bits represented in 10 bytes - integer*1 codeword(128) !Encoded bits before re-ordering - integer*1 msgbits(80) !72-bit message + 8-bit hash - integer*1 bitseq(144) !Tone #s, data and sync (values 0-1) - integer*1 i1hash(4) - integer*1 s8(8) - logical bcontest - real*8 pp(12) - real*8 xi(864),xq(864),pi,twopi - data s8/0,1,1,1,0,0,1,0/ - equivalence (ihash,i1hash) - logical first - data first/.true./ - save - - if(first) then - first=.false. - nsym=128 - pi=4.0*atan(1.0) - twopi=8.*atan(1.0) - do i=1,12 - pp(i)=sin((i-1)*pi/12) - enddo - endif - - if(msg0(1:1).eq.'@') then !Generate a fixed tone - read(msg0(2:5),*,end=1,err=1) nfreq !at specified frequency - go to 2 -1 nfreq=1000 -2 i4tone(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 - - if(message(1:1).eq.'<') then - call genmsk40(message,msgsent,ichk,i4tone,itype) - if(itype.lt.0) go to 999 - i4tone(41)=-40 - go to 999 - endif - - call packmsg(message,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes - call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent - - if(ichk.eq.1) go to 999 - i4=0 - ik=0 - im=0 - do i=1,12 - nn=i4Msg6BitWords(i) - do j=1, 6 - ik=ik+1 - i4=i4+i4+iand(1,ishft(nn,j-6)) - i4=iand(i4,255) - if(ik.eq.8) then - im=im+1 - i1Msg8BitBytes(im)=i4 - ik=0 - endif - enddo - enddo - - ihash=nhash(c_loc(i1Msg8BitBytes),int(9,c_size_t),146) - ihash=2*iand(ihash,32767) !Generate the 8-bit hash - i1Msg8BitBytes(10)=i1hash(1) !Hash code to byte 10 - - mbit=0 - do i=1, 10 - i1=i1Msg8BitBytes(i) - do ibit=1,8 - mbit=mbit+1 - msgbits(mbit)=iand(1,ishft(i1,ibit-8)) - enddo - enddo - - call encode_msk144(msgbits,codeword) - -!Create 144-bit channel vector: -!8-bit sync word + 48 bits + 8-bit sync word + 80 bits - bitseq=0 - bitseq(1:8)=s8 - bitseq(9:56)=codeword(1:48) - bitseq(57:64)=s8 - bitseq(65:144)=codeword(49:128) - bitseq=2*bitseq-1 - - xq(1:6)=bitseq(1)*pp(7:12) !first bit is mapped to 1st half-symbol on q - do i=1,71 - is=(i-1)*12+7 - xq(is:is+11)=bitseq(2*i+1)*pp - enddo - xq(864-5:864)=bitseq(1)*pp(1:6) !last half symbol - do i=1,72 - is=(i-1)*12+1 - xi(is:is+11)=bitseq(2*i)*pp - enddo -! Map I and Q to tones. - i4tone=0 - do i=1,72 - i4tone(2*i-1)=(bitseq(2*i)*bitseq(2*i-1)+1)/2; - i4tone(2*i)=-(bitseq(2*i)*bitseq(mod(2*i,144)+1)-1)/2; - enddo - endif - -! Flip polarity - i4tone=-i4tone+1 - -999 return -end subroutine genmsk144 diff --git a/lib/genmsk40.f90 b/lib/genmsk40.f90 deleted file mode 100644 index 3310b10..0000000 --- a/lib/genmsk40.f90 +++ /dev/null @@ -1,66 +0,0 @@ -subroutine genmsk40(msg,msgsent,ichk,itone,itype) - - use hashing - character*22 msg,msgsent,hashmsg - character*4 crpt,rpt(0:15) - logical first - integer*4 itone(144) - integer*1 message(16),codeword(32),bitseq(40) - integer*1 s8r(8) - data s8r/1,0,1,1,0,0,0,1/ ! Sync word is reversed wrt msk144 sync word. - data first/.true./ - data rpt/"-03 ","+00 ","+03 ","+06 ","+10 ","+13 ","+16 ", & - "R-03","R+00","R+03","R+06","R+10","R+13","R+16", & - "RRR ","73 "/ - save first,rpt - - itype=-1 - msgsent='*** bad message ***' - itone=0 - i1=index(msg,'>') - if(i1.lt.9) go to 900 - call fmtmsg(msg,iz) - crpt=msg(i1+2:i1+5) - do i=0,15 - if(crpt.eq.rpt(i)) go to 10 - enddo - go to 900 - -10 irpt=i !Report index, 0-15 - if(ichk.lt.10000) then - hashmsg=msg(2:i1-1) - call hash(hashmsg,22,ihash) - ihash=iand(ihash,4095) !12-bit hash - ig=16*ihash + irpt !4-bit report - else - ig=ichk-10000 - endif - - do i=1,16 - message(i)=iand(1,ishft(ig,1-i)) - enddo - - call encode_msk40(message,codeword) -! write(*,'(a6,i6,2x,a6,i6,2x,a6,i6)') ' msg: ',ig,'rprt: ',irpt,'hash: ',ihash -! write(*,'(a6,32i1)') ' cw: ',codeword - - bitseq(1:8)=s8r - bitseq(9:40)=codeword - bitseq=2*bitseq-1 - -! Map I and Q to tones. - itone=0 - do i=1, 20 - itone(2*i-1)=(bitseq(2*i)*bitseq(2*i-1)+1)/2; - itone(2*i)=-(bitseq(2*i)*bitseq(mod(2*i,40)+1)-1)/2; - enddo - -! Flip polarity - itone=-itone+1 - - msgsent=msg - itype=7 - -900 return -end subroutine genmsk40 - diff --git a/lib/genmsk_short.f90 b/lib/genmsk_short.f90 deleted file mode 100644 index f1b555f..0000000 --- a/lib/genmsk_short.f90 +++ /dev/null @@ -1,66 +0,0 @@ -subroutine genmsk_short(msg,msgsent,ichk,itone,itype) - - use hashing - character*22 msg,msgsent - character*3 crpt,rpt(0:7) - logical first - integer itone(35) - integer ig24(0:4096-1) !Codewords for Golay (24,12) code - integer b11(11) - data b11/1,1,1,0,0,0,1,0,0,1,0/ !Barker 11 code - data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/ - data first/.true./ - save first,ig24 - - if(first) then - call golay24_table(ig24) !Define the Golay(24,12) codewords - first=.false. - endif - - itype=-1 - msgsent='*** bad message ***' - itone=0 - i1=index(msg,'>') - if(i1.lt.9) go to 900 - call fmtmsg(msg,iz) - crpt=msg(i1+2:i1+5) - do i=0,7 - if(crpt.eq.rpt(i)) go to 10 - enddo - go to 900 - -10 irpt=i !Report index, 0-7 - if(ichk.lt.10000) then - call hash(msg(2:i1-1),i1-2,ihash) - ihash=iand(ihash,511) !9-bit hash for the two callsigns - ig=8*ihash + irpt !12-bit message information - else - ig=ichk-10000 - endif - ncodeword=ig24(ig) - itone(1:11)=b11 !Insert the Barker-11 code - n=2**24 - do i=12,35 !Insert codeword into itone array - n=n/2 - itone(i)=0 - if(iand(ncodeword,n).ne.0) itone(i)=1 - enddo - msgsent=msg - itype=7 - - n=count(itone(1:35).eq.0) - if(mod(n,2).ne.0) stop 'Parity error in genmsk_short.' - -900 return -end subroutine genmsk_short - -subroutine hash_calls(calls,ih9) - - use hashing - character*(*) calls - i1=index(calls,'>') - call hash(calls(2:i1-1),i1-2,ih9) - ih9=iand(ih9,511) !9-bit hash for the two callsigns - - return -end subroutine hash_calls diff --git a/lib/genqra64.f90 b/lib/genqra64.f90 deleted file mode 100644 index f1bc9bf..0000000 --- a/lib/genqra64.f90 +++ /dev/null @@ -1,57 +0,0 @@ -subroutine genqra64(msg0,ichk,msgsent,itone,itype) - -! Encodes a QRA64 message to yield itone(1:84) - - use packjt - character*22 msg0 - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - integer itone(84) - character*3 cok !' ' or 'OOO' - logical old_qra_sync - integer dgen(13) - integer sent(63) - integer icos7(0:6) - data icos7/4,2,5,6,1,3,0/ !Costas 7x7 tone pattern - 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 - write(msgsent,1000) nfreq -1000 format(i5,' Hz') - 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) - call packmsg(message,dgen,itype,.false.) !Pack message into 72 bits - call unpackmsg(dgen,msgsent,.false.,' ') !Unpack to get message sent - if(ichk.ne.0) go to 999 !Return if checking only - call qra64_enc(dgen,sent) !Encode using QRA64 - - nsync=10 - inquire(file='old_qra_sync',exist=old_qra_sync) - if(old_qra_sync) nsync=1 - - itone(1:7)=nsync*icos7 !Insert 7x7 Costas array in 3 places - itone(8:39)=sent(1:32) - itone(40:46)=nsync*icos7 - itone(47:77)=sent(33:63) - itone(78:84)=nsync*icos7 - endif - -999 return -end subroutine genqra64 diff --git a/lib/genwspr.f90 b/lib/genwspr.f90 deleted file mode 100644 index d1d5183..0000000 --- a/lib/genwspr.f90 +++ /dev/null @@ -1,30 +0,0 @@ -subroutine genwspr(message,msgsent,itone) -! Encode a WSPR message and generate the array of channel symbols. - - character*22 message,msgsent - parameter (MAXSYM=176) - integer*1 symbol(MAXSYM) - integer*1 data0(11) - integer*4 itone(162) - integer npr3(162) - data npr3/ & - 1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0, & - 0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1, & - 0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,1, & - 1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1, & - 0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,1,0, & - 0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1, & - 0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1, & - 0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0, & - 0,0/ - - call wqencode(message,ntype,data0) !Source encoding - call encode232(data0,162,symbol) !Convolutional encoding - call inter_wspr(symbol,1) !Interleaving - do i=1,162 - itone(i)=npr3(i) + 2*symbol(i) - enddo - msgsent=message !### To be fixed... ?? ### - - return -end subroutine genwspr diff --git a/lib/hspec.f90 b/lib/hspec.f90 deleted file mode 100644 index 4ede506..0000000 --- a/lib/hspec.f90 +++ /dev/null @@ -1,106 +0,0 @@ -subroutine hspec(id2,k,nutc0,ntrpdepth,nrxfreq,ntol,bmsk144,bcontest, & - btrain,pcoeffs,ingain,mycall,hiscall,bshmsg,bswl,datadir,green,s, & - jh,pxmax,dbNoGain,line1,mygrid) - -! Input: -! k pointer to the most recent new data -! nutc0 UTC for display of decode(s) -! ntrpdepth TR period and 1000*ndepth -! nrxfreq Rx audio center frequency -! ntol Decoding range is +/- ntol -! bmsk144 Boolean, true if in MSK144 mode -! btrain Boolean, turns on training in MSK144 mode -! ingain Relative gain for spectra - -! Output: -! green() power -! s() spectrum for horizontal spectrogram -! jh index of most recent data in green(), s() - - parameter (JZ=703) - character*80 line1 - character*512 datadir - character*12 mycall,hiscall - character*6 mygrid - integer*2 id2(0:120*12000-1) - logical*1 bmsk144,bcontest,bshmsg,btrain,bswl - real green(0:JZ-1) - real s(0:63,0:JZ-1) - real x(512) - real*8 pcoeffs(5) - complex cx(0:256) - data rms/999.0/,k0/99999999/ - equivalence (x,cx) - save ja,rms0 - - ndepth=ntrpdepth/1000 - ntrperiod=ntrpdepth - 1000*ndepth - gain=10.0**(0.1*ingain) - nfft=512 - nstep=nfft - nblks=7 - if(ntrperiod.lt.30) then - nstep=256 - nblks=14 - endif - - if(k.gt.30*12000) go to 900 - if(k.lt.nfft) then - jh=0 - go to 900 !Wait for enough samples to start - endif - - if(k.lt.k0) then !Start a new data block - ja=-nstep - jh=-1 - rms0=0.0 - endif - - pxmax = 0; - do iblk=1,nblks - if(jh.lt.JZ-1) jh=jh+1 - ja=ja+nstep - jb=ja+nfft-1 - x=id2(ja:jb) - sq=dot_product(x,x) - xmax = maxval(x); - xmin = abs(minval(x)); - if (xmin > xmax) xmax = xmin; - if (xmax.gt.0.0) pxmax=20.0*log10(xmax); - rms=sqrt(gain*sq/nfft) - rms2=sqrt(sq/nfft); - green(jh)=0. - if(rms.gt.0.0) then - green(jh)=20.0*log10(rms) - dbNoGain=20.0*log10(rms2); - endif - call four2a(x,nfft,1,-1,0) !Real-to-complex FFT - df=12000.0/nfft - fac=(1.0/nfft)**2 - do i=1,64 - j=2*i - sx=real(cx(j))**2 + aimag(cx(j))**2 + real(cx(j-1))**2 + & - aimag(cx(j-1))**2 - s(i-1,jh)=fac*gain*sx - enddo - if(ja+2*nfft.gt.k) exit - enddo - k0=k - - if(bmsk144) then - if(k.ge.7168) then - tsec=(k-7168)/12000.0 - k0=k-7168 - tt1=sum(float(abs(id2(k0:k0+3583)))) - k0=k-3584 - tt2=sum(float(abs(id2(k0:k0+3583)))) - if(tt1.ne.0.0 .and. tt2.ne.0) then - call mskrtd(id2(k-7168+1:k),nutc0,tsec,ntol,nrxfreq,ndepth, & - mycall,mygrid,hiscall,bshmsg,bcontest,btrain,pcoeffs,bswl,& - datadir,line1) - endif - endif - endif - -900 return -end subroutine hspec diff --git a/lib/js8/baselinejs8.f90 b/lib/js8/baselinejs8.f90 new file mode 100644 index 0000000..79f4003 --- /dev/null +++ b/lib/js8/baselinejs8.f90 @@ -0,0 +1,51 @@ +subroutine baselinejs8(s,nfa,nfb,sbase) + +! Fit baseline to spectrum (for FT8) +! Input: s(npts) Linear scale in power +! Output: sbase(npts) Baseline + + implicit real*8 (a-h,o-z) + + !include 'js8_params.f90' + + real*4 s(NSPS) + real*4 sbase(NSPS) + real*4 base + real*8 x(1000),y(1000),a(5) + data nseg/10/,npct/10/ + + df=12000.0/(NSPS*2.0d0) !3.125 Hz + ia=max(1,nint(nfa/df)) + ib=nint(nfb/df) + do i=ia,ib + s(i)=10.0*log10(s(i)) !Convert to dB scale + enddo + + nterms=5 + nlen=(ib-ia+1)/nseg !Length of test segment + i0=(ib-ia+1)/2 !Midpoint + k=0 + do n=1,nseg !Loop over all segments + ja=ia + (n-1)*nlen + jb=ja+nlen-1 + call pctile(s(ja),nlen,npct,base) !Find lowest npct of points + do i=ja,jb + if(s(i).le.base) then + if (k.lt.1000) k=k+1 !Save all "lower envelope" points + x(k)=i-i0 + y(k)=s(i) + endif + enddo + enddo + kz=k + a=0. + call polyfit(x,y,y,kz,nterms,0,a,chisqr) !Fit a low-order polynomial + do i=ia,ib + t=i-i0 + sbase(i)=a(1)+t*(a(2)+t*(a(3)+t*(a(4)+t*(a(5))))) + 0.65 +! write(51,3051) i*df,s(i),sbase(i) +!3051 format(3f12.3) + enddo + + return +end subroutine baselinejs8 diff --git a/lib/js8/costas/Costas_essense_N=7.txt b/lib/js8/costas/Costas_essense_N=7.txt new file mode 100644 index 0000000..b99cc8b --- /dev/null +++ b/lib/js8/costas/Costas_essense_N=7.txt @@ -0,0 +1,30 @@ + 0 1 5 3 6 2 4 + 0 1 6 3 5 4 2 + 0 1 6 4 3 5 2 + 0 2 5 1 6 3 4 + 0 2 5 1 6 4 3 + 0 2 6 5 3 4 1 + 0 3 4 2 6 5 1 + 0 3 4 6 1 5 2 + 0 3 5 4 2 6 1 + 0 4 2 5 6 1 3 + 0 4 6 5 2 3 1 + 0 5 4 6 2 3 1 + 0 6 2 3 5 4 1 + 1 0 4 6 2 5 3 + 1 0 5 3 6 2 4 + 1 2 4 0 6 5 3 + 1 3 2 5 6 0 4 + 1 3 4 0 6 5 2 + 1 3 6 2 0 5 4 + 1 4 0 5 6 3 2 + 1 4 0 6 5 2 3 + 1 4 5 0 2 6 3 + 1 4 5 3 0 6 2 + 1 4 6 0 5 2 3 + 1 4 6 0 5 3 2 + 1 5 0 2 3 6 4 + 1 5 6 0 3 2 4 + 2 1 4 6 0 5 3 + 2 3 0 6 5 1 4 + 2 5 0 6 4 1 3 diff --git a/lib/js8/costas/Costas_symmetrical_N=7.txt b/lib/js8/costas/Costas_symmetrical_N=7.txt new file mode 100644 index 0000000..7e38271 --- /dev/null +++ b/lib/js8/costas/Costas_symmetrical_N=7.txt @@ -0,0 +1,10 @@ + 0 1 5 3 6 2 4 + 0 1 6 3 5 4 2 + 0 1 6 4 3 5 2 + 0 6 2 3 5 4 1 + 1 0 4 6 2 5 3 + 1 0 5 3 6 2 4 + 1 4 5 0 2 6 3 + 1 4 5 3 0 6 2 + 1 5 0 2 3 6 4 + 2 5 0 6 4 1 3 diff --git a/lib/js8/costas/Sorted_Costas_arrays_N=7.txt b/lib/js8/costas/Sorted_Costas_arrays_N=7.txt new file mode 100644 index 0000000..b547377 --- /dev/null +++ b/lib/js8/costas/Sorted_Costas_arrays_N=7.txt @@ -0,0 +1,201 @@ + 7 200 + 0 1 5 3 6 2 4 + 0 1 6 3 5 4 2 + 0 1 6 4 3 5 2 + 0 2 5 1 6 3 4 + 0 2 5 1 6 4 3 + 0 2 6 5 3 4 1 + 0 3 1 5 6 2 4 + 0 3 1 6 5 2 4 + 0 3 4 2 6 5 1 + 0 3 4 6 1 5 2 + 0 3 5 4 2 6 1 + 0 4 2 5 6 1 3 + 0 4 6 1 2 5 3 + 0 4 6 5 2 3 1 + 0 5 2 6 1 3 4 + 0 5 4 6 2 3 1 + 0 6 1 4 5 3 2 + 0 6 2 3 5 4 1 + 0 6 3 1 2 5 4 + 0 6 4 1 3 2 5 + 0 6 4 5 1 3 2 + 0 6 4 5 2 1 3 + 1 0 4 6 2 5 3 + 1 0 5 3 6 2 4 + 1 2 4 0 6 5 3 + 1 3 2 5 6 0 4 + 1 3 2 5 6 4 0 + 1 3 2 6 4 5 0 + 1 3 4 0 6 5 2 + 1 3 6 2 0 5 4 + 1 4 0 5 6 3 2 + 1 4 0 6 5 2 3 + 1 4 3 5 2 0 6 + 1 4 3 5 6 2 0 + 1 4 5 0 2 6 3 + 1 4 5 3 0 6 2 + 1 4 5 3 2 6 0 + 1 4 6 0 5 2 3 + 1 4 6 0 5 3 2 + 1 5 0 2 3 6 4 + 1 5 6 0 3 2 4 + 1 5 6 2 4 3 0 + 1 6 2 4 5 3 0 + 1 6 4 5 0 3 2 + 2 0 3 4 6 1 5 + 2 0 5 6 1 4 3 + 2 0 6 5 1 3 4 + 2 1 4 0 5 6 3 + 2 1 4 5 0 6 3 + 2 1 4 5 3 0 6 + 2 1 4 6 0 5 3 + 2 1 6 4 0 3 5 + 2 1 6 4 5 0 3 + 2 3 0 5 1 4 6 + 2 3 0 5 4 6 1 + 2 3 0 6 5 1 4 + 2 3 1 5 4 6 0 + 2 3 5 0 4 1 6 + 2 3 5 0 6 4 1 + 2 3 5 1 0 6 4 + 2 3 5 4 1 6 0 + 2 3 6 5 0 4 1 + 2 4 0 1 5 3 6 + 2 4 0 3 1 5 6 + 2 4 0 3 1 6 5 + 2 4 1 0 5 3 6 + 2 4 1 5 6 0 3 + 2 4 1 6 5 0 3 + 2 4 3 6 0 1 5 + 2 4 5 3 6 1 0 + 2 5 0 1 6 4 3 + 2 5 0 6 4 1 3 + 2 5 1 0 6 3 4 + 2 5 1 6 4 3 0 + 2 5 3 4 6 1 0 + 2 5 6 0 4 1 3 + 2 5 6 0 4 3 1 + 2 5 6 1 3 0 4 + 2 6 0 1 4 3 5 + 2 6 0 3 5 4 1 + 2 6 3 5 0 1 4 + 3 0 1 6 2 5 4 + 3 0 4 6 1 2 5 + 3 0 5 4 6 1 2 + 3 0 5 6 1 4 2 + 3 0 6 1 2 5 4 + 3 0 6 5 1 4 2 + 3 1 0 6 2 4 5 + 3 1 2 5 4 6 0 + 3 1 4 0 2 6 5 + 3 1 4 0 6 5 2 + 3 1 4 5 0 2 6 + 3 1 4 6 0 5 2 + 3 1 6 0 2 5 4 + 3 1 6 5 2 4 0 + 3 2 0 5 1 4 6 + 3 2 0 5 6 1 4 + 3 2 5 0 1 6 4 + 3 2 5 0 6 4 1 + 3 2 5 6 0 4 1 + 3 4 1 0 6 2 5 + 3 4 1 6 0 2 5 + 3 4 1 6 5 0 2 + 3 4 6 1 0 5 2 + 3 4 6 1 5 2 0 + 3 5 0 1 4 2 6 + 3 5 0 6 4 1 2 + 3 5 2 0 6 1 4 + 3 5 2 1 6 4 0 + 3 5 2 6 0 1 4 + 3 5 2 6 4 0 1 + 3 5 4 1 2 0 6 + 3 5 6 0 4 2 1 + 3 6 0 1 5 2 4 + 3 6 0 5 4 1 2 + 3 6 1 0 5 2 4 + 3 6 1 2 0 5 4 + 3 6 2 0 5 4 1 + 3 6 5 0 4 1 2 + 4 0 3 1 6 5 2 + 4 0 6 3 1 2 5 + 4 0 6 5 2 3 1 + 4 1 0 5 3 6 2 + 4 1 0 6 2 3 5 + 4 1 0 6 2 5 3 + 4 1 3 2 0 5 6 + 4 1 5 0 2 3 6 + 4 1 5 6 0 3 2 + 4 1 6 0 2 5 3 + 4 1 6 5 0 2 3 + 4 2 1 3 0 5 6 + 4 2 3 0 6 5 1 + 4 2 5 0 1 6 3 + 4 2 5 1 0 6 3 + 4 2 5 6 1 3 0 + 4 2 6 3 5 0 1 + 4 2 6 3 5 1 0 + 4 2 6 5 1 3 0 + 4 3 0 1 6 2 5 + 4 3 1 2 5 0 6 + 4 3 1 5 6 0 2 + 4 3 1 6 0 2 5 + 4 3 1 6 2 5 0 + 4 3 5 1 2 0 6 + 4 3 6 0 1 5 2 + 4 3 6 1 2 0 5 + 4 3 6 1 5 2 0 + 4 5 0 2 1 6 3 + 4 5 0 2 6 3 1 + 4 5 2 0 6 1 3 + 4 5 2 1 3 6 0 + 4 5 2 1 6 0 3 + 4 5 2 6 1 0 3 + 4 6 0 1 5 3 2 + 4 6 1 0 5 2 3 + 4 6 3 2 0 5 1 + 5 0 2 1 6 3 4 + 5 0 4 2 1 3 6 + 5 1 0 4 2 3 6 + 5 1 0 6 3 4 2 + 5 1 6 4 3 0 2 + 5 2 0 6 1 3 4 + 5 2 0 6 1 4 3 + 5 2 1 3 4 0 6 + 5 2 1 3 6 0 4 + 5 2 1 6 4 0 3 + 5 2 3 1 0 4 6 + 5 2 3 1 4 6 0 + 5 2 6 0 1 4 3 + 5 2 6 1 0 3 4 + 5 3 0 4 6 1 2 + 5 3 2 6 0 1 4 + 5 3 4 0 2 1 6 + 5 3 4 1 0 2 6 + 5 3 4 1 0 6 2 + 5 4 2 6 0 1 3 + 5 6 1 3 0 4 2 + 5 6 2 0 4 1 3 + 6 0 2 1 4 5 3 + 6 0 2 1 5 3 4 + 6 0 2 5 3 4 1 + 6 0 3 5 4 1 2 + 6 0 4 3 1 2 5 + 6 0 5 2 1 3 4 + 6 1 2 0 4 3 5 + 6 1 4 0 5 3 2 + 6 2 0 1 4 3 5 + 6 2 0 5 4 1 3 + 6 2 4 1 0 5 3 + 6 3 1 2 4 0 5 + 6 3 2 0 5 1 4 + 6 3 2 4 0 1 5 + 6 3 5 0 1 4 2 + 6 3 5 1 0 4 2 + 6 4 0 1 3 2 5 + 6 4 1 5 0 2 3 + 6 4 1 5 0 3 2 + 6 5 0 2 3 1 4 + 6 5 0 3 1 2 4 + 6 5 1 3 0 4 2 diff --git a/lib/js8/genjs8.f90 b/lib/js8/genjs8.f90 new file mode 100644 index 0000000..37bba4b --- /dev/null +++ b/lib/js8/genjs8.f90 @@ -0,0 +1,93 @@ +subroutine genjs8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone) + +! Encode an FT8 message, producing array itone(). + + use crc + use packjt + + include 'js8_params.f90' + + parameter (KK=87) !Information bits (75 + CRC12) + parameter (ND=58) !Data symbols + parameter (NS=21) !Sync symbols (3 @ Costas 7x7) + parameter (NN=NS+ND) !Total channel symbols (79) + + character*68 alphabet + character*22 msg,msgsent + character*6 mygrid + character*87 cbits + logical bcontest,checksumok + integer*4 i4Msg6BitWords(12) !72-bit message as 6-bit words + integer*1 msgbits(KK),codeword(3*ND) + integer*1, target:: i1Msg8BitBytes(11) + integer itone(NN) + + integer icos7a(0:6), icos7b(0:6), icos7c(0:6) + if(NCOSTAS.eq.1) then + icos7a = (/4,2,5,6,1,3,0/) !Beginning Costas 7x7 tone pattern + icos7b = (/4,2,5,6,1,3,0/) !Middle Costas 7x7 tone pattern + icos7c = (/4,2,5,6,1,3,0/) !End Costas 7x7 tone pattern + else + icos7a = (/0,6,2,3,5,4,1/) !Beginning Costas 7x7 tone pattern + icos7b = (/1,5,0,2,3,6,4/) !Middle Costas 7x7 tone pattern + icos7c = (/2,5,0,6,4,1,3/) !End Costas 7x7 tone pattern + endif + + alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+/?.' + + itype=6 + do i=1,12 + v=index(alphabet, msg(i:i)) + if(v.eq.0) exit + i4Msg6BitWords(i)=v - 1 + enddo + msgsent=' ' + msgsent(1:12)=msg(1:12) + + ! call packmsg(msg,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes + ! call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent + + write(cbits,1000) i4Msg6BitWords,32*i3bit +1000 format(12b6.6,b8.8) + read(cbits,1001) i1Msg8BitBytes(1:10) +1001 format(10b8) + i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),transfer(128+64+32,0_1)) + i1Msg8BitBytes(11)=0 + icrc12=crc12(c_loc(i1Msg8BitBytes),11) + icrc12=xor(icrc12, 42) ! TODO: jsherer - could change the crc here + +! For reference, here's how to check the CRC +! i1Msg8BitBytes(10)=icrc12/256 +! i1Msg8BitBytes(11)=iand (icrc12,255) +! checksumok = crc12_check(c_loc (i1Msg8BitBytes), 11) +! if( checksumok ) write(*,*) 'Good checksum' + + write(cbits,1003) i4Msg6BitWords,i3bit,icrc12 +1003 format(12b6.6,b3.3,b12.12) + read(cbits,1004) msgbits +1004 format(87i1) + + call encode174(msgbits,codeword) !Encode the test message + +! Message structure: S7 D29 S7 D29 S7 + itone(1:7)=icos7a + itone(36+1:36+7)=icos7b + itone(NN-6:NN)=icos7c + k=7 + do j=1,ND + i=3*j -2 + k=k+1 + if(j.eq.30) k=k+7 + indx=codeword(i)*4 + codeword(i+1)*2 + codeword(i+2) + itone(k)=indx + enddo + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'tones', itone + write(99,*) '...', icos7a, '--->', NCOSTAS + close(99) + endif + + return +end subroutine genjs8 diff --git a/lib/js8/genjs8refsig.f90 b/lib/js8/genjs8refsig.f90 new file mode 100644 index 0000000..d3f4ea4 --- /dev/null +++ b/lib/js8/genjs8refsig.f90 @@ -0,0 +1,24 @@ +subroutine genjs8refsig(itone,cref,f0) + !include 'js8_params.f90' + + complex cref(NN*NSPS) + integer itone(NN) + real*8 twopi,phi,dphi,dt,xnsps + data twopi/0.d0/ + save twopi + if( twopi .lt. 0.1 ) twopi=8.d0*atan(1.d0) + + xnsps=NSPS*1.0d0 + dt=1.d0/12000.d0 + phi=0.d0 + k=1 + do i=1,NN + dphi=twopi*(f0*dt+itone(i)/xnsps) + do is=1,NSPS + cref(k)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi,twopi) + k=k+1 + enddo + enddo + return +end subroutine genjs8refsig diff --git a/lib/js8/js8_downsample.f90 b/lib/js8/js8_downsample.f90 new file mode 100644 index 0000000..f933be1 --- /dev/null +++ b/lib/js8/js8_downsample.f90 @@ -0,0 +1,54 @@ +subroutine js8_downsample(dd,newdat,f0,c1) + + ! Downconvert to complex data sampled at 200 Hz ==> 32 samples/symbol + + !include 'js8_params.f90' + + parameter (NDFFT1=NSPS*NDD, NDFFT2=NDFFT1/NDOWN) ! Downconverted FFT Size - 192000/60 = 3200 + + logical newdat,first + + complex c1(0:NDFFT2-1) + complex cx(0:NDFFT1/2) + real dd(NMAX),x(NDFFT1),taper(0:NDD) + equivalence (x,cx) + data first/.true./ + save cx,first,taper + + if(first) then + pi=4.0*atan(1.0) + do i=0,NDD + taper(i)=0.5*(1.0+cos(i*pi/NDD)) + enddo + first=.false. + endif + if(newdat) then + ! Data in dd have changed, recompute the long FFT + x(1:NMAX)=dd + x(NMAX+1:NDFFT1)=0. !Zero-pad the x array + call four2a(cx,NDFFT1,1,-1,0) !r2c FFT to freq domain + newdat=.false. + endif + + df=12000.0/NDFFT1 + baud=12000.0/NSPS + i0=nint(f0/df) + ft=f0+8.5*baud + it=min(nint(ft/df),NDFFT1/2) + fb=f0-1.5*baud + ib=max(1,nint(fb/df)) + k=0 + c1=0. + do i=ib,it + c1(k)=cx(i) + k=k+1 + enddo + c1(0:NDD)=c1(0:NDD)*taper(NDD:0:-1) + c1(k-1-NDD:k-1)=c1(k-1-NDD:k-1)*taper + c1=cshift(c1,i0-ib) + call four2a(c1,NDFFT2,1,1,1) !c2c FFT back to time domain + fac=1.0/sqrt(float(NDFFT1)*NDFFT2) + c1=fac*c1 + + return +end subroutine js8_downsample diff --git a/lib/js8/js8_params.f90 b/lib/js8/js8_params.f90 new file mode 100644 index 0000000..fc5512c --- /dev/null +++ b/lib/js8/js8_params.f90 @@ -0,0 +1,2 @@ +parameter (NCOSTAS=2) !Which JS8 Costas Arrays to use (1=original, 2=three symmetrical costas) +parameter (NWRITELOG=0) !Write log file? diff --git a/lib/js8/js8b_params.f90 b/lib/js8/js8b_params.f90 new file mode 100644 index 0000000..aece5a5 --- /dev/null +++ b/lib/js8/js8b_params.f90 @@ -0,0 +1,36 @@ +!parameter (NSPS=480) !Samples per symbol at 12000 S/s +!parameter (NTXDUR=5) !TX Duration in Seconds +!parameter (NDOWNSPS=16) !Downsampled samples per symbol +!parameter (AZ=6.0) !Near dupe sync spacing +!parameter (NDD=136) !Downconverted FFT Bins - 100 Bins +!parameter (JZ=62) !Sync Search Space over +/- 2.5s relative to 0.5s TX start time. 2.48 = 62/4/(12000/1920) ? + + +! parameter (NSPS=384, NTXDUR=4, NDOWNSPS=16, NDD=150, JZ=116) ! 250 Hz 31.25 baud 60 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=384, NTXDUR=5, NDOWNSPS=16, NDD=160, JZ=116) ! 250 Hz 31.25 baud 48 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=480, NTXDUR=5, NDOWNSPS=16, NDD=136, JZ=116) ! 200 Hz 25 baud 48 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=480, NTXDUR=6, NDOWNSPS=20, NDD=150, JZ=116) ! 200 Hz 25 baud 40 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=500, NTXDUR=6, NDOWNSPS=20, NDD=144, JZ=116) ! 192 Hz 24 baud 40 wpm -19.4dB (1.0Eb/N0) 3.29s +! parameter (NSPS=600, NTXDUR=6, NDOWNSPS=24, NDD=120, JZ=116) ! 160 Hz 20 baud 40 wpm -20.0dB (1.0Eb/N0) 3.95s +! parameter (NSPS=768, NTXDUR=8, NDOWNSPS=24, NDD=125, JZ=116) ! 125 Hz 15.625 baud 32 wpm -21.0dB (1.0Eb/N0) 5.05s +! parameter (NSPS=800, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 120 Hz 15 baud 32 wpm -21.2dB (1.0Eb/N0) 5.26s +! parameter (NSPS=960, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 100 Hz 12.50 baud 32 wpm -22.0dB (1.0Eb/N0) 5.92s + parameter (NSPS=1200, NTXDUR=10, NDOWNSPS=20, NDD=100, JZ=172) ! 80 Hz 10 baud 24 wpm -23.0dB (1.0Eb/N0) 7.90s +! parameter (NSPS=1920, NTXDUR=15, NDOWNSPS=32, NDD=100, JZ=116) ! 50 Hz 6.250 baud 16 wpm -25.0dB (1.0Eb/N0) 12.64s +! parameter (NSPS=4000, NTXDUR=30, NDOWNSPS=20, NDD=90, JZ=62) ! 24 Hz 3 baud 8 wpm -28.2dB (1.0Eb/N0) 26.33s + +parameter (AZ=12000.0/(1.0*NSPS)*0.64d0) !Dedupe overlap in Hz +parameter (ASTART=0.2) !Start delay in seconds +parameter (ASYNCMIN=1.5) !Minimum Sync + +parameter (KK=87) !Information bits (75 + CRC12) +parameter (ND=58) !Data symbols +parameter (NS=21) !Sync symbols (3 @ Costas 7x7) +parameter (NN=NS+ND) !Total channel symbols (79) +parameter (NZ=NSPS*NN) !Samples in full 15 s waveform (151,680) +parameter (NMAX=NTXDUR*12000) !Samples in iwave (180,000) +parameter (NFFT1=2*NSPS, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=NSPS/NDOWNSPS) !Downsample factor to 32 samples per symbol +parameter (NQSYMBOL=NDOWNSPS/4) !Downsample factor of a quarter symbol diff --git a/lib/js8/js8c_params.f90 b/lib/js8/js8c_params.f90 new file mode 100644 index 0000000..caba06e --- /dev/null +++ b/lib/js8/js8c_params.f90 @@ -0,0 +1,36 @@ +!parameter (NSPS=480) !Samples per symbol at 12000 S/s +!parameter (NTXDUR=5) !TX Duration in Seconds +!parameter (NDOWNSPS=16) !Downsampled samples per symbol +!parameter (AZ=6.0) !Near dupe sync spacing +!parameter (NDD=136) !Downconverted FFT Bins - 100 Bins +!parameter (JZ=62) !Sync Search Space over +/- 2.5s relative to 0.5s TX start time. 2.48 = 62/4/(12000/1920) ? + + +! parameter (NSPS=384, NTXDUR=4, NDOWNSPS=16, NDD=150, JZ=116) ! 250 Hz 31.25 baud 60 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=384, NTXDUR=5, NDOWNSPS=16, NDD=160, JZ=116) ! 250 Hz 31.25 baud 48 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=480, NTXDUR=5, NDOWNSPS=16, NDD=136, JZ=116) ! 200 Hz 25 baud 48 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=480, NTXDUR=6, NDOWNSPS=20, NDD=150, JZ=116) ! 200 Hz 25 baud 40 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=500, NTXDUR=6, NDOWNSPS=20, NDD=144, JZ=116) ! 192 Hz 24 baud 40 wpm -19.4dB (1.0Eb/N0) 3.29s + parameter (NSPS=600, NTXDUR=6, NDOWNSPS=12, NDD=120, JZ=172) ! 160 Hz 20 baud 40 wpm -20.0dB (1.0Eb/N0) 3.95s +! parameter (NSPS=768, NTXDUR=8, NDOWNSPS=24, NDD=125, JZ=116) ! 125 Hz 15.625 baud 32 wpm -21.0dB (1.0Eb/N0) 5.05s +! parameter (NSPS=800, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 120 Hz 15 baud 32 wpm -21.2dB (1.0Eb/N0) 5.26s +! parameter (NSPS=960, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 100 Hz 12.50 baud 32 wpm -22.0dB (1.0Eb/N0) 5.92s +! parameter (NSPS=1200, NTXDUR=10, NDOWNSPS=20, NDD=100, JZ=116) ! 80 Hz 10 baud 24 wpm -23.0dB (1.0Eb/N0) 7.90s +! parameter (NSPS=1920, NTXDUR=15, NDOWNSPS=32, NDD=100, JZ=116) ! 50 Hz 6.250 baud 16 wpm -25.0dB (1.0Eb/N0) 12.64s +! parameter (NSPS=4000, NTXDUR=30, NDOWNSPS=20, NDD=90, JZ=62) ! 24 Hz 3 baud 8 wpm -28.2dB (1.0Eb/N0) 26.33s + +parameter (AZ=12000.0/(1.0*NSPS)*0.64d0) !Dedupe overlap in Hz +parameter (ASTART=0.1) !Start delay in seconds +parameter (ASYNCMIN=1.5) !Minimum Sync + +parameter (KK=87) !Information bits (75 + CRC12) +parameter (ND=58) !Data symbols +parameter (NS=21) !Sync symbols (3 @ Costas 7x7) +parameter (NN=NS+ND) !Total channel symbols (79) +parameter (NZ=NSPS*NN) !Samples in full 15 s waveform (151,680) +parameter (NMAX=NTXDUR*12000) !Samples in iwave (180,000) +parameter (NFFT1=2*NSPS, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=NSPS/NDOWNSPS) !Downsample factor to 32 samples per symbol +parameter (NQSYMBOL=NDOWNSPS/4) !Downsample factor of a quarter symbol diff --git a/lib/js8/js8d_params.f90 b/lib/js8/js8d_params.f90 new file mode 100644 index 0000000..664e9c1 --- /dev/null +++ b/lib/js8/js8d_params.f90 @@ -0,0 +1,36 @@ +!parameter (NSPS=480) !Samples per symbol at 12000 S/s +!parameter (NTXDUR=5) !TX Duration in Seconds +!parameter (NDOWNSPS=16) !Downsampled samples per symbol +!parameter (AZ=6.0) !Near dupe sync spacing +!parameter (NDD=136) !Downconverted FFT Bins - 100 Bins +!parameter (JZ=62) !Sync Search Space over +/- 2.5s relative to 0.5s TX start time. 2.48 = 62/4/(12000/1920) ? + + + parameter (NSPS=384, NTXDUR=4, NDOWNSPS=12, NDD=125, JZ=250) ! 250 Hz 31.25 baud 60 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=384, NTXDUR=5, NDOWNSPS=12, NDD=125, JZ=116) ! 250 Hz 31.25 baud 48 wpm -18.0dB (1.0Eb/N0) 2.52s +! parameter (NSPS=480, NTXDUR=5, NDOWNSPS=12, NDD=125, JZ=116) ! 200 Hz 25 baud 48 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=480, NTXDUR=6, NDOWNSPS=20, NDD=150, JZ=116) ! 200 Hz 25 baud 40 wpm -19.0dB (1.0Eb/N0) 3.16s +! parameter (NSPS=500, NTXDUR=6, NDOWNSPS=20, NDD=144, JZ=116) ! 192 Hz 24 baud 40 wpm -19.4dB (1.0Eb/N0) 3.29s +! parameter (NSPS=600, NTXDUR=6, NDOWNSPS=24, NDD=120, JZ=172) ! 160 Hz 20 baud 40 wpm -20.0dB (1.0Eb/N0) 3.95s +! parameter (NSPS=768, NTXDUR=8, NDOWNSPS=24, NDD=125, JZ=116) ! 125 Hz 15.625 baud 32 wpm -21.0dB (1.0Eb/N0) 5.05s +! parameter (NSPS=800, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 120 Hz 15 baud 32 wpm -21.2dB (1.0Eb/N0) 5.26s +! parameter (NSPS=960, NTXDUR=8, NDOWNSPS=24, NDD=100, JZ=116) ! 100 Hz 12.50 baud 32 wpm -22.0dB (1.0Eb/N0) 5.92s +! parameter (NSPS=1200, NTXDUR=10, NDOWNSPS=20, NDD=100, JZ=116) ! 80 Hz 10 baud 24 wpm -23.0dB (1.0Eb/N0) 7.90s +! parameter (NSPS=1920, NTXDUR=15, NDOWNSPS=32, NDD=100, JZ=116) ! 50 Hz 6.250 baud 16 wpm -25.0dB (1.0Eb/N0) 12.64s +! parameter (NSPS=4000, NTXDUR=30, NDOWNSPS=40, NDD=90, JZ=116) ! 24 Hz 3 baud 8 wpm -28.2dB (1.0Eb/N0) 26.33s + +parameter (AZ=12000.0/(1.0*NSPS)*0.64d0) !Dedupe overlap in Hz +parameter (ASTART=0.1) !Start delay in seconds +parameter (ASYNCMIN=1.5) !Minimum Sync + +parameter (KK=87) !Information bits (75 + CRC12) +parameter (ND=58) !Data symbols +parameter (NS=21) !Sync symbols (3 @ Costas 7x7) +parameter (NN=NS+ND) !Total channel symbols (79) +parameter (NZ=NSPS*NN) !Samples in full 15 s waveform (151,680) +parameter (NMAX=NTXDUR*12000) !Samples in iwave (180,000) +parameter (NFFT1=2*NSPS, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSTEP=NSPS/4) !Rough time-sync step size +parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps) +parameter (NDOWN=NSPS/NDOWNSPS) !Downsample factor to 32 samples per symbol +parameter (NQSYMBOL=NDOWNSPS/4) !Downsample factor of a quarter symbol diff --git a/lib/js8/js8dec.f90 b/lib/js8/js8dec.f90 new file mode 100644 index 0000000..36b8f56 --- /dev/null +++ b/lib/js8/js8dec.f90 @@ -0,0 +1,486 @@ +subroutine js8dec(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, & + napwid,lsubtract,nagain,iaptype,mycall12,mygrid6,hiscall12,bcontest, & + sync0,f1,xdt,xbase,apsym,nharderrors,dmin,nbadcrc,ipass,iera,msg37,xsnr) + + use crc + use timer_module, only: timer + + !include 'js8_params.f90' + + parameter(NP=3200) ! why 3200? not sure... + parameter(NP2=2812) + character*37 msg37 + character message*22,msgsent*22,origmsg*22 + character*12 mycall12,hiscall12 + character*6 mycall6,mygrid6,hiscall6,c1,c2 + character*87 cbits + logical bcontest + real a(5) + real s1(0:7,ND),s2(0:7,NN),s1sort(8*ND) + real ps(0:7),psl(0:7) + real bmeta(3*ND),bmetb(3*ND),bmetap(3*ND) + real llr(3*ND),llra(3*ND),llr0(3*ND),llr1(3*ND),llrap(3*ND) !Soft symbols + real dd0(NMAX) + integer*1 decoded(KK),decoded0(KK),apmask(3*ND),cw(3*ND) + integer*1 msgbits(KK) + integer apsym(KK) + integer mcq(28),mde(28),mrrr(16),m73(16),mrr73(16) + integer itone(NN) + integer indxs1(8*ND) + integer ip(1) + integer nappasses(0:5) !Number of decoding passes to use for each QSO state + integer naptypes(0:5,4) ! (nQSOProgress, decoding pass) maximum of 4 passes for now + integer*1, target:: i1hiscall(12) + complex cd0(0:NP-1) + complex ctwk(4*NSPS/NDOWN) + complex csymb(NDOWNSPS) + logical first,newdat,lsubtract,lapon,lapcqonly,nagain + equivalence (s1,s1sort) + data mcq/1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1/ + data mrrr/0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1/ + data m73/0,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0/ + data mde/1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1/ + data mrr73/0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1/ + data first/.true./ + save nappasses,naptypes + + integer icos7a(0:6), icos7b(0:6), icos7c(0:6) + if(NCOSTAS.eq.1) then + icos7a = (/4,2,5,6,1,3,0/) !Beginning Costas 7x7 tone pattern + icos7b = (/4,2,5,6,1,3,0/) !Middle Costas 7x7 tone pattern + icos7c = (/4,2,5,6,1,3,0/) !End Costas 7x7 tone pattern + else + icos7a = (/0,6,2,3,5,4,1/) !Beginning Costas 7x7 tone pattern + icos7b = (/1,5,0,2,3,6,4/) !Middle Costas 7x7 tone pattern + icos7c = (/2,5,0,6,4,1,3/) !End Costas 7x7 tone pattern + endif + + if(first) then + mcq=2*mcq-1 + mde=2*mde-1 + mrrr=2*mrrr-1 + m73=2*m73-1 + mrr73=2*mrr73-1 + nappasses(0)=2 + nappasses(1)=2 + nappasses(2)=2 + nappasses(3)=4 + nappasses(4)=4 + nappasses(5)=3 + +! iaptype +!------------------------ +! 1 CQ ??? ??? +! 2 MyCall ??? ??? +! 3 MyCall DxCall ??? +! 4 MyCall DxCall RRR +! 5 MyCall DxCall 73 +! 6 MyCall DxCall RR73 +! 7 ??? DxCall ??? + + naptypes(0,1:4)=(/1,2,0,0/) + naptypes(1,1:4)=(/2,3,0,0/) + naptypes(2,1:4)=(/2,3,0,0/) + naptypes(3,1:4)=(/3,4,5,6/) + naptypes(4,1:4)=(/3,4,5,6/) + naptypes(5,1:4)=(/3,1,2,0/) + first=.false. + endif + + max_iterations=30 + nharderrors=-1 + fs2=12000.0/NDOWN + dt2=1.0/fs2 + twopi=8.0*atan(1.0) + delfbest=0. + ibest=0 + + call timer('js8_down',0) + call js8_downsample(dd0,newdat,f1,cd0) !Mix f1 to baseband and downsample + call timer('js8_down',1) + + xdt=xdt+ASTART + i0=nint(xdt*fs2) !Initial guess for start of signal + smax=0.0 + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'initial dt guess', i0, xdt + close(99) + endif + + do idt=i0-NQSYMBOL,i0+NQSYMBOL !Search over +/- one quarter symbol + call syncjs8d(cd0,idt,ctwk,0,sync) + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'idt', idt, 'sync', sync + close(99) + endif + if(sync.gt.smax) then + smax=sync + ibest=idt + endif + enddo + xdt2=ibest*dt2 !Improved estimate for DT + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'xdt2', xdt2, ibest + close(99) + endif + +! Now peak up in frequency + i0=nint(xdt2*fs2) + smax=0.0 + + do ifr=-5,5 !Search over +/- 2.5 Hz + delf=ifr*0.5 + dphi=twopi*delf*dt2 + phi=0.0 + do i=1,NDOWNSPS + ctwk(i)=cmplx(cos(phi),sin(phi)) + phi=mod(phi+dphi,twopi) + enddo + call syncjs8d(cd0,i0,ctwk,1,sync) + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'df', delf, 'sync', sync + close(99) + endif + if( sync .gt. smax ) then + smax=sync + delfbest=delf + endif + enddo + a=0.0 + a(1)=-delfbest + call twkfreq1(cd0,NP2,fs2,a,cd0) + xdt=xdt2 + f1=f1+delfbest !Improved estimate of DF + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'twk', xdt, f1, smax + close(99) + endif + + call syncjs8d(cd0,i0,ctwk,2,sync) + + j=0 + do k=1,NN + i1=ibest+(k-1)*NDOWNSPS + csymb=cmplx(0.0,0.0) + !if( i1.ge.1 .and. i1+31 .le. NP2 ) csymb=cd0(i1:i1+31) + if( i1.ge.0 .and. i1+(NDOWNSPS-1) .le. NP2-1 ) csymb=cd0(i1:i1+(NDOWNSPS-1)) + call four2a(csymb,NDOWNSPS,1,-1,1) + s2(0:7,k)=abs(csymb(1:8))/1e3 + enddo + +! sync quality check + is1=0 + is2=0 + is3=0 + do k=1,7 + ip=maxloc(s2(:,k)) + if(icos7a(k-1).eq.(ip(1)-1)) is1=is1+1 + ip=maxloc(s2(:,k+36)) + if(icos7b(k-1).eq.(ip(1)-1)) is2=is2+1 + ip=maxloc(s2(:,k+72)) + if(icos7c(k-1).eq.(ip(1)-1)) is3=is3+1 + enddo +! hard sync sum - max is 21 + nsync=is1+is2+is3 + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'sync', ibest, nsync + close(99) + endif + + if(nsync .le. 6) then ! bail out + call timer('badnsync', 0) + nbadcrc=1 + call timer('badnsync', 1) + return + endif + + j=0 + do k=1,NN + if(k.le.7) cycle + if(k.ge.37 .and. k.le.43) cycle + if(k.gt.72) cycle + j=j+1 + s1(0:7,j)=s2(0:7,k) + enddo + + call indexx(s1sort,8*ND,indxs1) + xmeds1=s1sort(indxs1(nint(0.5*8*ND))) + s1=s1/xmeds1 + + do j=1,ND + i4=3*j-2 + i2=3*j-1 + i1=3*j +! Max amplitude + ps=s1(0:7,j) + r1=max(ps(1),ps(3),ps(5),ps(7))-max(ps(0),ps(2),ps(4),ps(6)) + r2=max(ps(2),ps(3),ps(6),ps(7))-max(ps(0),ps(1),ps(4),ps(5)) + r4=max(ps(4),ps(5),ps(6),ps(7))-max(ps(0),ps(1),ps(2),ps(3)) + bmeta(i4)=r4 + bmeta(i2)=r2 + bmeta(i1)=r1 + bmetap(i4)=r4 + bmetap(i2)=r2 + bmetap(i1)=r1 +! Max log metric + psl=log(ps+1e-32) + r1=max(psl(1),psl(3),psl(5),psl(7))-max(psl(0),psl(2),psl(4),psl(6)) + r2=max(psl(2),psl(3),psl(6),psl(7))-max(psl(0),psl(1),psl(4),psl(5)) + r4=max(psl(4),psl(5),psl(6),psl(7))-max(psl(0),psl(1),psl(2),psl(3)) + bmetb(i4)=r4 + bmetb(i2)=r2 + bmetb(i1)=r1 + +! Metric for Cauchy noise +! r1=log(ps(1)**3+ps(3)**3+ps(5)**3+ps(7)**3)- & +! log(ps(0)**3+ps(2)**3+ps(4)**3+ps(6)**3) +! r2=log(ps(2)**3+ps(3)**3+ps(6)**3+ps(7)**3)- & +! log(ps(0)**3+ps(1)**3+ps(4)**3+ps(5)**3) +! r4=log(ps(4)**3+ps(5)**3+ps(6)**3+ps(7)**3)- & +! log(ps(0)**3+ps(1)**3+ps(2)**3+ps(3)**3) +! Metric for AWGN, no fading +! bscale=2.5 +! b0=bessi0(bscale*ps(0)) +! b1=bessi0(bscale*ps(1)) +! b2=bessi0(bscale*ps(2)) +! b3=bessi0(bscale*ps(3)) +! b4=bessi0(bscale*ps(4)) +! b5=bessi0(bscale*ps(5)) +! b6=bessi0(bscale*ps(6)) +! b7=bessi0(bscale*ps(7)) +! r1=log(b1+b3+b5+b7)-log(b0+b2+b4+b6) +! r2=log(b2+b3+b6+b7)-log(b0+b1+b4+b5) +! r4=log(b4+b5+b6+b7)-log(b0+b1+b2+b3) + + if(nQSOProgress .eq. 0 .or. nQSOProgress .eq. 5) then +! When bits 88:115 are set as ap bits, bit 115 lives in symbol 39 along +! with no-ap bits 116 and 117. Take care of metrics for bits 116 and 117. + if(j.eq.39) then ! take care of bits that live in symbol 39 + if(apsym(28).lt.0) then + bmetap(i2)=max(ps(2),ps(3))-max(ps(0),ps(1)) + bmetap(i1)=max(ps(1),ps(3))-max(ps(0),ps(2)) + else + bmetap(i2)=max(ps(6),ps(7))-max(ps(4),ps(5)) + bmetap(i1)=max(ps(5),ps(7))-max(ps(4),ps(6)) + endif + endif + endif + +! When bits 116:143 are set as ap bits, bit 115 lives in symbol 39 along +! with ap bits 116 and 117. Take care of metric for bit 115. + if(j.eq.39) then ! take care of bit 115 + iii=2*(apsym(29)+1)/2 + (apsym(30)+1)/2 ! known values of bits 116 & 117 + if(iii.eq.0) bmetap(i4)=ps(4)-ps(0) + if(iii.eq.1) bmetap(i4)=ps(5)-ps(1) + if(iii.eq.2) bmetap(i4)=ps(6)-ps(2) + if(iii.eq.3) bmetap(i4)=ps(7)-ps(3) + endif + +! bit 144 lives in symbol 48 and will be 1 if it is set as an ap bit. +! take care of metrics for bits 142 and 143 + if(j.eq.48) then ! bit 144 is always 1 + bmetap(i4)=max(ps(5),ps(7))-max(ps(1),ps(3)) + bmetap(i2)=max(ps(3),ps(7))-max(ps(1),ps(5)) + endif + +! bit 154 lives in symbol 52 and will be 0 if it is set as an ap bit +! take care of metrics for bits 155 and 156 + if(j.eq.52) then ! bit 154 will be 0 if it is set as an ap bit. + bmetap(i2)=max(ps(2),ps(3))-max(ps(0),ps(1)) + bmetap(i1)=max(ps(1),ps(3))-max(ps(0),ps(2)) + endif + + enddo + + call normalizebmet(bmeta,3*ND) + call normalizebmet(bmetb,3*ND) + call normalizebmet(bmetap,3*ND) + + scalefac=2.83 + llr0=scalefac*bmeta + llr1=scalefac*bmetb + llra=scalefac*bmetap ! llr's for use with ap + apmag=scalefac*(maxval(abs(bmetap))*1.01) + +! pass # +!------------------------------ +! 1 regular decoding +! 2 erase 24 +! 3 erase 48 +! 4 ap pass 1 +! 5 ap pass 2 +! 6 ap pass 3 +! 7 ap pass 4, etc. + + !if(lapon) then + ! if(.not.lapcqonly) then + ! npasses=4+nappasses(nQSOProgress) + ! else + ! npasses=5 + ! endif + !else + npasses=4 + !endif + + do ipass=1,npasses + + llr=llr0 + if(ipass.eq.2) llr=llr1 + if(ipass.eq.3) llr(1:24)=0. + if(ipass.eq.4) llr(1:48)=0. + if(ipass.le.4) then + apmask=0 + llrap=llr + iaptype=0 + endif + + !if(ipass .gt. 4) then + ! if(.not.lapcqonly) then + ! iaptype=naptypes(nQSOProgress,ipass-4) + ! else + ! iaptype=1 + ! endif + ! if(iaptype.ge.3 .and. (abs(f1-nfqso).gt.napwid .and. abs(f1-nftx).gt.napwid) ) cycle + ! if(iaptype.eq.1 .or. iaptype.eq.2 ) then ! AP,???,??? + ! apmask=0 + ! apmask(88:115)=1 ! first 28 bits are AP + ! apmask(144)=1 ! not free text + ! llrap=llr + ! if(iaptype.eq.1) llrap(88:115)=apmag*mcq + ! if(iaptype.eq.2) llrap(88:115)=apmag*apsym(1:28) + ! llrap(116:117)=llra(116:117) + ! llrap(142:143)=llra(142:143) + ! llrap(144)=-apmag + ! endif + ! if(iaptype.eq.3) then ! mycall, dxcall, ??? + ! apmask=0 + ! apmask(88:115)=1 ! mycall + ! apmask(116:143)=1 ! hiscall + ! apmask(144)=1 ! not free text + ! llrap=llr + ! llrap(88:143)=apmag*apsym(1:56) + ! llrap(144)=-apmag + ! endif + ! if(iaptype.eq.4 .or. iaptype.eq.5 .or. iaptype.eq.6) then + ! apmask=0 + ! apmask(88:115)=1 ! mycall + ! apmask(116:143)=1 ! hiscall + ! apmask(144:159)=1 ! RRR or 73 or RR73 + ! llrap=llr + ! llrap(88:143)=apmag*apsym(1:56) + ! if(iaptype.eq.4) llrap(144:159)=apmag*mrrr + ! if(iaptype.eq.5) llrap(144:159)=apmag*m73 + ! if(iaptype.eq.6) llrap(144:159)=apmag*mrr73 + ! endif + ! if(iaptype.eq.7) then ! ???, dxcall, ??? + ! apmask=0 + ! apmask(116:143)=1 ! hiscall + ! apmask(144)=1 ! not free text + ! llrap=llr + ! llrap(115)=llra(115) + ! llrap(116:143)=apmag*apsym(29:56) + ! llrap(144)=-apmag + ! endif + !endif + + cw=0 + call timer('bpd174 ',0) + call bpdecode174(llrap,apmask,max_iterations,decoded,cw,nharderrors, & + niterations) + call timer('bpd174 ',1) + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '> bpd174 ', ipass, nharderrors, dmin + close(99) + endif + + dmin=0.0 + if(ndepth.eq.3 .and. nharderrors.lt.0) then + ndeep=3 + if(abs(nfqso-f1).le.napwid .or. abs(nftx-f1).le.napwid) then + if((ipass.eq.3 .or. ipass.eq.4) .and. .not.nagain) then + ndeep=3 + else + ndeep=4 + endif + endif + if(nagain) ndeep=5 + call timer('osd174 ',0) + call osd174(llrap,apmask,ndeep,decoded,cw,nharderrors,dmin) + call timer('osd174 ',1) + endif + nbadcrc=1 + message=' ' + xsnr=-99.0 + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '> osd174', ipass, nharderrors, dmin, nharderrors + dmin, sync + close(99) + endif + + if(count(cw.eq.0).eq.174) cycle !Reject the all-zero codeword + if(nharderrors.ge.0 .and. nharderrors+dmin.lt.60.0 .and. & + .not.(sync.lt.2.0 .and. nharderrors.gt.35) .and. & + .not.(ipass.gt.2 .and. nharderrors.gt.39) .and. & + .not.(ipass.eq.4 .and. nharderrors.gt.30) & + ) then + call chkcrc12a(decoded,nbadcrc) + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '> crc', decoded + if(nbadcrc.eq.1) then + write(99,*) '> crc failed' + endif + close(99) + endif + else + nharderrors=-1 + cycle + endif + i3bit=4*decoded(73) + 2*decoded(74) + decoded(75) + + if(nbadcrc.eq.0) then + decoded0=decoded + call extractmessage174(decoded,origmsg,ncrcflag) + decoded=decoded0 + + message(1:12)=origmsg(1:12) + call genjs8(message,mygrid6,bcontest,i3bit,msgsent,msgbits,itone) + if(lsubtract) call subtractjs8(dd0,itone,f1,xdt2) + xsig=0.0 + xnoi=0.0 + do i=1,NN + xsig=xsig+s2(itone(i),i)**2 + ios=mod(itone(i)+4,7) + xnoi=xnoi+s2(ios,i)**2 + enddo + xsnr=0.001 + if(xnoi.gt.0 .and. xnoi.lt.xsig) xsnr=xsig/xnoi-1.0 + xsnr=10.0*log10(xsnr)-27.0 + xsnr2=db(xsig/xbase - 1.0) - 32.0 + if(.not.nagain) xsnr=xsnr2 + if(xsnr .lt. -24.0) xsnr=-24.0 + + msg37=origmsg//' ' + + msg37(22:22) = char(48 + i3bit) + + return + endif + enddo + + return +end subroutine js8dec diff --git a/lib/js8/ldpcsim174js8b.f90 b/lib/js8/ldpcsim174js8b.f90 new file mode 100644 index 0000000..de047d3 --- /dev/null +++ b/lib/js8/ldpcsim174js8b.f90 @@ -0,0 +1,238 @@ +program ldpcsim174js8 +! End to end test of the (174,75)/crc12 encoder and decoder. +use crc +use packjt + +include 'js8_params.f90' +include 'js8b_params.f90' + +character*22 msg,msgsent,msgreceived +character*8 arg +character*6 grid +integer*1, allocatable :: codeword(:), decoded(:), message(:) +integer*1, target:: i1Msg8BitBytes(11) +integer*1 msgbits(87) +integer*1 apmask(174), cw(174) +integer*2 checksum +integer*4 i4Msg6BitWords(13) +integer colorder(174) +integer nerrtot(174),nerrdec(174),nmpcbad(87) +logical checksumok,fsk,bpsk +real*8, allocatable :: rxdata(:) +real, allocatable :: llr(:) + +data colorder/ & + 0, 1, 2, 3, 30, 4, 5, 6, 7, 8, 9, 10, 11, 32, 12, 40, 13, 14, 15, 16,& + 17, 18, 37, 45, 29, 19, 20, 21, 41, 22, 42, 31, 33, 34, 44, 35, 47, 51, 50, 43,& + 36, 52, 63, 46, 25, 55, 27, 24, 23, 53, 39, 49, 59, 38, 48, 61, 60, 57, 28, 62,& + 56, 58, 65, 66, 26, 70, 64, 69, 68, 67, 74, 71, 54, 76, 72, 75, 78, 77, 80, 79,& + 73, 83, 84, 81, 82, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,& + 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,& + 120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,& + 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,& + 160,161,162,163,164,165,166,167,168,169,170,171,172,173/ + +nerrtot=0 +nerrdec=0 +nmpcbad=0 ! Used to collect the number of errors in the message+crc part of the codeword + +nargs=iargc() +if(nargs.ne.4) then + print*,'Usage: ldpcsim niter ndepth #trials s ' + print*,'eg: ldpcsim 10 2 1000 0.84' + print*,'belief propagation iterations: niter, ordered-statistics depth: ndepth' + print*,'If s is negative, then value is ignored and sigma is calculated from SNR.' + return +endif +call getarg(1,arg) +read(arg,*) max_iterations +call getarg(2,arg) +read(arg,*) ndepth +call getarg(3,arg) +read(arg,*) ntrials +call getarg(4,arg) +read(arg,*) s + +fsk=.false. +bpsk=.true. + +! don't count crc bits as data bits +N=174 +K=87 +! scale Eb/No for a (174,87) code +rate=real(K)/real(N) + +write(*,*) "rate: ",rate +write(*,*) "niter= ",max_iterations," s= ",s + +allocate ( codeword(N), decoded(K), message(K) ) +allocate ( rxdata(N), llr(N) ) + + msg="0123456789012" +! msg="G4WJS K9AN EN50" + call packmsg(msg,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes + call unpackmsg(i4Msg6BitWords,msgsent,.false.,grid) !Unpack to get msgsent + write(*,*) "message sent ",msgsent + + i4=0 + ik=0 + im=0 + do i=1,12 + nna=i4Msg6BitWords(i) + do j=1, 6 + ik=ik+1 + i4=i4+i4+iand(1,ishft(nna,j-6)) + i4=iand(i4,255) + if(ik.eq.8) then + im=im+1 +! if(i4.gt.127) i4=i4-256 + i1Msg8BitBytes(im)=i4 + ik=0 + endif + enddo + enddo + + i1Msg8BitBytes(10:11)=0 + checksum = crc12 (c_loc (i1Msg8BitBytes), 11) + checksum = xor(checksum, 42) ! TODO: jsherer - could change the crc here +! For reference, the next 3 lines show how to check the CRC + i1Msg8BitBytes(10)=checksum/256 + i1Msg8BitBytes(11)=iand(checksum,transfer(255,0_2)) + checksumok = crc12_check(c_loc (i1Msg8BitBytes), 11) + if( checksumok ) write(*,*) 'Good checksum' + +! K=87, For now: +! msgbits(1:72) JT message bits +! msgbits(73:75) 3 free message bits (set to 0) +! msgbits(76:87) CRC12 + mbit=0 + do i=1, 9 + i1=i1Msg8BitBytes(i) + do ibit=1,8 + mbit=mbit+1 + msgbits(mbit)=iand(1,ishft(i1,ibit-8)) + enddo + enddo + msgbits(73:75)=0 ! the three extra message bits go here + i1=i1Msg8BitBytes(10) ! First 4 bits of crc12 are LSB of this byte + do ibit=1,4 + msgbits(75+ibit)=iand(1,ishft(i1,ibit-4)) + enddo + i1=i1Msg8BitBytes(11) ! Now shift in last 8 bits of the CRC + do ibit=1,8 + msgbits(79+ibit)=iand(1,ishft(i1,ibit-8)) + enddo + + write(*,*) 'message' + write(*,'(11(8i1,1x))') msgbits + + call encode174(msgbits,codeword) + call init_random_seed() +! call sgran() + + write(*,*) 'codeword' + write(*,'(22(8i1,1x))') codeword + +write(*,*) "Es/N0 SNR2500 ngood nundetected nbadcrc sigma" +do idb = 20,-10,-1 +!do idb = -3,-3,-1 + db=idb/2.0-1.0 + sigma=1/sqrt( 2*(10**(db/10.0)) ) + ngood=0 + nue=0 + nbadcrc=0 + nberr=0 + do itrial=1, ntrials +! Create a realization of a noisy received word + do i=1,N + if( bpsk ) then + rxdata(i) = 2.0*codeword(i)-1.0 + sigma*gran() + elseif( fsk ) then + if( codeword(i) .eq. 1 ) then + r1=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r2=(sigma*gran())**2 + (sigma*gran())**2 + elseif( codeword(i) .eq. 0 ) then + r2=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r1=(sigma*gran())**2 + (sigma*gran())**2 + endif +! rxdata(i)=0.35*(sqrt(r1)-sqrt(r2)) +! rxdata(i)=0.35*(exp(r1)-exp(r2)) + rxdata(i)=0.12*(log(r1)-log(r2)) + endif + enddo + nerr=0 + do i=1,N + if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1 + enddo + if(nerr.ge.1) nerrtot(nerr)=nerrtot(nerr)+1 + nberr=nberr+nerr + +! 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 +! To match the metric to the channel, s should be set to the noise standard deviation. +! For now, set s to the value that optimizes decode probability near threshold. +! The s parameter can be tuned to trade a few tenth's dB of threshold for an order of +! magnitude in UER + if( s .lt. 0 ) then + ss=sigma + else + ss=s + endif + + llr=2.0*rxdata/(ss*ss) + nap=0 ! number of AP bits + llr(colorder(174-87+1:174-87+nap)+1)=5*(2.0*msgbits(1:nap)-1.0) + apmask=0 + apmask(colorder(174-87+1:174-87+nap)+1)=1 + +! max_iterations is max number of belief propagation iterations + call bpdecode174(llr, apmask, max_iterations, decoded, cw, nharderrors,niterations) + if( ndepth .ge. 0 .and. nharderrors .lt. 0 ) call osd174(llr, apmask, ndepth, decoded, cw, nharderrors, dmin) +! If the decoder finds a valid codeword, nharderrors will be .ge. 0. + if( nharderrors .ge. 0 ) then + call extractmessage174(decoded,msgreceived,ncrcflag) + if( ncrcflag .ne. 1 ) then + nbadcrc=nbadcrc+1 + endif + + nueflag=0 + nerrmpc=0 + do i=1,K ! find number of errors in message+crc part of codeword + if( msgbits(i) .ne. decoded(i) ) then + nueflag=1 + nerrmpc=nerrmpc+1 + endif + enddo + if(nerrmpc.ge.1) nmpcbad(nerrmpc)=nmpcbad(nerrmpc)+1 + if( ncrcflag .eq. 1 ) then + if( nueflag .eq. 0 ) then + ngood=ngood+1 + if(nerr.ge.1) nerrdec(nerr)=nerrdec(nerr)+1 + else if( nueflag .eq. 1 ) then + nue=nue+1; + endif + endif + endif + enddo + baud=12000.0/NSPS + snr2500=db+10.0*log10((baud/2500.0)) + pberr=real(nberr)/(real(ntrials*N)) + write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,1x,i8,8x,f5.2,8x,e10.3)") db,snr2500,ngood,nue,nbadcrc,ss,pberr + +enddo + +open(unit=23,file='nerrhisto.dat',status='unknown') +do i=1,174 + write(23,'(i4,2x,i10,i10,f10.2)') i,nerrdec(i),nerrtot(i),real(nerrdec(i))/real(nerrtot(i)+1e-10) +enddo +close(23) +open(unit=25,file='nmpcbad.dat',status='unknown') +do i=1,87 + write(25,'(i4,2x,i10)') i,nmpcbad(i) +enddo +close(25) + +end program ldpcsim174js8 diff --git a/lib/js8/ldpcsim174js8c.f90 b/lib/js8/ldpcsim174js8c.f90 new file mode 100644 index 0000000..d42070d --- /dev/null +++ b/lib/js8/ldpcsim174js8c.f90 @@ -0,0 +1,238 @@ +program ldpcsim174js8 +! End to end test of the (174,75)/crc12 encoder and decoder. +use crc +use packjt + +include 'js8_params.f90' +include 'js8c_params.f90' + +character*22 msg,msgsent,msgreceived +character*8 arg +character*6 grid +integer*1, allocatable :: codeword(:), decoded(:), message(:) +integer*1, target:: i1Msg8BitBytes(11) +integer*1 msgbits(87) +integer*1 apmask(174), cw(174) +integer*2 checksum +integer*4 i4Msg6BitWords(13) +integer colorder(174) +integer nerrtot(174),nerrdec(174),nmpcbad(87) +logical checksumok,fsk,bpsk +real*8, allocatable :: rxdata(:) +real, allocatable :: llr(:) + +data colorder/ & + 0, 1, 2, 3, 30, 4, 5, 6, 7, 8, 9, 10, 11, 32, 12, 40, 13, 14, 15, 16,& + 17, 18, 37, 45, 29, 19, 20, 21, 41, 22, 42, 31, 33, 34, 44, 35, 47, 51, 50, 43,& + 36, 52, 63, 46, 25, 55, 27, 24, 23, 53, 39, 49, 59, 38, 48, 61, 60, 57, 28, 62,& + 56, 58, 65, 66, 26, 70, 64, 69, 68, 67, 74, 71, 54, 76, 72, 75, 78, 77, 80, 79,& + 73, 83, 84, 81, 82, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,& + 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,& + 120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,& + 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,& + 160,161,162,163,164,165,166,167,168,169,170,171,172,173/ + +nerrtot=0 +nerrdec=0 +nmpcbad=0 ! Used to collect the number of errors in the message+crc part of the codeword + +nargs=iargc() +if(nargs.ne.4) then + print*,'Usage: ldpcsim niter ndepth #trials s ' + print*,'eg: ldpcsim 10 2 1000 0.84' + print*,'belief propagation iterations: niter, ordered-statistics depth: ndepth' + print*,'If s is negative, then value is ignored and sigma is calculated from SNR.' + return +endif +call getarg(1,arg) +read(arg,*) max_iterations +call getarg(2,arg) +read(arg,*) ndepth +call getarg(3,arg) +read(arg,*) ntrials +call getarg(4,arg) +read(arg,*) s + +fsk=.false. +bpsk=.true. + +! don't count crc bits as data bits +N=174 +K=87 +! scale Eb/No for a (174,87) code +rate=real(K)/real(N) + +write(*,*) "rate: ",rate +write(*,*) "niter= ",max_iterations," s= ",s + +allocate ( codeword(N), decoded(K), message(K) ) +allocate ( rxdata(N), llr(N) ) + + msg="0123456789012" +! msg="G4WJS K9AN EN50" + call packmsg(msg,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes + call unpackmsg(i4Msg6BitWords,msgsent,.false.,grid) !Unpack to get msgsent + write(*,*) "message sent ",msgsent + + i4=0 + ik=0 + im=0 + do i=1,12 + nna=i4Msg6BitWords(i) + do j=1, 6 + ik=ik+1 + i4=i4+i4+iand(1,ishft(nna,j-6)) + i4=iand(i4,255) + if(ik.eq.8) then + im=im+1 +! if(i4.gt.127) i4=i4-256 + i1Msg8BitBytes(im)=i4 + ik=0 + endif + enddo + enddo + + i1Msg8BitBytes(10:11)=0 + checksum = crc12 (c_loc (i1Msg8BitBytes), 11) + checksum = xor(checksum, 42) ! TODO: jsherer - could change the crc here +! For reference, the next 3 lines show how to check the CRC + i1Msg8BitBytes(10)=checksum/256 + i1Msg8BitBytes(11)=iand(checksum,transfer(255,0_2)) + checksumok = crc12_check(c_loc (i1Msg8BitBytes), 11) + if( checksumok ) write(*,*) 'Good checksum' + +! K=87, For now: +! msgbits(1:72) JT message bits +! msgbits(73:75) 3 free message bits (set to 0) +! msgbits(76:87) CRC12 + mbit=0 + do i=1, 9 + i1=i1Msg8BitBytes(i) + do ibit=1,8 + mbit=mbit+1 + msgbits(mbit)=iand(1,ishft(i1,ibit-8)) + enddo + enddo + msgbits(73:75)=0 ! the three extra message bits go here + i1=i1Msg8BitBytes(10) ! First 4 bits of crc12 are LSB of this byte + do ibit=1,4 + msgbits(75+ibit)=iand(1,ishft(i1,ibit-4)) + enddo + i1=i1Msg8BitBytes(11) ! Now shift in last 8 bits of the CRC + do ibit=1,8 + msgbits(79+ibit)=iand(1,ishft(i1,ibit-8)) + enddo + + write(*,*) 'message' + write(*,'(11(8i1,1x))') msgbits + + call encode174(msgbits,codeword) + call init_random_seed() +! call sgran() + + write(*,*) 'codeword' + write(*,'(22(8i1,1x))') codeword + +write(*,*) "Es/N0 SNR2500 ngood nundetected nbadcrc sigma" +do idb = 20,-10,-1 +!do idb = -3,-3,-1 + db=idb/2.0-1.0 + sigma=1/sqrt( 2*(10**(db/10.0)) ) + ngood=0 + nue=0 + nbadcrc=0 + nberr=0 + do itrial=1, ntrials +! Create a realization of a noisy received word + do i=1,N + if( bpsk ) then + rxdata(i) = 2.0*codeword(i)-1.0 + sigma*gran() + elseif( fsk ) then + if( codeword(i) .eq. 1 ) then + r1=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r2=(sigma*gran())**2 + (sigma*gran())**2 + elseif( codeword(i) .eq. 0 ) then + r2=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r1=(sigma*gran())**2 + (sigma*gran())**2 + endif +! rxdata(i)=0.35*(sqrt(r1)-sqrt(r2)) +! rxdata(i)=0.35*(exp(r1)-exp(r2)) + rxdata(i)=0.12*(log(r1)-log(r2)) + endif + enddo + nerr=0 + do i=1,N + if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1 + enddo + if(nerr.ge.1) nerrtot(nerr)=nerrtot(nerr)+1 + nberr=nberr+nerr + +! 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 +! To match the metric to the channel, s should be set to the noise standard deviation. +! For now, set s to the value that optimizes decode probability near threshold. +! The s parameter can be tuned to trade a few tenth's dB of threshold for an order of +! magnitude in UER + if( s .lt. 0 ) then + ss=sigma + else + ss=s + endif + + llr=2.0*rxdata/(ss*ss) + nap=0 ! number of AP bits + llr(colorder(174-87+1:174-87+nap)+1)=5*(2.0*msgbits(1:nap)-1.0) + apmask=0 + apmask(colorder(174-87+1:174-87+nap)+1)=1 + +! max_iterations is max number of belief propagation iterations + call bpdecode174(llr, apmask, max_iterations, decoded, cw, nharderrors,niterations) + if( ndepth .ge. 0 .and. nharderrors .lt. 0 ) call osd174(llr, apmask, ndepth, decoded, cw, nharderrors, dmin) +! If the decoder finds a valid codeword, nharderrors will be .ge. 0. + if( nharderrors .ge. 0 ) then + call extractmessage174(decoded,msgreceived,ncrcflag) + if( ncrcflag .ne. 1 ) then + nbadcrc=nbadcrc+1 + endif + + nueflag=0 + nerrmpc=0 + do i=1,K ! find number of errors in message+crc part of codeword + if( msgbits(i) .ne. decoded(i) ) then + nueflag=1 + nerrmpc=nerrmpc+1 + endif + enddo + if(nerrmpc.ge.1) nmpcbad(nerrmpc)=nmpcbad(nerrmpc)+1 + if( ncrcflag .eq. 1 ) then + if( nueflag .eq. 0 ) then + ngood=ngood+1 + if(nerr.ge.1) nerrdec(nerr)=nerrdec(nerr)+1 + else if( nueflag .eq. 1 ) then + nue=nue+1; + endif + endif + endif + enddo + baud=12000.0/NSPS + snr2500=db+10.0*log10((baud/2500.0)) + pberr=real(nberr)/(real(ntrials*N)) + write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,1x,i8,8x,f5.2,8x,e10.3)") db,snr2500,ngood,nue,nbadcrc,ss,pberr + +enddo + +open(unit=23,file='nerrhisto.dat',status='unknown') +do i=1,174 + write(23,'(i4,2x,i10,i10,f10.2)') i,nerrdec(i),nerrtot(i),real(nerrdec(i))/real(nerrtot(i)+1e-10) +enddo +close(23) +open(unit=25,file='nmpcbad.dat',status='unknown') +do i=1,87 + write(25,'(i4,2x,i10)') i,nmpcbad(i) +enddo +close(25) + +end program ldpcsim174js8 diff --git a/lib/js8/ldpcsim174js8d.f90 b/lib/js8/ldpcsim174js8d.f90 new file mode 100644 index 0000000..44f6a05 --- /dev/null +++ b/lib/js8/ldpcsim174js8d.f90 @@ -0,0 +1,238 @@ +program ldpcsim174js8 +! End to end test of the (174,75)/crc12 encoder and decoder. +use crc +use packjt + +include 'js8_params.f90' +include 'js8d_params.f90' + +character*22 msg,msgsent,msgreceived +character*8 arg +character*6 grid +integer*1, allocatable :: codeword(:), decoded(:), message(:) +integer*1, target:: i1Msg8BitBytes(11) +integer*1 msgbits(87) +integer*1 apmask(174), cw(174) +integer*2 checksum +integer*4 i4Msg6BitWords(13) +integer colorder(174) +integer nerrtot(174),nerrdec(174),nmpcbad(87) +logical checksumok,fsk,bpsk +real*8, allocatable :: rxdata(:) +real, allocatable :: llr(:) + +data colorder/ & + 0, 1, 2, 3, 30, 4, 5, 6, 7, 8, 9, 10, 11, 32, 12, 40, 13, 14, 15, 16,& + 17, 18, 37, 45, 29, 19, 20, 21, 41, 22, 42, 31, 33, 34, 44, 35, 47, 51, 50, 43,& + 36, 52, 63, 46, 25, 55, 27, 24, 23, 53, 39, 49, 59, 38, 48, 61, 60, 57, 28, 62,& + 56, 58, 65, 66, 26, 70, 64, 69, 68, 67, 74, 71, 54, 76, 72, 75, 78, 77, 80, 79,& + 73, 83, 84, 81, 82, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,& + 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,& + 120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,& + 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,& + 160,161,162,163,164,165,166,167,168,169,170,171,172,173/ + +nerrtot=0 +nerrdec=0 +nmpcbad=0 ! Used to collect the number of errors in the message+crc part of the codeword + +nargs=iargc() +if(nargs.ne.4) then + print*,'Usage: ldpcsim niter ndepth #trials s ' + print*,'eg: ldpcsim 10 2 1000 0.84' + print*,'belief propagation iterations: niter, ordered-statistics depth: ndepth' + print*,'If s is negative, then value is ignored and sigma is calculated from SNR.' + return +endif +call getarg(1,arg) +read(arg,*) max_iterations +call getarg(2,arg) +read(arg,*) ndepth +call getarg(3,arg) +read(arg,*) ntrials +call getarg(4,arg) +read(arg,*) s + +fsk=.false. +bpsk=.true. + +! don't count crc bits as data bits +N=174 +K=87 +! scale Eb/No for a (174,87) code +rate=real(K)/real(N) + +write(*,*) "rate: ",rate +write(*,*) "niter= ",max_iterations," s= ",s + +allocate ( codeword(N), decoded(K), message(K) ) +allocate ( rxdata(N), llr(N) ) + + msg="0123456789012" +! msg="G4WJS K9AN EN50" + call packmsg(msg,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes + call unpackmsg(i4Msg6BitWords,msgsent,.false.,grid) !Unpack to get msgsent + write(*,*) "message sent ",msgsent + + i4=0 + ik=0 + im=0 + do i=1,12 + nna=i4Msg6BitWords(i) + do j=1, 6 + ik=ik+1 + i4=i4+i4+iand(1,ishft(nna,j-6)) + i4=iand(i4,255) + if(ik.eq.8) then + im=im+1 +! if(i4.gt.127) i4=i4-256 + i1Msg8BitBytes(im)=i4 + ik=0 + endif + enddo + enddo + + i1Msg8BitBytes(10:11)=0 + checksum = crc12 (c_loc (i1Msg8BitBytes), 11) + checksum = xor(checksum, 42) ! TODO: jsherer - could change the crc here +! For reference, the next 3 lines show how to check the CRC + i1Msg8BitBytes(10)=checksum/256 + i1Msg8BitBytes(11)=iand(checksum,transfer(255,0_2)) + checksumok = crc12_check(c_loc (i1Msg8BitBytes), 11) + if( checksumok ) write(*,*) 'Good checksum' + +! K=87, For now: +! msgbits(1:72) JT message bits +! msgbits(73:75) 3 free message bits (set to 0) +! msgbits(76:87) CRC12 + mbit=0 + do i=1, 9 + i1=i1Msg8BitBytes(i) + do ibit=1,8 + mbit=mbit+1 + msgbits(mbit)=iand(1,ishft(i1,ibit-8)) + enddo + enddo + msgbits(73:75)=0 ! the three extra message bits go here + i1=i1Msg8BitBytes(10) ! First 4 bits of crc12 are LSB of this byte + do ibit=1,4 + msgbits(75+ibit)=iand(1,ishft(i1,ibit-4)) + enddo + i1=i1Msg8BitBytes(11) ! Now shift in last 8 bits of the CRC + do ibit=1,8 + msgbits(79+ibit)=iand(1,ishft(i1,ibit-8)) + enddo + + write(*,*) 'message' + write(*,'(11(8i1,1x))') msgbits + + call encode174(msgbits,codeword) + call init_random_seed() +! call sgran() + + write(*,*) 'codeword' + write(*,'(22(8i1,1x))') codeword + +write(*,*) "Es/N0 SNR2500 ngood nundetected nbadcrc sigma" +do idb = 20,-10,-1 +!do idb = -3,-3,-1 + db=idb/2.0-1.0 + sigma=1/sqrt( 2*(10**(db/10.0)) ) + ngood=0 + nue=0 + nbadcrc=0 + nberr=0 + do itrial=1, ntrials +! Create a realization of a noisy received word + do i=1,N + if( bpsk ) then + rxdata(i) = 2.0*codeword(i)-1.0 + sigma*gran() + elseif( fsk ) then + if( codeword(i) .eq. 1 ) then + r1=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r2=(sigma*gran())**2 + (sigma*gran())**2 + elseif( codeword(i) .eq. 0 ) then + r2=(1.0 + sigma*gran())**2 + (sigma*gran())**2 + r1=(sigma*gran())**2 + (sigma*gran())**2 + endif +! rxdata(i)=0.35*(sqrt(r1)-sqrt(r2)) +! rxdata(i)=0.35*(exp(r1)-exp(r2)) + rxdata(i)=0.12*(log(r1)-log(r2)) + endif + enddo + nerr=0 + do i=1,N + if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1 + enddo + if(nerr.ge.1) nerrtot(nerr)=nerrtot(nerr)+1 + nberr=nberr+nerr + +! 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 +! To match the metric to the channel, s should be set to the noise standard deviation. +! For now, set s to the value that optimizes decode probability near threshold. +! The s parameter can be tuned to trade a few tenth's dB of threshold for an order of +! magnitude in UER + if( s .lt. 0 ) then + ss=sigma + else + ss=s + endif + + llr=2.0*rxdata/(ss*ss) + nap=0 ! number of AP bits + llr(colorder(174-87+1:174-87+nap)+1)=5*(2.0*msgbits(1:nap)-1.0) + apmask=0 + apmask(colorder(174-87+1:174-87+nap)+1)=1 + +! max_iterations is max number of belief propagation iterations + call bpdecode174(llr, apmask, max_iterations, decoded, cw, nharderrors,niterations) + if( ndepth .ge. 0 .and. nharderrors .lt. 0 ) call osd174(llr, apmask, ndepth, decoded, cw, nharderrors, dmin) +! If the decoder finds a valid codeword, nharderrors will be .ge. 0. + if( nharderrors .ge. 0 ) then + call extractmessage174(decoded,msgreceived,ncrcflag) + if( ncrcflag .ne. 1 ) then + nbadcrc=nbadcrc+1 + endif + + nueflag=0 + nerrmpc=0 + do i=1,K ! find number of errors in message+crc part of codeword + if( msgbits(i) .ne. decoded(i) ) then + nueflag=1 + nerrmpc=nerrmpc+1 + endif + enddo + if(nerrmpc.ge.1) nmpcbad(nerrmpc)=nmpcbad(nerrmpc)+1 + if( ncrcflag .eq. 1 ) then + if( nueflag .eq. 0 ) then + ngood=ngood+1 + if(nerr.ge.1) nerrdec(nerr)=nerrdec(nerr)+1 + else if( nueflag .eq. 1 ) then + nue=nue+1; + endif + endif + endif + enddo + baud=12000.0/NSPS + snr2500=db+10.0*log10((baud/2500.0)) + pberr=real(nberr)/(real(ntrials*N)) + write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,1x,i8,8x,f5.2,8x,e10.3)") db,snr2500,ngood,nue,nbadcrc,ss,pberr + +enddo + +open(unit=23,file='nerrhisto.dat',status='unknown') +do i=1,174 + write(23,'(i4,2x,i10,i10,f10.2)') i,nerrdec(i),nerrtot(i),real(nerrdec(i))/real(nerrtot(i)+1e-10) +enddo +close(23) +open(unit=25,file='nmpcbad.dat',status='unknown') +do i=1,87 + write(25,'(i4,2x,i10)') i,nmpcbad(i) +enddo +close(25) + +end program ldpcsim174js8 diff --git a/lib/js8/subtractjs8.f90 b/lib/js8/subtractjs8.f90 new file mode 100644 index 0000000..c5689c5 --- /dev/null +++ b/lib/js8/subtractjs8.f90 @@ -0,0 +1,64 @@ +subroutine subtractjs8(dd,itone,f0,dt) + +! Subtract an ft8 signal +! +! Measured signal : dd(t) = a(t)cos(2*pi*f0*t+theta(t)) +! Reference signal : cref(t) = exp( j*(2*pi*f0*t+phi(t)) ) +! Complex amp : cfilt(t) = LPF[ dd(t)*CONJG(cref(t)) ] +! Subtract : dd(t) = dd(t) - 2*REAL{cref*cfilt} + + use timer_module, only: timer + + !include 'js8_params.f90' + + parameter (NFRAME=NSPS*NN) + parameter (NFFT=NMAX, NFILT=1400) + + real*4 dd(NMAX), window(-NFILT/2:NFILT/2) + complex cref,camp,cfilt,cw + integer itone(NN) + logical first + data first/.true./ + common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX) + save first + + nstart=dt*12000+1 + call genjs8refsig(itone,cref,f0) + camp=0. + do i=1,nframe + id=nstart-1+i + if(id.ge.1.and.id.le.NMAX) camp(i)=dd(id)*conjg(cref(i)) + enddo + + if(first) then +! Create and normalize the filter + pi=4.0*atan(1.0) + fac=1.0/float(nfft) + sum=0.0 + do j=-NFILT/2,NFILT/2 + window(j)=cos(pi*j/NFILT)**2 + sum=sum+window(j) + enddo + cw=0. + cw(1:NFILT+1)=window/sum + cw=cshift(cw,NFILT/2+1) + call four2a(cw,nfft,1,-1,1) + cw=cw*fac + first=.false. + endif + + cfilt=0.0 + cfilt(1:nframe)=camp(1:nframe) + call four2a(cfilt,nfft,1,-1,1) + cfilt(1:nfft)=cfilt(1:nfft)*cw(1:nfft) + call four2a(cfilt,nfft,1,1,1) + +! Subtract the reconstructed signal + do i=1,nframe + j=nstart+i-1 + if(j.ge.1 .and. j.le.NMAX) dd(j)=dd(j)-2*REAL(cfilt(i)*cref(i)) + enddo + + return +end subroutine subtractjs8 + diff --git a/lib/js8/syncjs8.f90 b/lib/js8/syncjs8.f90 new file mode 100644 index 0000000..f4008bd --- /dev/null +++ b/lib/js8/syncjs8.f90 @@ -0,0 +1,183 @@ +subroutine syncjs8(dd,nfa,nfb,syncmin,nfqso,s,candidate,ncand,sbase) + + !include 'js8_params.f90' + + complex cx(0:NH1) + real s(NH1,NHSYM) + real savg(NH1) + real sbase(NH1) + real x(NFFT1) + real sync2d(NH1,-JZ:JZ) + real red(NH1) + real candidate0(3,200) + real candidate(3,200) + real dd(NMAX) + integer jpeak(NH1) + integer indx(NH1) + integer ii(1) + integer syoff !symbol offset + equivalence (x,cx) + + integer icos7a(0:6), icos7b(0:6), icos7c(0:6) + if(NCOSTAS.eq.1) then + icos7a = (/4,2,5,6,1,3,0/) !Beginning Costas 7x7 tone pattern + icos7b = (/4,2,5,6,1,3,0/) !Middle Costas 7x7 tone pattern + icos7c = (/4,2,5,6,1,3,0/) !End Costas 7x7 tone pattern + else + icos7a = (/0,6,2,3,5,4,1/) !Beginning Costas 7x7 tone pattern + icos7b = (/1,5,0,2,3,6,4/) !Middle Costas 7x7 tone pattern + icos7c = (/2,5,0,6,4,1,3/) !End Costas 7x7 tone pattern + endif + +! Compute symbol spectra, stepping by NSTEP steps. + savg=0. + tstep=NSTEP/12000.0 + df=12000.0/NFFT1 + fac=1.0/300.0 + do j=1,NHSYM + ia=(j-1)*NSTEP + 1 + ib=ia+NSPS-1 + x(1:NSPS)=fac*dd(ia:ib) + x(NSPS+1:)=0. + call four2a(x,NFFT1,1,-1,0) !r2c FFT + do i=1,NH1 + s(i,j)=real(cx(i))**2 + aimag(cx(i))**2 + enddo + savg=savg + s(1:NH1,j) !Average spectrum + enddo + call baselinejs8(savg,nfa,nfb,sbase) + + ia=max(1,nint(nfa/df)) ! min freq + ib=nint(nfb/df) ! max freq + nssy=NSPS/NSTEP ! steps per symbol + nfos=NFFT1/NSPS ! frequency bin oversampling factor + jstrt=ASTART/tstep ! the symbol step that we are starting at (NHSYM) + + candidate0=0. + k=0 + + do i=ia,ib + do j=-JZ,+JZ + ta=0. + tb=0. + tc=0. + t0a=0. + t0b=0. + t0c=0. + do n=0,6 + k=j+jstrt+nssy*n + + syoff=k + if(syoff.ge.1.and.syoff.le.NHSYM) then + ta=ta + s(i+nfos*icos7a(n),syoff) + t0a=t0a + sum(s(i:i+nfos*6:nfos,syoff)) + endif + + syoff=k+nssy*36 + if(syoff.ge.1.and.syoff.le.NHSYM) then + tb=tb + s(i+nfos*icos7b(n),syoff) + t0b=t0b + sum(s(i:i+nfos*6:nfos,syoff)) + endif + + syoff=k+nssy*72 + if(syoff.ge.1.and.syoff.le.NHSYM) then + tc=tc + s(i+nfos*icos7c(n),syoff) + t0c=t0c + sum(s(i:i+nfos*6:nfos,syoff)) + endif + enddo + + t=ta+tb+tc + t0=t0a+t0b+t0c + t0=(t0-t)/6.0 + sync_abc=t/t0 + + t=ta+tb + t0=t0a+t0b + t0=(t0-t)/6.0 + sync_ab=t/t0 + + t=ta+tc + t0=t0a+t0c + t0=(t0-t)/6.0 + sync_ac=t/t0 + + t=tb+tc + t0=t0b+t0c + t0=(t0-t)/6.0 + sync_bc=t/t0 + + !sync2d(i,j)=max(max(max(sync_abc, sync_ab), sync_ac), sync_bc) + sync2d(i,j)=max(sync_abc, sync_ab, sync_bc) + enddo + enddo + + red=0. + do i=ia,ib + ii=maxloc(sync2d(i,-JZ:JZ)) - 1 - JZ + j0=ii(1) + jpeak(i)=j0 + red(i)=sync2d(i,j0) + enddo + + iz=ib-ia+1 + call indexx(red(ia:ib),iz,indx) + + ibase=indx(nint(0.40*iz)) - 1 + ia + if(ibase.lt.1) ibase=1 + if(ibase.gt.nh1) ibase=nh1 + base=red(ibase) + red=red/base + + k=0 + do i=1,min(200,iz) + if(k.ge.200) exit + n=ia + indx(iz+1-i) - 1 + if(red(n).lt.syncmin.or.isnan(red(n))) exit + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'red candidate', red(n), n*df, (jpeak(n)-1)*tstep + close(99) + endif + k=k+1 + candidate0(1,k)=n*df + candidate0(2,k)=(jpeak(n)-1)*tstep + candidate0(3,k)=red(n) + enddo + ncand=k + +! Put nfqso at top of list, and save only the best of near-dupe freqs. + do i=1,ncand + if(abs(candidate0(1,i)-nfqso).lt.10.0) candidate0(1,i)=-candidate0(1,i) + if(i.ge.2) then + do j=1,i-1 + fdiff=abs(candidate0(1,i))-abs(candidate0(1,j)) + if(abs(fdiff).lt.AZ) then ! note: this dedupe difference is dependent on symbol spacing + if(candidate0(3,i).ge.candidate0(3,j)) candidate0(3,j)=0. + if(candidate0(3,i).lt.candidate0(3,j)) candidate0(3,i)=0. + endif + enddo + endif + enddo + + fac=20.0/maxval(s) + s=fac*s + +! Sort by sync +! call indexx(candidate0(3,1:ncand),ncand,indx) +! Sort by frequency + call indexx(candidate0(1,1:ncand),ncand,indx) + k=1 +! do i=ncand,1,-1 + do i=1,ncand + j=indx(i) +! if( candidate0(3,j) .ge. syncmin .and. candidate0(2,j).ge.-1.5 ) then + if( candidate0(3,j) .ge. syncmin ) then + candidate(1,k)=abs(candidate0(1,j)) + candidate(2,k)=candidate0(2,j) + candidate(3,k)=candidate0(3,j) + k=k+1 + endif + enddo + ncand=k-1 + return +end subroutine syncjs8 diff --git a/lib/js8/syncjs8d.f90 b/lib/js8/syncjs8d.f90 new file mode 100644 index 0000000..532e704 --- /dev/null +++ b/lib/js8/syncjs8d.f90 @@ -0,0 +1,89 @@ +subroutine syncjs8d(cd0,i0,ctwk,itwk,sync) +! Compute sync power for a complex, downsampled FT8 signal. + + !include 'js8_params.f90' + + parameter(NP=NMAX/NDOWN,NSS=NSPS/NDOWN) + complex cd0(0:NP-1) + complex csynca(4*NSS),csyncb(4*NSS),csyncc(4*NSS) + complex csync2(4*NSS) + complex ctwk(4*NSS) + complex z1,z2,z3 + logical first + data first/.true./ + save first,twopi,csynca,csyncb,csyncc + + p(z1)=(real(z1)**2 + aimag(z1)**2) !Statement function for power + + integer icos7a(0:6), icos7b(0:6), icos7c(0:6) + if(NCOSTAS.eq.1) then + icos7a = (/4,2,5,6,1,3,0/) !Beginning Costas 7x7 tone pattern + icos7b = (/4,2,5,6,1,3,0/) !Middle Costas 7x7 tone pattern + icos7c = (/4,2,5,6,1,3,0/) !End Costas 7x7 tone pattern + else + icos7a = (/0,6,2,3,5,4,1/) !Beginning Costas 7x7 tone pattern + icos7b = (/1,5,0,2,3,6,4/) !Middle Costas 7x7 tone pattern + icos7c = (/2,5,0,6,4,1,3/) !End Costas 7x7 tone pattern + endif + +! Set some constants and compute the csync array. + if( first ) then + twopi=8.0*atan(1.0) + + k=1 + phia=0.0 + phib=0.0 + phic=0.0 + + !fs2=12000.0/NDOWN !Sample rate after downsampling + !dt2=1/fs2 !Corresponding sample interval + !taus=NDOWNSPS*dt2 !Symbol duration + !baud=1.0/taus !Keying rate + + do i=0,6 + + dphia=2*twopi*icos7a(i)/real(NSS) + dphib=2*twopi*icos7b(i)/real(NSS) + dphic=2*twopi*icos7c(i)/real(NSS) + + do j=1,NSS/2 + + csynca(k)=cmplx(cos(phia),sin(phia)) !Waveform for Beginning 7x7 Costas array + csyncb(k)=cmplx(cos(phib),sin(phib)) !Waveform for Middle 7x7 Costas array + csyncc(k)=cmplx(cos(phic),sin(phic)) !Waveform for End 7x7 Costas array + phia=mod(phia+dphia,twopi) + phib=mod(phib+dphib,twopi) + phic=mod(phia+dphic,twopi) + + k=k+1 + + enddo + + enddo + first=.false. + endif + + i1=i0 !four Costas arrays + i2=i0+36*NSS + i3=i0+72*NSS + + z1=0. + z2=0. + z3=0. + + csync2=csynca + if(itwk.eq.1) csync2=ctwk*csynca !Tweak the frequency + if(i1.ge.0 .and. i1+8*NSS-1.le.NP-1) z1=sum(cd0(i1:i1+8*NSS-1:2)*conjg(csync2)) + + csync2=csyncb + if(itwk.eq.1) csync2=ctwk*csyncb !Tweak the frequency + if(i2.ge.0 .and. i2+8*NSS-1.le.NP-1) z2=sum(cd0(i2:i2+8*NSS-1:2)*conjg(csync2)) + + csync2=csyncc + if(itwk.eq.1) csync2=ctwk*csyncc !Tweak the frequency + if(i3.ge.0 .and. i3+8*NSS-1.le.NP-1) z3=sum(cd0(i3:i3+8*NSS-1:2)*conjg(csync2)) + + sync = p(z1) + p(z2) + p(z3) + + return +end subroutine syncjs8d diff --git a/lib/js8b_decode.f90 b/lib/js8b_decode.f90 new file mode 100644 index 0000000..22361b7 --- /dev/null +++ b/lib/js8b_decode.f90 @@ -0,0 +1,157 @@ +module js8b_decode + + type :: js8b_decoder + procedure(js8b_decode_callback), pointer :: callback + contains + procedure :: decode + end type js8b_decoder + + abstract interface + subroutine js8b_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) + import js8b_decoder + implicit none + class(js8b_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + end subroutine js8b_decode_callback + end interface + +contains + + subroutine decode(this,callback,iwave,nQSOProgress,nfqso,nftx,newdat, & + nutc,nfa,nfb,nexp_decode,ndepth,nagain,lft8apon,lapcqonly,napwid, & + mycall12,mygrid6,hiscall12,hisgrid6) +! use wavhdr + use timer_module, only: timer +! type(hdr) h + use js8b_module + + class(js8b_decoder), intent(inout) :: this + procedure(js8b_decode_callback) :: callback + real s(NH1,NHSYM) + real sbase(NH1) + real candidate(3,200) + real dd(NMAX) + logical, intent(in) :: lft8apon,lapcqonly,nagain + logical newdat,lsubtract,ldupe,bcontest + character*12 mycall12, hiscall12 + character*6 mygrid6,hisgrid6 + integer*2 iwave(NMAX) + integer apsym(KK) + character datetime*13,message*22,msg37*37 + character*22 allmessages(100) + integer allsnrs(100) + save s,dd + + bcontest=iand(nexp_decode,128).ne.0 + this%callback => callback + write(datetime,1001) nutc !### TEMPORARY ### +1001 format("000000_",i6.6) + + call ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype) + + dd=iwave + ndecodes=0 + allmessages=' ' + allsnrs=0 + ifa=nfa + ifb=nfb + if(nagain) then + ifa=nfqso-10 + ifb=nfqso+10 + endif + +! For now: +! ndepth=1: no subtraction, 1 pass, belief propagation only +! ndepth=2: subtraction, 3 passes, belief propagation only +! ndepth=3: subtraction, 3 passes, bp+osd + if(ndepth.eq.1) npass=1 + if(ndepth.ge.2) npass=3 + do ipass=1,npass + newdat=.true. ! Is this a problem? I hijacked newdat. + syncmin=ASYNCMIN + if(ipass.eq.1) then + lsubtract=.true. + if(ndepth.eq.1) lsubtract=.false. + elseif(ipass.eq.2) then + n2=ndecodes + if(ndecodes.eq.0) cycle + lsubtract=.true. + elseif(ipass.eq.3) then + if((ndecodes-n2).eq.0) cycle + lsubtract=.false. + endif + + call timer('syncjs8 ',0) + call syncjs8(dd,ifa,ifb,syncmin,nfqso,s,candidate,ncand,sbase) + call timer('syncjs8 ',1) + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) ncand, "candidates" + write(99,*) "---" + close(99) + endif + + do icand=1,ncand + sync=candidate(3,icand) + f1=candidate(1,icand) + xdt=candidate(2,icand) + xbase=10.0**(0.1*(sbase(nint(f1/(12000.0/NFFT1)))-40.0)) ! 3.125Hz + nsnr0=min(99,nint(10.0*log10(sync) - 25.5)) !### empirical ### + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, f1, sync, xdt, xbase + close(99) + endif + + call timer('js8dec ',0) + call js8dec(dd,newdat,nQSOProgress,nfqso,nftx,ndepth,lft8apon, & + lapcqonly,napwid,lsubtract,nagain,iaptype,mycall12,mygrid6, & + hiscall12,bcontest,sync,f1,xdt,xbase,apsym,nharderrors,dmin, & + nbadcrc,iappass,iera,msg37,xsnr) + message=msg37(1:22) !### + nsnr=nint(xsnr) + xdt=xdt-ASTART + hd=nharderrors+dmin + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, hd, nbadcrc + close(99) + endif + + call timer('js8dec ',1) + if(nbadcrc.eq.0) then + ldupe=.false. + do id=1,ndecodes + if(message.eq.allmessages(id).and.nsnr.le.allsnrs(id)) ldupe=.true. + enddo + if(.not.ldupe) then + ndecodes=ndecodes+1 + allmessages(ndecodes)=message + allsnrs(ndecodes)=nsnr + endif + if(.not.ldupe .and. associated(this%callback)) then + qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0] + call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual) + endif + endif + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '---' + close(99) + endif + enddo + enddo + return + end subroutine decode + +end module js8b_decode diff --git a/lib/js8b_module.f90 b/lib/js8b_module.f90 new file mode 100644 index 0000000..8e099c2 --- /dev/null +++ b/lib/js8b_module.f90 @@ -0,0 +1,13 @@ +module js8b_module + include 'js8/js8_params.f90' + include 'js8/js8b_params.f90' + +contains + include 'js8/baselinejs8.f90' + include 'js8/syncjs8.f90' + include 'js8/js8_downsample.f90' + include 'js8/syncjs8d.f90' + include 'js8/genjs8refsig.f90' + include 'js8/subtractjs8.f90' + include 'js8/js8dec.f90' +end module js8b_module diff --git a/lib/js8c_decode.f90 b/lib/js8c_decode.f90 new file mode 100644 index 0000000..cdb5da8 --- /dev/null +++ b/lib/js8c_decode.f90 @@ -0,0 +1,156 @@ +module js8c_decode + + type :: js8c_decoder + procedure(js8c_decode_callback), pointer :: callback + contains + procedure :: decode + end type js8c_decoder + + abstract interface + subroutine js8c_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) + import js8c_decoder + implicit none + class(js8c_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + end subroutine js8c_decode_callback + end interface + +contains + + subroutine decode(this,callback,iwave,nQSOProgress,nfqso,nftx,newdat, & + nutc,nfa,nfb,nexp_decode,ndepth,nagain,lft8apon,lapcqonly,napwid, & + mycall12,mygrid6,hiscall12,hisgrid6) +! use wavhdr + use timer_module, only: timer +! type(hdr) h + use js8c_module + + class(js8c_decoder), intent(inout) :: this + procedure(js8c_decode_callback) :: callback + real s(NH1,NHSYM) + real sbase(NH1) + real candidate(3,200) + real dd(NMAX) + logical, intent(in) :: lft8apon,lapcqonly,nagain + logical newdat,lsubtract,ldupe,bcontest + character*12 mycall12, hiscall12 + character*6 mygrid6,hisgrid6 + integer*2 iwave(NMAX) + integer apsym(KK) + character datetime*13,message*22,msg37*37 + character*22 allmessages(100) + integer allsnrs(100) + save s,dd + + bcontest=iand(nexp_decode,128).ne.0 + this%callback => callback + write(datetime,1001) nutc !### TEMPORARY ### +1001 format("000000_",i6.6) + + call ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype) + + dd=iwave + ndecodes=0 + allmessages=' ' + allsnrs=0 + ifa=nfa + ifb=nfb + if(nagain) then + ifa=nfqso-10 + ifb=nfqso+10 + endif + +! For now: +! ndepth=1: no subtraction, 1 pass, belief propagation only +! ndepth=2: subtraction, 3 passes, belief propagation only +! ndepth=3: subtraction, 3 passes, bp+osd + if(ndepth.eq.1) npass=1 + if(ndepth.ge.2) npass=3 + do ipass=1,npass + newdat=.true. ! Is this a problem? I hijacked newdat. + syncmin=ASYNCMIN + if(ipass.eq.1) then + lsubtract=.true. + if(ndepth.eq.1) lsubtract=.false. + elseif(ipass.eq.2) then + n2=ndecodes + if(ndecodes.eq.0) cycle + lsubtract=.true. + elseif(ipass.eq.3) then + if((ndecodes-n2).eq.0) cycle + lsubtract=.false. + endif + + call timer('syncjs8 ',0) + call syncjs8(dd,ifa,ifb,syncmin,nfqso,s,candidate,ncand,sbase) + call timer('syncjs8 ',1) + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) ncand, "candidates" + close(99) + endif + + do icand=1,ncand + sync=candidate(3,icand) + f1=candidate(1,icand) + xdt=candidate(2,icand) + xbase=10.0**(0.1*(sbase(nint(f1/(12000.0/NFFT1)))-40.0)) ! 3.125Hz + nsnr0=min(99,nint(10.0*log10(sync) - 25.5)) !### empirical ### + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, f1, sync, xdt, xbase + close(99) + endif + + call timer('js8dec ',0) + call js8dec(dd,newdat,nQSOProgress,nfqso,nftx,ndepth,lft8apon, & + lapcqonly,napwid,lsubtract,nagain,iaptype,mycall12,mygrid6, & + hiscall12,bcontest,sync,f1,xdt,xbase,apsym,nharderrors,dmin, & + nbadcrc,iappass,iera,msg37,xsnr) + message=msg37(1:22) !### + nsnr=nint(xsnr) + xdt=xdt-ASTART + hd=nharderrors+dmin + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, hd, nbadcrc + close(99) + endif + + call timer('js8dec ',1) + if(nbadcrc.eq.0) then + ldupe=.false. + do id=1,ndecodes + if(message.eq.allmessages(id).and.nsnr.le.allsnrs(id)) ldupe=.true. + enddo + if(.not.ldupe) then + ndecodes=ndecodes+1 + allmessages(ndecodes)=message + allsnrs(ndecodes)=nsnr + endif + if(.not.ldupe .and. associated(this%callback)) then + qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0] + call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual) + endif + endif + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '---' + close(99) + endif + enddo + enddo + return + end subroutine decode + +end module js8c_decode diff --git a/lib/js8c_module.f90 b/lib/js8c_module.f90 new file mode 100644 index 0000000..b5f28b9 --- /dev/null +++ b/lib/js8c_module.f90 @@ -0,0 +1,13 @@ +module js8c_module + include 'js8/js8_params.f90' + include 'js8/js8c_params.f90' + +contains + include 'js8/baselinejs8.f90' + include 'js8/syncjs8.f90' + include 'js8/js8_downsample.f90' + include 'js8/syncjs8d.f90' + include 'js8/genjs8refsig.f90' + include 'js8/subtractjs8.f90' + include 'js8/js8dec.f90' +end module js8c_module diff --git a/lib/js8d_decode.f90 b/lib/js8d_decode.f90 new file mode 100644 index 0000000..328fced --- /dev/null +++ b/lib/js8d_decode.f90 @@ -0,0 +1,156 @@ +module js8d_decode + + type :: js8d_decoder + procedure(js8d_decode_callback), pointer :: callback + contains + procedure :: decode + end type js8d_decoder + + abstract interface + subroutine js8d_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) + import js8d_decoder + implicit none + class(js8d_decoder), intent(inout) :: this + real, intent(in) :: sync + integer, intent(in) :: snr + real, intent(in) :: dt + real, intent(in) :: freq + character(len=37), intent(in) :: decoded + integer, intent(in) :: nap + real, intent(in) :: qual + end subroutine js8d_decode_callback + end interface + +contains + + subroutine decode(this,callback,iwave,nQSOProgress,nfqso,nftx,newdat, & + nutc,nfa,nfb,nexp_decode,ndepth,nagain,lft8apon,lapcqonly,napwid, & + mycall12,mygrid6,hiscall12,hisgrid6) +! use wavhdr + use timer_module, only: timer +! type(hdr) h + use js8d_module + + class(js8d_decoder), intent(inout) :: this + procedure(js8d_decode_callback) :: callback + real s(NH1,NHSYM) + real sbase(NH1) + real candidate(3,200) + real dd(NMAX) + logical, intent(in) :: lft8apon,lapcqonly,nagain + logical newdat,lsubtract,ldupe,bcontest + character*12 mycall12, hiscall12 + character*6 mygrid6,hisgrid6 + integer*2 iwave(NMAX) + integer apsym(KK) + character datetime*13,message*22,msg37*37 + character*22 allmessages(100) + integer allsnrs(100) + save s,dd + + bcontest=iand(nexp_decode,128).ne.0 + this%callback => callback + write(datetime,1001) nutc !### TEMPORARY ### +1001 format("000000_",i6.6) + + call ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype) + + dd=iwave + ndecodes=0 + allmessages=' ' + allsnrs=0 + ifa=nfa + ifb=nfb + if(nagain) then + ifa=nfqso-10 + ifb=nfqso+10 + endif + +! For now: +! ndepth=1: no subtraction, 1 pass, belief propagation only +! ndepth=2: subtraction, 3 passes, belief propagation only +! ndepth=3: subtraction, 3 passes, bp+osd + if(ndepth.eq.1) npass=1 + if(ndepth.ge.2) npass=3 + do ipass=1,npass + newdat=.true. ! Is this a problem? I hijacked newdat. + syncmin=ASYNCMIN + if(ipass.eq.1) then + lsubtract=.true. + if(ndepth.eq.1) lsubtract=.false. + elseif(ipass.eq.2) then + n2=ndecodes + if(ndecodes.eq.0) cycle + lsubtract=.true. + elseif(ipass.eq.3) then + if((ndecodes-n2).eq.0) cycle + lsubtract=.false. + endif + + call timer('syncjs8 ',0) + call syncjs8(dd,ifa,ifb,syncmin,nfqso,s,candidate,ncand,sbase) + call timer('syncjs8 ',1) + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) ncand, "candidates" + close(99) + endif + + do icand=1,ncand + sync=candidate(3,icand) + f1=candidate(1,icand) + xdt=candidate(2,icand) + xbase=10.0**(0.1*(sbase(nint(f1/(12000.0/NFFT1)))-40.0)) ! 3.125Hz + nsnr0=min(99,nint(10.0*log10(sync) - 25.5)) !### empirical ### + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, f1, sync, xdt, xbase + close(99) + endif + + call timer('js8dec ',0) + call js8dec(dd,newdat,nQSOProgress,nfqso,nftx,ndepth,lft8apon, & + lapcqonly,napwid,lsubtract,nagain,iaptype,mycall12,mygrid6, & + hiscall12,bcontest,sync,f1,xdt,xbase,apsym,nharderrors,dmin, & + nbadcrc,iappass,iera,msg37,xsnr) + message=msg37(1:22) !### + nsnr=nint(xsnr) + xdt=xdt-ASTART + hd=nharderrors+dmin + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) 'icand', icand, hd, nbadcrc + close(99) + endif + + call timer('js8dec ',1) + if(nbadcrc.eq.0) then + ldupe=.false. + do id=1,ndecodes + if(message.eq.allmessages(id).and.nsnr.le.allsnrs(id)) ldupe=.true. + enddo + if(.not.ldupe) then + ndecodes=ndecodes+1 + allmessages(ndecodes)=message + allsnrs(ndecodes)=nsnr + endif + if(.not.ldupe .and. associated(this%callback)) then + qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0] + call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual) + endif + endif + + if(NWRITELOG.eq.1) then + open(99, file="./js8.log", status="old", position="append", action="write") + write(99,*) '---' + close(99) + endif + enddo + enddo + return + end subroutine decode + +end module js8d_decode diff --git a/lib/js8d_module.f90 b/lib/js8d_module.f90 new file mode 100644 index 0000000..315e2d7 --- /dev/null +++ b/lib/js8d_module.f90 @@ -0,0 +1,13 @@ +module js8d_module + include 'js8/js8_params.f90' + include 'js8/js8d_params.f90' + +contains + include 'js8/baselinejs8.f90' + include 'js8/syncjs8.f90' + include 'js8/js8_downsample.f90' + include 'js8/syncjs8d.f90' + include 'js8/genjs8refsig.f90' + include 'js8/subtractjs8.f90' + include 'js8/js8dec.f90' +end module js8d_module diff --git a/lib/jt4sim.f90 b/lib/jt4sim.f90 deleted file mode 100644 index 73edabf..0000000 --- a/lib/jt4sim.f90 +++ /dev/null @@ -1,181 +0,0 @@ -program jt4sim - -! Generate simulated jt4 data for testing the decoder using new fading models -! Based on qra64sim with appropriate changes for JT4 -! Includes option to generate 1000Hz single tone with "ST" as the message - - use wavhdr - use packjt - use jt4 - parameter (NMAX=60*12000) ! = 648,000 - parameter (NFFT=10*65536,NH=NFFT/2) - type(hdr) h !Header for .wav file - integer*2 iwave(NMAX) !Generated waveform - integer*4 itone(206) !Channel symbols (values 0-8) - real*4 xnoise(NMAX) !Generated random noise - real*4 dat(NMAX) !Generated real data - complex cdat(NMAX) !Generated complex waveform - complex cspread(0:NFFT-1) !Complex amplitude for Rayleigh fading - complex z - real*8 f0,dt,twopi,phi,dphi,baud,fsample,freq - character message*22,fname*11,csubmode*1,arg*12 - character msgsent*22 - - nargs=iargc() - if(nargs.ne. 7) then - print *, 'Usage: jt4sim "msg" A-E Nsigs fDop DT Nfiles SNR' - print *, 'Example jt4sim "K1ABC W9XYZ EN37" A 10 0.2 0.0 1 0' - print *, 'Example jt4sim "ST" A 10 0.2 0.0 1 0' - go to 999 - endif - call getarg(1,message) - call fmtmsg(message, iz) - call getarg(2,csubmode) - mode4=ichar(csubmode) - ichar('A') + 1 - call getarg(3,arg) - read(arg,*) nsigs - call getarg(4,arg) - read(arg,*) fspread - call getarg(5,arg) - read(arg,*) xdt - call getarg(6,arg) - read(arg,*) nfiles - call getarg(7,arg) - read(arg,*) snrdb - - if(mode4.ge.8) nsigs=1 ! temporary - will need sorting out - rms=100. - fsample=12000.d0 !Sample rate (Hz) - dt=1.d0/fsample !Sample interval (s) - twopi=8.d0*atan(1.d0) - npts=60*12000 !Total samples in .wav file - nsps=12000.d0/4.375d0 - baud=12000.d0/nsps !Keying rate = 1.7361111111 - nsym=206 !Number of channel symbols - h=default_header(12000,npts) - dfsig=2000.0/nsigs !Freq spacing between sigs in file (Hz) - ichk=0 - - write(*,1000) -1000 format('File Sig Freq A-E S/N DT Dop Message'/60('-')) - - do ifile=1,nfiles !Loop over requested number of files - write(fname,1002) ifile !Output filename -1002 format('000000_',i4.4) - open(10,file=fname//'.wav',access='stream',status='unknown') - xnoise=0. - cdat=0. - if(snrdb.lt.90) then - do i=1,npts - xnoise(i)=gran() !Generate gaussian noise - enddo - endif - - do isig=1,nsigs !Generate requested number of sigs - if(mod(nsigs,2).eq.0) f0=1500.0 + dfsig*(isig-0.5-nsigs/2) - if(mod(nsigs,2).eq.1) f0=1500.0 + dfsig*(isig-(nsigs+1)/2) - if(nsigs.eq.1) f0=1000.0 - xsnr=snrdb - if(snrdb.eq.0.0) xsnr=-20 - isig - - call gen4(message,ichk,msgsent,itone,itype) - - bandwidth_ratio=2500.0/6000.0 - sig=sqrt(2*bandwidth_ratio)*10.0**(0.05*xsnr) - if(xsnr.gt.90.0) sig=1.0 - write(*,1020) ifile,isig,f0,csubmode,xsnr,xdt,fspread,message -1020 format(i4,i4,f10.3,2x,a1,2x,f5.1,f6.2,f6.1,1x,a22) - - phi=0.d0 - dphi=0.d0 - k=(xdt+1.0)*12000 !Start audio at t = xdt + 1.0 s - isym0=-99 - - do i=1,npts !Add this signal into cdat() - isym=i/nsps + 1 - if(isym.gt.nsym) exit - if(isym.ne.isym0) then - if(message(1:2).eq.'ST') then !Finds ST in message string for single tone - freq=1000 !1000Hz for single tone - else - freq=f0 + itone(isym)*baud*nch(mode4) - endif - dphi=twopi*freq*dt - isym0=isym - - endif - phi=phi + dphi - if(phi.gt.twopi) phi=phi-twopi - xphi=phi - z=cmplx(cos(xphi),sin(xphi)) - k=k+1 - if(k.ge.1) cdat(k)=cdat(k) + sig*z - enddo - enddo - - if(fspread.ne.0) then !Apply specified Doppler spread - df=12000.0/nfft - twopi=8*atan(1.0) - cspread(0)=1.0 - cspread(NH)=0. - b=6.0 !Lorenzian 3/28 onward - do i=1,NH - f=i*df - x=b*f/fspread - z=0. - a=0. - if(x.lt.3.0) then !Cutoff beyond x=3 - a=sqrt(1.111/(1.0+x*x)-0.1) !Lorentzian - call random_number(r1) - phi1=twopi*r1 - z=a*cmplx(cos(phi1),sin(phi1)) - endif - cspread(i)=z - z=0. - if(x.lt.50.0) then - call random_number(r2) - phi2=twopi*r2 - z=a*cmplx(cos(phi2),sin(phi2)) - endif - cspread(NFFT-i)=z - enddo - - do i=0,NFFT-1 - f=i*df - if(i.gt.NH) f=(i-nfft)*df - s=real(cspread(i))**2 + aimag(cspread(i))**2 -! write(13,3000) i,f,s,cspread(i) -!3000 format(i5,f10.3,3f12.6) - enddo -! s=real(cspread(0))**2 + aimag(cspread(0))**2 -! write(13,3000) 1024,0.0,s,cspread(0) - - call four2a(cspread,NFFT,1,1,1) !Transform to time domain - - sum=0. - do i=0,NFFT-1 - p=real(cspread(i))**2 + aimag(cspread(i))**2 - sum=sum+p - enddo - avep=sum/NFFT - fac=sqrt(1.0/avep) - cspread=fac*cspread !Normalize to constant avg power - cdat(1:NFFT)=cspread*cdat(1:NFFT) !Apply Rayleigh fading - -! do i=0,NFFT-1 -! p=real(cspread(i))**2 + aimag(cspread(i))**2 -! write(14,3010) i,p,cspread(i) -!3010 format(i8,3f12.6) -! enddo - - endif - - dat=aimag(cdat) + xnoise !Add the generated noise - fac=32767.0/nsigs - if(snrdb.ge.90.0) iwave(1:npts)=nint(fac*dat(1:npts)) - if(snrdb.lt.90.0) iwave(1:npts)=nint(rms*dat(1:npts)) - write(10) h,iwave(1:npts) !Save the .wav file - close(10) - enddo - -999 end program jt4sim diff --git a/lib/msgs.txt b/lib/msgs.txt deleted file mode 100644 index c38aba9..0000000 --- a/lib/msgs.txt +++ /dev/null @@ -1,60 +0,0 @@ -W1AAA K2BBB EM00 -W2CCC K3DDD EM01 -W3EEE K4FFF EM02 -W5GGG K6HHH EM03 -W7III K8JJJ EM04 -W9KKK K0LLL EM05 -G0MMM F1NNN JN06 -G2OOO F3PPP JN07 -G4QQQ F5RRR JN08 -G6SSS F7TTT JN09 -W1XAA K2XBB EM10 -W2XCC K3XDD EM11 -W3XEE K4XFF EM12 -W5XGG K6XHH EM13 -W7XII K8XJJ EM14 -W9XKK K0XLL EM15 -G0XMM F1XNN JN16 -G2XOO F3XPP JN17 -G4XQQ F5XRR JN18 -G6XSS F7XTT JN19 -W1YAA K2YBB EM20 -W2YCC K3YDD EM21 -W3YEE K4YFF EM22 -W5YGG K6YHH EM23 -W7YII K8YJJ EM24 -W9YKK K0YLL EM25 -G0YMM F1YNN JN26 -G2YOO F3YPP JN27 -G4YQQ F5YRR JN28 -G6YSS F7YTT JN29 -W1ZAA K2ZBB EM30 -W2ZCC K3ZDD EM31 -W3ZEE K4ZFF EM32 -W5ZGG K6ZHH EM33 -W7ZII K8ZJJ EM34 -W9ZKK K0ZLL EM35 -G0ZMM F1ZNN JN36 -G2ZOO F3ZPP JN37 -G4ZQQ F5ZRR JN38 -G6ZSS F7ZTT JN39 -W1AXA K2BXB EM40 -W2CXC K3DXD EM41 -W3EXE K4FXF EM42 -W5GXG K6HXH EM43 -W7IXI K8JXJ EM44 -W9KXK K0LXL EM45 -G0MXM F1NXN JN46 -G2OXO F3PXP JN47 -G4QXQ F5RXR JN48 -G6SXS F7TXT JN49 -W1AYA K2BYB EM50 -W2CYC K3DYD EM51 -W3EYE K4FYF EM52 -W5GYG K6HYH EM53 -W7IYI K8JYJ EM54 -W9KYK K0LYL EM55 -G0MYM F1NYN JN56 -G2OYO F3PYP JN57 -G4QYQ F5RYR JN58 -G6SYS F7TYT JN59 diff --git a/lib/msk144_freq_search.f90 b/lib/msk144_freq_search.f90 deleted file mode 100644 index 5029816..0000000 --- a/lib/msk144_freq_search.f90 +++ /dev/null @@ -1,50 +0,0 @@ -subroutine msk144_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, & - cdat2,xmax,bestf,cs,xccs) - - parameter (NSPM=864,NZ=7*NSPM) - complex cdat(NZ) - complex cdat2(NZ) - complex c(NSPM) !Coherently averaged complex data - complex ct2(2*NSPM) - complex cs(NSPM) - complex cb(42) !Complex waveform for sync word - complex cc(0:NSPM-1) - real xcc(0:NSPM-1) - real xccs(0:NSPM-1) - integer navmask(nframes) !Tells which frames to average - - navg=sum(navmask) - n=nframes*NSPM - fac=1.0/(48.0*sqrt(float(navg))) - - do ifr=if1,if2 !Find freq that maximizes sync - ferr=ifr*delf - call tweak1(cdat,n,-(fc+ferr),cdat2) - c=0 - sumw=0. - do i=1,nframes - ib=(i-1)*NSPM+1 - ie=ib+NSPM-1 - if(navmask(i).eq.1) c=c + cdat2(ib:ie) - enddo - - cc=0 - ct2(1:NSPM)=c - ct2(NSPM+1:2*NSPM)=c - - do ish=0,NSPM-1 - cc(ish)=dot_product(ct2(1+ish:42+ish)+ct2(337+ish:378+ish),cb(1:42)) - enddo - - xcc=abs(cc) - xb=maxval(xcc)*fac - if(xb.gt.xmax) then - xmax=xb - bestf=ferr - cs=c - xccs=xcc - endif - enddo - - return -end subroutine msk144_freq_search diff --git a/lib/msk144code.f90 b/lib/msk144code.f90 deleted file mode 100644 index f49bebc..0000000 --- a/lib/msk144code.f90 +++ /dev/null @@ -1,70 +0,0 @@ -program msk144code - -! Provides examples of message packing, bit and symbol ordering, -! LDPC encoding, and other necessary details of the MSK144 protocol. - - use packjt - character msg*22,msgsent*22,decoded,bad*1,msgtype*13,mygrid*6 - integer*4 i4tone(144) - logical*1 bcontest - include 'testmsg.f90' - data mygrid/'FN20qi'/ - - nargs=iargc() - if(nargs.ne.1) then - print*,'Usage: msk144code "message"' - print*,' msk144code -t' - print*,' ' - print*,'Examples:' - print*,' msk144code "KA1ABC WB9XYZ EN37"' - print*,' msk144code " R-03"' - print*,' msk144code "KA1ABC WB9XYZ R EN37"' - go to 999 - endif - - call getarg(1,msg) - nmsg=1 - if(msg(1:2).eq."-t") then - testmsg(NTEST+1)=" -03" - testmsg(NTEST+2)=" R+03" - testmsg(NTEST+3)=" RRR" - testmsg(NTEST+4)=" 73" - testmsg(NTEST+5)="KA1ABC WB9XYZ R EN37" - nmsg=NTEST+5 - endif - - write(*,1010) -1010 format(" Message Decoded Err? Type"/ & - 74("-")) - do imsg=1,nmsg - if(nmsg.gt.1) msg=testmsg(imsg) - call fmtmsg(msg,iz) !To upper case, collapse multiple blanks - i1=len(trim(msg))-5 - bcontest=.false. - if(msg(i1:i1+1).eq.'R ') bcontest=.true. - ichk=0 - call genmsk144(msg,mygrid,ichk,bcontest,msgsent,i4tone,itype) - - msgtype="" - if(itype.eq.1) msgtype="Std Msg" - if(itype.eq.2) msgtype="Type 1 prefix" - if(itype.eq.3) msgtype="Type 1 suffix" - if(itype.eq.4) msgtype="Type 2 prefix" - if(itype.eq.5) msgtype="Type 2 suffix" - if(itype.eq.6) msgtype="Free text" - if(itype.eq.7) msgtype="Hashed calls" - - bad=" " - if(msgsent.ne.msg) bad="*" - write(*,1020) imsg,msg,msgsent,bad,itype,msgtype -1020 format(i2,'.',2x,a22,2x,a22,3x,a1,i3,": ",a13) - enddo - - if(nmsg.eq.1) then - n=144 - if(msg(1:1).eq."<") n=40 - write(*,1030) i4tone(1:n) -1030 format(/'Channel symbols'/(72i1)) - endif - -999 end program msk144code diff --git a/lib/msk144d2.f90 b/lib/msk144d2.f90 deleted file mode 100644 index 47eb43b..0000000 --- a/lib/msk144d2.f90 +++ /dev/null @@ -1,138 +0,0 @@ -program msk144d2 - - ! Test the msk144 decoder for WSJT-X - - use options - use timer_module, only: timer - use timer_impl, only: init_timer - use readwav - - character c - character*80 line - character*512 datadir - character*500 infile - character*12 mycall,hiscall - character*6 mygrid - character(len=500) optarg - - logical :: display_help=.false. - logical*1 bShMsgs - logical*1 bcontest - logical*1 btrain - logical*1 bswl - - type(wav_header) :: wav - - integer*2 id2(30*12000) - integer*2 ichunk(7*1024) - - real*8 pcoeffs(5) - - type (option) :: long_options(9) = [ & - option ('ndepth',.true.,'c','ndepth',''), & - option ('dxcall',.true.,'d','hiscall',''), & - option ('evemode',.true.,'e','Must be used with -s.',''), & - option ('frequency',.true.,'f','rxfreq',''), & - option ('help',.false.,'h','Display this help message',''), & - option ('mycall',.true.,'m','mycall',''), & - option ('nftol',.true.,'n','nftol',''), & - option ('rxequalize',.false.,'r','Rx Equalize',''), & - option ('short',.false.,'s','enable Sh','') & - ] - t0=0.0 - ndepth=3 - ntol=100 - nrxfreq=1500 - mycall='' - mygrid='EN50WC' - hiscall='' - bShMsgs=.false. - bcontest=.false. - btrain=.false. - bswl=.false. - datadir='.' - pcoeffs=0.d0 - - do - call getopt('c:d:ef:hm:n:rs',long_options,c,optarg,narglen,nstat,noffset,nremain,.true.) - if( nstat .ne. 0 ) then - exit - end if - select case (c) - case ('c') - read (optarg(:narglen), *) ndepth - case ('d') - read (optarg(:narglen), *) hiscall - case ('e') - bswl=.true. - case ('f') - read (optarg(:narglen), *) nrxfreq - case ('h') - display_help = .true. - case ('m') - read (optarg(:narglen), *) mycall - case ('n') - read (optarg(:narglen), *) ntol - case ('r') - btrain=.true. - case ('s') - bShMsgs=.true. - end select - end do - - if(display_help .or. nstat.lt.0 .or. nremain.lt.1) then - print *, '' - print *, 'Usage: msk144d [OPTIONS] file1 [file2 ...]' - print *, '' - print *, ' msk144 decode pre-recorded .WAV file(s)' - print *, '' - print *, 'OPTIONS:' - do i = 1, size (long_options) - call long_options(i) % print (6) - end do - go to 999 - endif - - call init_timer ('timer.out') - call timer('msk144 ',0) - ndecoded=0 - do ifile=noffset+1,noffset+nremain - call get_command_argument(ifile,optarg,narglen) - infile=optarg(:narglen) - call timer('read ',0) - call wav%read (infile) - i1=index(infile,'.wav') - if( i1 .eq. 0 ) i1=index(infile,'.WAV') - read(infile(i1-6:i1-1),*,err=998) nutc - inquire(FILE=infile,SIZE=isize) - npts=min((isize-216)/2,360000) - read(unit=wav%lun) id2(1:npts) - close(unit=wav%lun) - call timer('read ',1) - - do i=1,npts-7*1024+1,7*512 - ichunk=id2(i:i+7*1024-1) - tsec=(i-1)/12000.0 - tt=sum(float(abs(id2(i:i+7*512-1)))) - if( tt .ne. 0.0 ) then - call mskrtd(ichunk,nutc,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall,bShMsgs, & - bcontest,btrain,pcoeffs,bswl,datadir,line) - if( index(line,"&") .ne. 0 .or. & - index(line,"^") .ne. 0 .or. & - index(line,"!") .ne. 0 .or. & - index(line,"@") .ne. 0 ) then - write(*,*) line - endif - endif - enddo - enddo - - call timer('msk144 ',1) - call timer('msk144 ',101) - go to 999 - -998 print*,'Cannot read from file:' - print*,infile - -999 continue -end program msk144d2 diff --git a/lib/msk144decodeframe.f90 b/lib/msk144decodeframe.f90 deleted file mode 100644 index 5d5e155..0000000 --- a/lib/msk144decodeframe.f90 +++ /dev/null @@ -1,107 +0,0 @@ -subroutine msk144decodeframe(c,softbits,msgreceived,nsuccess,recent_calls,nrecent) -! use timer_module, only: timer - - parameter (NSPM=864) - character*22 msgreceived - character*12 recent_calls(nrecent) - complex cb(42) - complex cfac,cca,ccb - complex c(NSPM) - integer*1 decoded(80) - integer s8(8),hardbits(144) - real*8 dt, fs, pi, twopi - real cbi(42),cbq(42) - real pp(12) - real softbits(144) - real llr(128) - logical first - data first/.true./ - data s8/0,1,1,1,0,0,1,0/ - save first,cb,fs,pi,twopi,dt,s8,pp - - if(first) then -! define half-sine pulse and raised-cosine edge window - pi=4d0*datan(1d0) - twopi=8d0*datan(1d0) - fs=12000.0 - dt=1.0/fs - - do i=1,12 - angle=(i-1)*pi/12.0 - pp(i)=sin(angle) - enddo - -! define the sync word waveforms - s8=2*s8-1 - cbq(1:6)=pp(7:12)*s8(1) - cbq(7:18)=pp*s8(3) - cbq(19:30)=pp*s8(5) - cbq(31:42)=pp*s8(7) - cbi(1:12)=pp*s8(2) - cbi(13:24)=pp*s8(4) - cbi(25:36)=pp*s8(6) - cbi(37:42)=pp(1:6)*s8(8) - cb=cmplx(cbi,cbq) - first=.false. - endif - - nsuccess=0 - msgreceived=' ' - -! Estimate carrier phase. - cca=sum(c(1:1+41)*conjg(cb)) - ccb=sum(c(1+56*6:1+56*6+41)*conjg(cb)) - cfac=ccb*conjg(cca) - phase0=atan2(imag(cca+ccb),real(cca+ccb)) - -! Remove phase error - want constellation rotated so that sample points lie on I/Q axes - cfac=cmplx(cos(phase0),sin(phase0)) - c=c*conjg(cfac) - -! matched filter - - softbits(1)=sum(imag(c(1:6))*pp(7:12))+sum(imag(c(864-5:864))*pp(1:6)) - softbits(2)=sum(real(c(1:12))*pp) - do i=2,72 - softbits(2*i-1)=sum(imag(c(1+(i-1)*12-6:1+(i-1)*12+5))*pp) - softbits(2*i)=sum(real(c(7+(i-1)*12-6:7+(i-1)*12+5))*pp) - enddo - -! sync word hard error weight is used as a discriminator for -! frames that have reasonable probability of decoding - hardbits=0 - do i=1,144 - if( softbits(i) .ge. 0.0 ) then - hardbits(i)=1 - endif - enddo - nbadsync1=(8-sum( (2*hardbits(1:8)-1)*s8 ) )/2 - nbadsync2=(8-sum( (2*hardbits(1+56:8+56)-1)*s8 ) )/2 - nbadsync=nbadsync1+nbadsync2 - if( nbadsync .gt. 4 ) then - return - endif - -! normalize the softsymbols before submitting to decoder - sav=sum(softbits)/144 - s2av=sum(softbits*softbits)/144 - ssig=sqrt(s2av-sav*sav) - softbits=softbits/ssig - - sigma=0.75 - llr(1:48)=softbits(9:9+47) - llr(49:128)=softbits(65:65+80-1) - llr=2.0*llr/(sigma*sigma) - - max_iterations=10 -! call timer('bpdec144 ',0) - call bpdecode144(llr,max_iterations,decoded,niterations) -! call timer('bpdec144 ',1) - if( niterations .ge. 0.0 ) then - call extractmessage144(decoded,msgreceived,nhashflag,recent_calls,nrecent) - if( nhashflag .gt. 0 ) then !Hash codes match, so print it - nsuccess=1 - endif - endif - - return -end subroutine msk144decodeframe diff --git a/lib/msk144sd.f90 b/lib/msk144sd.f90 deleted file mode 100644 index 267fff5..0000000 --- a/lib/msk144sd.f90 +++ /dev/null @@ -1,197 +0,0 @@ -program msk144sd -! -! A simple decoder for slow msk144. -! Can be used as a (slow) brute-force multi-decoder by looping -! over a set of carrier frequencies. -! - use options - use timer_module, only: timer - use timer_impl, only: init_timer - use readwav - - parameter (NRECENT=10) - parameter (NSPM=864) - parameter (NPATTERNS=4) - - character ch - character*80 line - character*500 infile - character*12 mycall,hiscall - character*6 mygrid - character(len=500) optarg - character*22 msgreceived - character*12 recent_calls(NRECENT) - - complex cdat(30*375) - complex c(NSPM) - complex ct(NSPM) - - real softbits(144) - real xmc(NPATTERNS) - - logical :: display_help=.false. - - type(wav_header) :: wav - - integer iavmask(8) - integer iavpatterns(8,NPATTERNS) - integer npkloc(10) - - integer*2 id2(30*12000) - integer*2 ichunk(7*1024) - - data iavpatterns/ & - 1,1,1,1,0,0,0,0, & - 0,1,1,1,1,0,0,0, & - 0,0,1,1,1,1,0,0, & - 1,1,1,1,1,1,0,0/ - data xmc/2.0,4.5,2.5,3.0/ - - type (option) :: long_options(2) = [ & - option ('frequency',.true.,'f','rxfreq',''), & - option ('help',.false.,'h','Display this help message','') & - ] - t0=0.0 - ntol=100 - nrxfreq=1500 - - do - call getopt('f:h',long_options,ch,optarg,narglen,nstat,noffset,nremain,.true.) - if( nstat .ne. 0 ) then - exit - end if - select case (ch) - case ('f') - read (optarg(:narglen), *) nrxfreq - case ('h') - display_help = .true. - end select - end do - - if(display_help .or. nstat.lt.0 .or. nremain.lt.1) then - print *, '' - print *, 'Usage: msk144sd [OPTIONS] file1 [file2 ...]' - print *, '' - print *, ' decode pre-recorded .WAV file(s)' - print *, '' - print *, 'OPTIONS:' - do i = 1, size (long_options) - call long_options(i) % print (6) - end do - go to 999 - endif - - call init_timer ('timer.out') - call timer('msk144 ',0) - ndecoded=0 - do ifile=noffset+1,noffset+nremain - call get_command_argument(ifile,optarg,narglen) - infile=optarg(:narglen) - call timer('read ',0) - call wav%read (infile) - i1=index(infile,'.wav') - if( i1 .eq. 0 ) i1=index(infile,'.WAV') - read(infile(i1-6:i1-1),*,err=998) nutc - inquire(FILE=infile,SIZE=isize) - npts=min((isize-216)/2,360000) - read(unit=wav%lun) id2(1:npts) - close(unit=wav%lun) - call timer('read ',1) - -! do if=1,89 ! brute force multi-decoder - fo=nrxfreq -! fo=(if-1)*25.0+300.0 - call msksddc(id2,npts,fo,cdat) - np=npts/32 - ntol=200 ! actual ntol is ntol/32=6.25 Hz. Detection window is 12.5 Hz wide - fc=1500.0 - call msk144spd(cdat,np,ntol,ndecodesuccess,msgreceived,fc,fest,tdec,navg,ct, & - softbits,recent_calls,nrecent) - nsnr=0 ! need an snr estimate - if( ndecodesuccess .eq. 1 ) then - fest=fo+fest-fc ! fudging because spd thinks input signal is at 1500 Hz - goto 900 - endif -! If short ping decoder doesn't find a decode - npat=NPATTERNS - do iavg=1,npat - iavmask=iavpatterns(1:8,iavg) - navg=sum(iavmask) - deltaf=4.0/real(navg) ! search increment for frequency sync - npeaks=4 - ntol=200 - fc=1500.0 - call msk144sync(cdat(1:6*NSPM),6,ntol,deltaf,iavmask,npeaks,fc, & - fest,npkloc,nsyncsuccess,xmax,c) - if( nsyncsuccess .eq. 0 ) cycle - - do ipk=1,npeaks - do is=1,3 - ic0=npkloc(ipk) - if(is.eq.2) ic0=max(1,ic0-1) - if(is.eq.3) ic0=min(NSPM,ic0+1) - ct=cshift(c,ic0-1) - call msk144decodeframe(ct,softbits,msgreceived,ndecodesuccess, & - recent_calls,nrecent) - if(ndecodesuccess .gt. 0) then - tdec=tsec+xmc(iavg)*tframe - fest=fo+(fest-fc)/32.0 - goto 900 - endif - enddo !Slicer dither - enddo !Peak loop - enddo - -! enddo -900 continue - if( ndecodesuccess .gt. 0 ) then - write(*,1020) nutc,nsnr,tdec,nint(fest),' % ',msgreceived,navg -1020 format(i6.6,i4,f5.1,i5,a3,a22,i4) - endif - enddo - - call timer('msk144 ',1) - call timer('msk144 ',101) - go to 999 - -998 print*,'Cannot read from file:' - print*,infile - -999 continue -end program msk144sd - -subroutine msksddc(id2,npts,fc,cdat) - -! The msk144 detector/demodulator/decoder will decode signals -! with carrier frequency, fc, in the range fN/4 +/- 0.03333*fN. -! -! For slow MSK144 with nslow=32: -! fs=12000/32=375 Hz, fN=187.5 Hz -! -! This routine accepts input samples with fs=12000 Hz. It -! downconverts and decimates by 32 to center a signal with input carrier -! frequency fc at new carrier frequency 1500/32=46.875 Hz. -! The analytic signal is returned. - - parameter (NFFT1=30*12000,NFFT2=30*375) - integer*2 id2(npts) - complex cx(0:NFFT1) - complex cdat(30*375) - - dt=1.0/12000.0 - df=1.0/(NFFT1*dt) - icenter=int(fc/df+0.5) - i46p875=int(46.875/df+0.5) - ishift=icenter-i46p875 - cx=cmplx(0.0,0.0) - cx(1:npts)=id2 - call four2a(cx,NFFT1,1,-1,1) - cx=cshift(cx,ishift) - cx(1)=0.5*cx(1) - cx(2*i46p875+1:)=cmplx(0.0,0.0) - call four2a(cx,NFFT2,1,1,1) - cdat(1:npts/32)=cx(0:npts/32-1)/NFFT1 - return - -end subroutine msksddc - diff --git a/lib/msk144signalquality.f90 b/lib/msk144signalquality.f90 deleted file mode 100644 index 24a146c..0000000 --- a/lib/msk144signalquality.f90 +++ /dev/null @@ -1,219 +0,0 @@ -subroutine msk144signalquality(cframe,snr,freq,t0,softbits,msg,dxcall, & - btrain,datadir,nbiterrors,eyeopening,pcoeffs) - - character*22 msg,msgsent - character*12 dxcall - character*12 training_dxcall - character*12 trained_dxcall - character*6 mygrid - character*512 pcoeff_filename - character*8 date - character*10 time - character*5 zone - character*512 datadir - - complex cframe(864) - complex cross(864) - complex cross_avg(864) - complex canalytic(1024) - complex cmodel(1024) - - integer i4tone(144) - integer hardbits(144) - integer msgbits(144) - integer values(8) - - logical*1 bcontest - logical*1 btrain - logical*1 first - logical*1 currently_training - logical*1 msg_has_dxcall - logical*1 is_training_frame - - real softbits(144) - real waveform(0:863) - real d(1024) - real phase(864) - real twopi,freq,phi,dphi0,dphi1,dphi - real*8 x(145),y(145),pp(145),sigmay(145),a(5),chisqr - real*8 pcoeffs(5) - - parameter (NFREQLOW=500,NFREQHIGH=2500) - data first/.true./ - save cross_avg,wt_avg,first,currently_training, & - navg,tlast,training_dxcall,trained_dxcall - - if (first) then - navg=0 - cross=cmplx(0.0,0.0) - cross_avg=cmplx(0.0,0.0) - wt_avg=0.0 - tlast=0.0 - trained_dxcall(1:12)=' ' - training_dxcall(1:12)=' ' - currently_training=.false. - first=.false. - endif - - if( (currently_training .and. (dxcall .ne. training_dxcall)) .or. & - (navg .gt. 10 )) then !reset and retrain - navg=0 - cross=cmplx(0.0,0.0) - cross_avg=cmplx(0.0,0.0) - wt_avg=0.0 - tlast=0.0 - trained_dxcall(1:12)=' ' - currently_training=.false. - training_dxcall(1:12)=' ' - trained_dxcall(1:12)=' ' -!write(*,*) 'reset to untrained state ' - endif - - indx_dxcall=index(msg,trim(dxcall)) - msg_has_dxcall = indx_dxcall .ge. 4 - - if( btrain .and. msg_has_dxcall .and. (.not. currently_training) ) then - currently_training=.true. - training_dxcall=trim(dxcall) - trained_dxcall(1:12)=' ' -!write(*,*) 'start training on call ',training_dxcall - endif - - if( msg_has_dxcall .and. currently_training ) then - trained_dxcall(1:12)=' ' - training_dxcall=dxcall - endif - -! use decoded message to figure out how many bit errors in the frame - do i=1, 144 - hardbits(i)=0 - if(softbits(i) .gt. 0 ) hardbits(i)=1 - enddo - -! generate tones from decoded message - mygrid="EN50" - ichk=0 - bcontest=.false. - call genmsk144(msg,mygrid,ichk,bcontest,msgsent,i4tone,itype) - -! reconstruct message bits from tones - msgbits(1)=0 - do i=1,143 - if( i4tone(i) .eq. 0 ) then - if( mod(i,2) .eq. 1 ) then - msgbits(i+1)=msgbits(i) - else - msgbits(i+1)=mod(msgbits(i)+1,2) - endif - else - if( mod(i,2) .eq. 1 ) then - msgbits(i+1)=mod(msgbits(i)+1,2) - else - msgbits(i+1)=msgbits(i) - endif - endif - enddo - - nbiterrors=0 - do i=1,144 - if( hardbits(i) .ne. msgbits(i) ) nbiterrors=nbiterrors+1 - enddo - - nplus=0 - nminus=0 - eyetop=1 - eyebot=-1 - do i=1,144 - if( msgbits(i) .eq. 1 ) then - if( softbits(i) .lt. eyetop ) eyetop=softbits(i) - else - if( softbits(i) .gt. eyebot ) eyebot=softbits(i) - endif - enddo - eyeopening=eyetop-eyebot - - is_training_frame = & - (snr.gt.5.0 .and.(nbiterrors.lt.7)) .and. & - (abs(t0-tlast) .gt. 0.072) .and. & - msg_has_dxcall - if( currently_training .and. is_training_frame ) then - twopi=8.0*atan(1.0) - nsym=144 - if( i4tone(41) .lt. 0 ) nsym=40 - dphi0=twopi*(freq-500)/12000.0 - dphi1=twopi*(freq+500)/12000.0 - phi=-twopi/8 - indx=0 - do i=1,nsym - if( i4tone(i) .eq. 0 ) then - dphi=dphi0 - else - dphi=dphi1 - endif - do j=1,6 - waveform(indx)=cos(phi); - indx=indx+1 - phi=mod(phi+dphi,twopi) - enddo - enddo -! convert the passband waveform to complex baseband - npts=864 - nfft=1024 - d=0 - d(1:864)=waveform(0:863) - call analytic(d,npts,nfft,canalytic,pcoeffs,.false.) ! don't equalize the model - call tweak1(canalytic,nfft,-freq,cmodel) - call four2a(cframe(1:864),864,1,-1,1) - call four2a(cmodel(1:864),864,1,-1,1) - -! Cross spectra from different messages can be averaged -! as long as all messages originate from dxcall. - cross=cmodel(1:864)*conjg(cframe)/1000.0 - cross=cshift(cross,864/2) - cross_avg=cross_avg+10**(snr/20.0)*cross - wt_avg=wt_avg+10**(snr/20.0) - navg=navg+1 - tlast=t0 - phase=atan2(imag(cross_avg),real(cross_avg)) - df=12000.0/864.0 - nm=145 - do i=1,145 - x(i)=(i-73)*df/1000.0 - enddo - y=phase((864/2-nm/2):(864/2+nm/2)) - sigmay=wt_avg/abs(cross_avg((864/2-nm/2):(864/2+nm/2))) - mode=1 - npts=145 - nterms=5 - call polyfit(x,y,sigmay,npts,nterms,mode,a,chisqr) - pp=a(1)+x*(a(2)+x*(a(3)+x*(a(4)+x*a(5)))) - rmsdiff=sum( (pp-phase((864/2-nm/2):(864/2+nm/2)))**2 )/145.0 -!write(*,*) 'training ',navg,sqrt(chisqr),rmsdiff - if( (sqrt(chisqr).lt.1.8) .and. (rmsdiff.lt.0.5) .and. (navg.ge.5) ) then - trained_dxcall=dxcall - call date_and_time(date,time,zone,values) - write(pcoeff_filename,'(i2.2,i2.2,i2.2,"_",i2.2,i2.2,i2.2)') & - values(1)-2000,values(2),values(3),values(5),values(6),values(7) - pcoeff_filename=trim(trained_dxcall)//"_"//trim(pcoeff_filename)//".pcoeff" - l1=index(datadir,char(0))-1 - datadir(l1+1:l1+1)="/" - pcoeff_filename=datadir(1:l1+1)//trim(pcoeff_filename) -!write(*,*) 'trained - writing coefficients to: ',pcoeff_filename - open(17,file=pcoeff_filename,status='new') - write(17,'(i4,2f10.2,3i5,5e25.16)') navg,sqrt(chisqr),rmsdiff,NFREQLOW,NFREQHIGH,nterms,a - do i=1, 145 - write(17,*) x(i),pp(i),y(i),sigmay(i) - enddo - do i=1,864 - write(17,*) i,real(cframe(i)),imag(cframe(i)),real(cross_avg(i)),imag(cross_avg(i)) - enddo - close(17) - training_dxcall(1:12)=' ' - currently_training=.false. - btrain=.false. - navg=0 - endif - endif - - return - end subroutine msk144signalquality diff --git a/lib/msk144sim.f90 b/lib/msk144sim.f90 deleted file mode 100644 index 28f17e6..0000000 --- a/lib/msk144sim.f90 +++ /dev/null @@ -1,99 +0,0 @@ -program msk144sim - - use wavhdr - parameter (NMAX=15*12000) - real pings(0:NMAX-1) - real waveform(0:NMAX-1) - character*6 mygrid - character arg*8,msg*22,msgsent*22,fname*40 - real wave(0:NMAX-1) !Simulated received waveform - real*8 twopi,freq,phi,dphi0,dphi1,dphi - type(hdr) h !Header for .wav file - integer*2 iwave(0:NMAX-1) - integer itone(144) !Message bits - logical*1 bcontest - data mygrid/"EN50wc"/ - - nargs=iargc() - if(nargs.ne.6) then - print*,'Usage: msk144sim message freq width nslow snr nfiles' - print*,'Example: msk144sim "K1ABC W9XYZ EN37" 1500 0.12 1 2 1' - print*,' msk144sim "K1ABC W9XYZ EN37" 1500 2.5 32 15 1' - go to 999 - endif - call getarg(1,msg) - call getarg(2,arg) - read(arg,*) freq - call getarg(3,arg) - read(arg,*) width - call getarg(4,arg) - read(arg,*) nslow - call getarg(5,arg) - read(arg,*) snrdb - call getarg(6,arg) - read(arg,*) nfiles - -!sig is the peak amplitude of the ping. - sig=sqrt(2.0)*10.0**(0.05*snrdb) - h=default_header(12000,NMAX) - i1=len(trim(msg))-5 - bcontest=.false. - if(msg(i1:i1+1).eq.'R ') bcontest=.true. - ichk=0 - call genmsk144(msg,mygrid,ichk,bcontest,msgsent,itone,itype) - twopi=8.d0*atan(1.d0) - - nsym=144 - nsps=6*nslow - if( itone(41) .lt. 0 ) nsym=40 - baud=2000.d0/nslow - dphi0=twopi*(freq-0.25d0*baud)/12000.d0 - dphi1=twopi*(freq+0.25d0*baud)/12000.d0 - phi=0.0 - k=0 - nreps=NMAX/(nsym*nsps) - print*,nsym,nslow,nsps,baud,freq - do jrep=1,nreps - do i=1,nsym - if( itone(i) .eq. 0 ) then - dphi=dphi0 - else - dphi=dphi1 - endif - do j=1,nsps - waveform(k)=cos(phi) - k=k+1 - phi=mod(phi+dphi,twopi) - enddo - enddo - enddo - - if(itype.lt.1 .or. itype.gt.7) then - print*,'Illegal message' - go to 999 - endif - - if(nslow.eq.1) call makepings(pings,NMAX,width,sig) - -! call sgran() - do ifile=1,nfiles !Loop over requested number of files - write(fname,1002) ifile !Output filename -1002 format('000000_',i6.6) - open(10,file=fname(1:13)//'.wav',access='stream',status='unknown') - - wave=0.0 - iwave=0 - fac=sqrt(6000.0/2500.0) - do i=0,NMAX-1 - xx=gran() - if(nslow.eq.1) wave(i)=pings(i)*waveform(i) + fac*xx - if(nslow.gt.1) wave(i)=sig*waveform(i) + fac*xx - iwave(i)=30.0*wave(i) - enddo - - write(10) h,iwave !Save the .wav file - close(10) - - enddo - -999 end program msk144sim diff --git a/lib/msk144spd.f90 b/lib/msk144spd.f90 deleted file mode 100644 index dcba359..0000000 --- a/lib/msk144spd.f90 +++ /dev/null @@ -1,197 +0,0 @@ -subroutine msk144spd(cbig,n,ntol,nsuccess,msgreceived,fc,fret,tret,navg,ct, & - softbits,recent_calls,nrecent) - -! MSK144 short-ping-decoder - - use timer_module, only: timer - - parameter (NSPM=864, MAXSTEPS=100, NFFT=NSPM, MAXCAND=5, NPATTERNS=6) - character*22 msgreceived - character*12 recent_calls(nrecent) - complex cbig(n) - complex cdat(3*NSPM) !Analytic signal - complex c(NSPM) - complex ct(NSPM) - complex ctmp(NFFT) - integer, dimension(1) :: iloc - integer indices(MAXSTEPS) - integer npkloc(10) - integer navpatterns(3,NPATTERNS) - integer navmask(3) - integer nstart(MAXCAND) - logical ismask(NFFT) - real detmet(-2:MAXSTEPS+3) - real detmet2(-2:MAXSTEPS+3) - real detfer(MAXSTEPS) - real rcw(12) - real ferrs(MAXCAND) - real snrs(MAXCAND) - real softbits(144) - real tonespec(NFFT) - real tpat(NPATTERNS) - real*8 dt, df, fs, pi, twopi - logical first - data first/.true./ - data navpatterns/ & - 0,1,0, & - 1,0,0, & - 0,0,1, & - 1,1,0, & - 0,1,1, & - 1,1,1/ - data tpat/1.5,0.5,2.5,1.0,2.0,1.5/ - - save df,first,fs,pi,twopi,dt,tframe,rcw - - if(first) then - nmatchedfilter=1 -! define half-sine pulse and raised-cosine edge window - pi=4d0*datan(1d0) - twopi=8d0*datan(1d0) - fs=12000.0 - dt=1.0/fs - df=fs/NFFT - tframe=NSPM/fs - - do i=1,12 - angle=(i-1)*pi/12.0 - rcw(i)=(1-cos(angle))/2 - enddo - - first=.false. - endif - - ! fill the detmet, detferr arrays - nstep=(n-NSPM)/216 ! 72ms/4=18ms steps - detmet=0 - detmet2=0 - detfer=-999.99 - nfhi=2*(fc+500) - nflo=2*(fc-500) - ihlo=nint((nfhi-2*ntol)/df) + 1 - ihhi=nint((nfhi+2*ntol)/df) + 1 - illo=nint((nflo-2*ntol)/df) + 1 - ilhi=nint((nflo+2*ntol)/df) + 1 - i2000=nint(nflo/df) + 1 - i4000=nint(nfhi/df) + 1 - do istp=1,nstep - ns=1+216*(istp-1) - ne=ns+NSPM-1 - if( ne .gt. n ) exit - ctmp=cmplx(0.0,0.0) - ctmp(1:NSPM)=cbig(ns:ne) - -! Coarse carrier frequency sync - seek tones at 2000 Hz and 4000 Hz in -! squared signal spectrum. - - ctmp=ctmp**2 - ctmp(1:12)=ctmp(1:12)*rcw - ctmp(NSPM-11:NSPM)=ctmp(NSPM-11:NSPM)*rcw(12:1:-1) - call four2a(ctmp,NFFT,1,-1,1) - tonespec=abs(ctmp)**2 - - ismask=.false. - ismask(ihlo:ihhi)=.true. ! high tone search window - iloc=maxloc(tonespec,ismask) - ihpk=iloc(1) - deltah=-real( (ctmp(ihpk-1)-ctmp(ihpk+1)) / (2*ctmp(ihpk)-ctmp(ihpk-1)-ctmp(ihpk+1)) ) - ah=tonespec(ihpk) - ahavp=(sum(tonespec,ismask)-ah)/count(ismask) - trath=ah/(ahavp+0.01) - ismask=.false. - ismask(illo:ilhi)=.true. ! window for low tone - iloc=maxloc(tonespec,ismask) - ilpk=iloc(1) - deltal=-real( (ctmp(ilpk-1)-ctmp(ilpk+1)) / (2*ctmp(ilpk)-ctmp(ilpk-1)-ctmp(ilpk+1)) ) - al=tonespec(ilpk) - alavp=(sum(tonespec,ismask)-al)/count(ismask) - tratl=al/(alavp+0.01) - fdiff=(ihpk+deltah-ilpk-deltal)*df - ferrh=(ihpk+deltah-i4000)*df/2.0 - ferrl=(ilpk+deltal-i2000)*df/2.0 - if( ah .ge. al ) then - ferr=ferrh - else - ferr=ferrl - endif - detmet(istp)=max(ah,al) - detmet2(istp)=max(trath,tratl) - detfer(istp)=ferr - enddo ! end of detection-metric and frequency error estimation loop - - call indexx(detmet(1:nstep),nstep,indices) !find median of detection metric vector - xmed=detmet(indices(nstep/4)) - detmet=detmet/xmed ! noise floor of detection metric is 1.0 - ndet=0 - - do ip=1,MAXCAND ! Find candidates - iloc=maxloc(detmet(1:nstep)) - il=iloc(1) - if( (detmet(il) .lt. 3.0) ) exit - if( abs(detfer(il)) .le. ntol ) then - ndet=ndet+1 - nstart(ndet)=1+(il-1)*216+1 - ferrs(ndet)=detfer(il) - snrs(ndet)=12.0*log10(detmet(il))/2-9.0 - endif - detmet(il)=0.0 - enddo - - if( ndet .lt. 3 ) then - do ip=1,MAXCAND-ndet ! Find candidates - iloc=maxloc(detmet2(1:nstep)) - il=iloc(1) - if( (detmet2(il) .lt. 12.0) ) exit - if( abs(detfer(il)) .le. ntol ) then - ndet=ndet+1 - nstart(ndet)=1+(il-1)*216+1 - ferrs(ndet)=detfer(il) - snrs(ndet)=12.0*log10(detmet2(il))/2-9.0 - endif - detmet2(il)=0.0 - enddo - endif - - nsuccess=0 - msgreceived=' ' - npeaks=2 - ntol0=8 - deltaf=2.0 - do icand=1,ndet ! Try to sync/demod/decode each candidate. - ib=max(1,nstart(icand)-NSPM) - ie=ib-1+3*NSPM - if( ie .gt. n ) then - ie=n - ib=ie-3*NSPM+1 - endif - cdat=cbig(ib:ie) - fo=fc+ferrs(icand) - do iav=1,NPATTERNS - navmask=navpatterns(1:3,iav) - call msk144sync(cdat,3,ntol0,deltaf,navmask,npeaks,fo,fest,npkloc, & - nsyncsuccess,xmax,c) - - if( nsyncsuccess .eq. 0 ) cycle - - do ipk=1,npeaks - do is=1,3 - ic0=npkloc(ipk) - if( is.eq.2) ic0=max(1,ic0-1) - if( is.eq.3) ic0=min(NSPM,ic0+1) - ct=cshift(c,ic0-1) - call msk144decodeframe(ct,softbits,msgreceived,ndecodesuccess, & - recent_calls,nrecent) - if( ndecodesuccess .gt. 0 ) then - tret=(nstart(icand)+NSPM/2)/fs - fret=fest - navg=sum(navmask) - nsuccess=1 - return - endif - enddo - enddo - enddo - enddo ! candidate loop - - return -end subroutine msk144spd diff --git a/lib/msk144sync.f90 b/lib/msk144sync.f90 deleted file mode 100644 index dfae9a2..0000000 --- a/lib/msk144sync.f90 +++ /dev/null @@ -1,101 +0,0 @@ -subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, & - npklocs,nsuccess,xmax,c) - -!$ use omp_lib - - parameter (NSPM=864) - complex cdat(NSPM*nframes) - complex cdat2(NSPM*nframes,8) - complex c(NSPM) !Coherently averaged complex data - complex cs(NSPM,8) - complex cb(42) !Complex waveform for sync word - - integer s8(8) - integer iloc(1) - integer npklocs(npeaks) - integer navmask(nframes) ! defines which frames to average - - real cbi(42),cbq(42) - real pkamps(npeaks) - real xcc(0:NSPM-1) - real xccs(0:NSPM-1,8) - real xm(8) - real bf(8) - real pp(12) !Half-sine pulse shape - logical first - data first/.true./ - data s8/0,1,1,1,0,0,1,0/ - save first,cb,fs,pi,twopi,dt,s8,pp - - if(first) then - pi=4.0*atan(1.0) - twopi=8.0*atan(1.0) - fs=12000.0 - dt=1.0/fs - - do i=1,12 !Define half-sine pulse - angle=(i-1)*pi/12.0 - pp(i)=sin(angle) - enddo - -! Define the sync word waveforms - s8=2*s8-1 - cbq(1:6)=pp(7:12)*s8(1) - cbq(7:18)=pp*s8(3) - cbq(19:30)=pp*s8(5) - cbq(31:42)=pp*s8(7) - cbi(1:12)=pp*s8(2) - cbi(13:24)=pp*s8(4) - cbi(25:36)=pp*s8(6) - cbi(37:42)=pp(1:6)*s8(8) - cb=cmplx(cbi,cbq) - - first=.false. - endif - - nfreqs=2*nint(ntol/delf) + 1 - xm=0.0 - bf=0.0 - nthreads=1 -!$ nthreads=min(8,int(OMP_GET_MAX_THREADS(),4)) - nstep=nfreqs/nthreads - -!$OMP PARALLEL NUM_THREADS(nthreads) PRIVATE(id,if1,if2) - id=1 -!$ id=OMP_GET_THREAD_NUM() + 1 !Thread id = 1,2,... - if1=-nint(ntol/delf) + (id-1)*nstep - if2=if1+nstep-1 - if(id.eq.nthreads) if2=nint(ntol/delf) - call msk144_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, & - cdat2(1,id),xm(id),bf(id),cs(1,id),xccs(1,id)) -!$OMP END PARALLEL - - xmax=xm(1) - fest=fc+bf(1) - c=cs(1:NSPM,1) - xcc=xccs(0:NSPM-1,1) - if(nthreads.gt.1) then - do i=2,nthreads - if(xm(i).gt.xmax) then - xmax=xm(i) - fest=fc+bf(i) - c=cs(1:NSPM,i) - xcc=xccs(0:NSPM-1,i) - endif - enddo - endif - -! Find npeaks largest peaks - do ipk=1,npeaks - iloc=maxloc(xcc) - ic2=iloc(1) - npklocs(ipk)=ic2 - pkamps(ipk)=xcc(ic2-1) - xcc(max(0,ic2-7):min(NSPM-1,ic2+7))=0.0 - enddo - - nsuccess=0 - if(xmax.ge.1.3) nsuccess=1 - - return -end subroutine msk144sync diff --git a/lib/msk40_freq_search.f90 b/lib/msk40_freq_search.f90 deleted file mode 100644 index 97f74f5..0000000 --- a/lib/msk40_freq_search.f90 +++ /dev/null @@ -1,53 +0,0 @@ -subroutine msk40_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, & - cdat2,xmax,bestf,cs,xccs) - - parameter (NSPM=240,NZ=7*NSPM) - complex cdat(NZ) - complex cdat2(NZ) - complex c(NSPM) !Coherently averaged complex data - complex ct2(2*NSPM) - complex cs(NSPM) - complex cb(42) !Complex waveform for sync word - complex cc(0:NSPM-1) - real xcc(0:NSPM-1) - real xccs(0:NSPM-1) - integer navmask(nframes) !Tells which frames to average - - navg=sum(navmask) - n=nframes*NSPM -! fac=1.0/(48.0*sqrt(float(navg))) - fac=1.0/(24.0*sqrt(float(navg))) - - do ifr=if1,if2 !Find freq that maximizes sync - ferr=ifr*delf - call tweak1(cdat,n,-(fc+ferr),cdat2) - c=0 - do i=1,nframes - ib=(i-1)*NSPM+1 - ie=ib+NSPM-1 - if( navmask(i) .eq. 1 ) c=c+cdat2(ib:ie) - enddo - - cc=0 - ct2(1:NSPM)=c - ct2(NSPM+1:2*NSPM)=c - - do ish=0,NSPM-1 - cc(ish)=dot_product(ct2(1+ish:42+ish),cb(1:42)) - enddo - - xcc=abs(cc) - xb=maxval(xcc)*fac - if(xb.gt.xmax) then - xmax=xb - bestf=ferr - cs=c - xccs=xcc - endif - enddo - -! write(71,3001) fc,delf,if1,if2,nframes,bestf,xmax -!3001 format(2f8.3,3i5,2f8.3) - - return -end subroutine msk40_freq_search diff --git a/lib/msk40decodeframe.f90 b/lib/msk40decodeframe.f90 deleted file mode 100644 index 363d8dc..0000000 --- a/lib/msk40decodeframe.f90 +++ /dev/null @@ -1,169 +0,0 @@ -subroutine msk40decodeframe(c,mycall,hiscall,xsnr,bswl,nhasharray, & - recent_calls,nrecent,msgreceived,nsuccess) -! use timer_module, only: timer - - parameter (NSPM=240) - character*4 rpt(0:15) - character*6 mycall,hiscall,mycall0,hiscall0 - character*22 hashmsg,msgreceived - character*12 recent_calls(nrecent) - complex cb(42) - complex cfac,cca - complex c(NSPM) - integer*1 cw(32) - integer*1 decoded(16) - integer s8r(8),hardbits(40) - integer nhasharray(nrecent,nrecent) - real*8 dt, fs, pi, twopi - real cbi(42),cbq(42) - real pp(12) - real softbits(40) - real llr(32) - logical first - logical*1 bswl - data first/.true./ - data s8r/1,0,1,1,0,0,0,1/ - data mycall0/'dummy'/,hiscall0/'dummy'/ - data rpt/"-03 ","+00 ","+03 ","+06 ","+10 ","+13 ","+16 ", & - "R-03","R+00","R+03","R+06","R+10","R+13","R+16", & - "RRR ","73 "/ - save first,cb,fs,pi,twopi,dt,s8r,pp,rpt,mycall0,hiscall0,ihash - - if(first) then -! define half-sine pulse and raised-cosine edge window - pi=4d0*datan(1d0) - twopi=8d0*datan(1d0) - fs=12000.0 - dt=1.0/fs - - do i=1,12 - angle=(i-1)*pi/12.0 - pp(i)=sin(angle) - enddo - -! define the sync word waveforms - s8r=2*s8r-1 - cbq(1:6)=pp(7:12)*s8r(1) - cbq(7:18)=pp*s8r(3) - cbq(19:30)=pp*s8r(5) - cbq(31:42)=pp*s8r(7) - cbi(1:12)=pp*s8r(2) - cbi(13:24)=pp*s8r(4) - cbi(25:36)=pp*s8r(6) - cbi(37:42)=pp(1:6)*s8r(8) - cb=cmplx(cbi,cbq) - first=.false. - endif - - if(mycall.ne.mycall0 .or. hiscall.ne.hiscall0) then - hashmsg=trim(mycall)//' '//trim(hiscall) - if( hashmsg .ne. ' ' .and. hiscall .ne. '' ) then ! protect against blank mycall/hiscall - call fmtmsg(hashmsg,iz) - call hash(hashmsg,22,ihash) - ihash=iand(ihash,4095) - else - ihash=9999 ! so that it can never match a received hash - endif - mycall0=mycall - hiscall0=hiscall - endif - - nsuccess=0 - msgreceived=' ' - -! Estimate carrier phase. - cca=sum(c(1:1+41)*conjg(cb)) - phase0=atan2(imag(cca),real(cca)) - -! Remove phase error - want constellation rotated so that sample points lie on I/Q axes - cfac=cmplx(cos(phase0),sin(phase0)) - c=c*conjg(cfac) - -! Matched filter. - softbits(1)=sum(imag(c(1:6))*pp(7:12))+sum(imag(c(NSPM-5:NSPM))*pp(1:6)) - softbits(2)=sum(real(c(1:12))*pp) - do i=2,20 - softbits(2*i-1)=sum(imag(c(1+(i-1)*12-6:1+(i-1)*12+5))*pp) - softbits(2*i)=sum(real(c(7+(i-1)*12-6:7+(i-1)*12+5))*pp) - enddo - -! Sync word hard error weight is used to reject frames that -! are unlikely to decode. - hardbits=0 - do i=1,40 - if( softbits(i) .ge. 0.0 ) then - hardbits(i)=1 - endif - enddo - nbadsync1=(8-sum( (2*hardbits(1:8)-1)*s8r ) )/2 - nbadsync=nbadsync1 - if( nbadsync .gt. 3 ) then - return - endif - -! Normalize the softsymbols before submitting to decoder. - sav=sum(softbits)/40 - s2av=sum(softbits*softbits)/40 - ssig=sqrt(s2av-sav*sav) - softbits=softbits/ssig - - sigma=0.75 -! if(xsnr.lt.0.0) sigma=0.75-0.0875*xsnr - if(xsnr.lt.0.0) sigma=0.75-0.11*xsnr - llr(1:32)=softbits(9:40) - llr=2.0*llr/(sigma*sigma) - - max_iterations=5 - call bpdecode40(llr,max_iterations,decoded,niterations) - - if( niterations .ge. 0.0 ) then - call encode_msk40(decoded,cw) - nhammd=0 - cord=0.0 - do i=1,32 - if( cw(i) .ne. hardbits(i+8) ) then - nhammd=nhammd+1 - cord=cord+abs(softbits(i+8)) - endif - enddo - - imsg=0 - do i=1,16 - imsg=ishft(imsg,1)+iand(1_1,decoded(17-i)) - enddo - nrxrpt=iand(imsg,15) - nrxhash=(imsg-nrxrpt)/16 - - if(nhammd.le.4 .and. cord .lt. 0.65 .and. & - nrxhash.eq.ihash .and. nrxrpt.ge.7) then -!write(*,*) 'decodeframe 1',nbadsync,nhammd,cord,nrxhash,nrxrpt,ihash,xsnr,sigma - nsuccess=1 - write(msgreceived,'(a1,a,1x,a,a1,1x,a4)') "<",trim(mycall), & - trim(hiscall),">",rpt(nrxrpt) - return - elseif(bswl .and. nhammd.le.4 .and. cord.lt.0.65 .and. nrxrpt.ge.7 ) then - do i=1,nrecent - do j=i+1,nrecent - if( nrxhash .eq. nhasharray(i,j) ) then - nsuccess=2 - write(msgreceived,'(a1,a,1x,a,a1,1x,a4)') "<",trim(recent_calls(i)), & - trim(recent_calls(j)),">",rpt(nrxrpt) -!write(*,*) 'decodeframe 2',nbadsync,nhammd,cord,nrxhash,nrxrpt,ihash,xsnr,sigma - elseif( nrxhash .eq. nhasharray(j,i) ) then - nsuccess=2 - write(msgreceived,'(a1,a,1x,a,a1,1x,a4)') "<",trim(recent_calls(j)), & - trim(recent_calls(i)),">",rpt(nrxrpt) -!write(*,*) 'decodeframe 3',nbadsync,nhammd,cord,nrxhash,nrxrpt,ihash,xsnr,sigma - endif - enddo - enddo - if(nsuccess.eq.0) then - nsuccess=3 -!write(*,*) 'decodeframe 4',bswl,nbadsync,nhammd,cord,nrxhash,nrxrpt,ihash,xsnr,sigma,nsuccess - write(msgreceived,'(a1,i4.4,a1,1x,a4)') "<",nrxhash,">",rpt(nrxrpt) - endif - endif - endif - - return -end subroutine msk40decodeframe diff --git a/lib/msk40spd.f90 b/lib/msk40spd.f90 deleted file mode 100644 index c8af1a4..0000000 --- a/lib/msk40spd.f90 +++ /dev/null @@ -1,199 +0,0 @@ -subroutine msk40spd(cbig,n,ntol,mycall,hiscall,bswl,nhasharray,recent_calls, & - nrecent,nsuccess,msgreceived,fc,fret,tret,navg) -! msk40 short-ping-decoder - - use timer_module, only: timer - - parameter (NSPM=240, MAXSTEPS=150, NFFT=NSPM, MAXCAND=5, NPATTERNS=6) - character*6 mycall,hiscall - character*22 msgreceived - character*12 recent_calls(nrecent) - complex cbig(n) - complex cdat(3*NSPM) !Analytic signal - complex c(NSPM) - complex ct(NSPM) - complex ctmp(NFFT) - integer, dimension(1) :: iloc - integer indices(MAXSTEPS) - integer npkloc(10) - integer navpatterns(3,NPATTERNS) - integer navmask(3) - integer nstart(MAXCAND) - integer nhasharray(nrecent,nrecent) - logical ismask(NFFT) - logical*1 bswl - real detmet(-2:MAXSTEPS+3) - real detmet2(-2:MAXSTEPS+3) - real detfer(MAXSTEPS) - real rcw(12) - real ferrs(MAXCAND) - real snrs(MAXCAND) - real tonespec(NFFT) - real tpat(NPATTERNS) - real*8 dt, df, fs, pi, twopi - logical first - data first/.true./ - data navpatterns/ & - 0,1,0, & - 1,0,0, & - 0,0,1, & - 1,1,0, & - 0,1,1, & - 1,1,1/ - data tpat/1.5,0.5,2.5,1.0,2.0,1.5/ - save df,first,fs,pi,twopi,dt,tframe,rcw - - if(first) then - nmatchedfilter=1 -! define half-sine pulse and raised-cosine edge window - pi=4d0*datan(1d0) - twopi=8d0*datan(1d0) - fs=12000.0 - dt=1.0/fs - df=fs/NFFT - tframe=NSPM/fs - - do i=1,12 - angle=(i-1)*pi/12.0 - rcw(i)=(1-cos(angle))/2 - enddo - - first=.false. - endif - - - ! fill the detmet, detferr arrays - nstep=(n-NSPM)/60 ! 20ms/4=5ms steps - detmet=0 - detmet2=0 - detfer=-999.99 - nfhi=2*(fc+500) - nflo=2*(fc-500) - ihlo=nint((nfhi-2*ntol)/df)+1 - ihhi=nint((nfhi+2*ntol)/df)+1 - illo=nint((nflo-2*ntol)/df)+1 - ilhi=nint((nflo+2*ntol)/df)+1 - i2000=nint(nflo/df)+1 - i4000=nint(nfhi/df)+1 - do istp=1,nstep - ns=1+60*(istp-1) - ne=ns+NSPM-1 - if( ne .gt. n ) exit - ctmp=cmplx(0.0,0.0) - ctmp(1:NSPM)=cbig(ns:ne) - -! Coarse carrier frequency sync - seek tones at 2000 Hz and 4000 Hz in -! squared signal spectrum. - - ctmp=ctmp**2 - ctmp(1:12)=ctmp(1:12)*rcw - ctmp(NSPM-11:NSPM)=ctmp(NSPM-11:NSPM)*rcw(12:1:-1) - call four2a(ctmp,NFFT,1,-1,1) - tonespec=abs(ctmp)**2 - - ismask=.false. - ismask(ihlo:ihhi)=.true. ! high tone search window - iloc=maxloc(tonespec,ismask) - ihpk=iloc(1) - deltah=-real( (ctmp(ihpk-1)-ctmp(ihpk+1)) / (2*ctmp(ihpk)-ctmp(ihpk-1)-ctmp(ihpk+1)) ) - ah=tonespec(ihpk) - ahavp=(sum(tonespec,ismask)-ah)/count(ismask) - trath=ah/(ahavp+0.01) - ismask=.false. - ismask(illo:ilhi)=.true. ! window for low tone - iloc=maxloc(tonespec,ismask) - ilpk=iloc(1) - deltal=-real( (ctmp(ilpk-1)-ctmp(ilpk+1)) / (2*ctmp(ilpk)-ctmp(ilpk-1)-ctmp(ilpk+1)) ) - al=tonespec(ilpk) - alavp=(sum(tonespec,ismask)-al)/count(ismask) - tratl=al/(alavp+0.01) - fdiff=(ihpk+deltah-ilpk-deltal)*df - ferrh=(ihpk+deltah-i4000)*df/2.0 - ferrl=(ilpk+deltal-i2000)*df/2.0 - if( ah .ge. al ) then - ferr=ferrh - else - ferr=ferrl - endif - detmet(istp)=max(ah,al) - detmet2(istp)=max(trath,tratl) - detfer(istp)=ferr - enddo ! end of detection-metric and frequency error estimation loop - - call indexx(detmet(1:nstep),nstep,indices) !find median of detection metric vector - xmed=detmet(indices(nstep/4)) - detmet=detmet/xmed ! noise floor of detection metric is 1.0 - ndet=0 - - do ip=1,MAXCAND ! Find candidates - iloc=maxloc(detmet(1:nstep)) - il=iloc(1) - if( (detmet(il) .lt. 3.5) ) exit - if( abs(detfer(il)) .le. ntol ) then - ndet=ndet+1 - nstart(ndet)=1+(il-1)*60+1 - ferrs(ndet)=detfer(il) - snrs(ndet)=12.0*log10(detmet(il))/2-9.0 - endif - detmet(il)=0.0 - enddo - - if( ndet .lt. 3 ) then - do ip=1,MAXCAND-ndet ! Find candidates - iloc=maxloc(detmet2(1:nstep)) - il=iloc(1) - if( (detmet2(il) .lt. 12.0) ) exit - if( abs(detfer(il)) .le. ntol ) then - ndet=ndet+1 - nstart(ndet)=1+(il-1)*60+1 - ferrs(ndet)=detfer(il) - snrs(ndet)=12.0*log10(detmet2(il))/2-9.0 - endif - detmet2(il)=0.0 - enddo - endif - - nsuccess=0 - msgreceived=' ' - npeaks=2 - ntol0=29 - deltaf=7.2 - do icand=1,ndet ! Try to sync/demod/decode each candidate. - ib=max(1,nstart(icand)-NSPM) - ie=ib-1+3*NSPM - if( ie .gt. n ) then - ie=n - ib=ie-3*NSPM+1 - endif - cdat=cbig(ib:ie) - fo=fc+ferrs(icand) - xsnr=snrs(icand) - do iav=1,NPATTERNS - navmask=navpatterns(1:3,iav) - call msk40sync(cdat,3,ntol0,deltaf,navmask,npeaks,fo,fest,npkloc, & - nsyncsuccess,c) - if( nsyncsuccess .eq. 0 ) cycle - - do ipk=1,npeaks - do is=1,3 - ic0=npkloc(ipk) - if( is.eq.2) ic0=max(1,ic0-1) - if( is.eq.3) ic0=min(NSPM,ic0+1) - ct=cshift(c,ic0-1) - call msk40decodeframe(ct,mycall,hiscall,xsnr,bswl,nhasharray, & - recent_calls,nrecent,msgreceived,ndecodesuccess) - if( ndecodesuccess .gt. 0 ) then -!write(*,*) icand, iav, ipk, is, tret, fret, msgreceived - tret=(nstart(icand)+NSPM/2)/fs - fret=fest - navg=sum(navmask) - nsuccess=ndecodesuccess - return - endif - enddo - enddo - enddo - enddo ! candidate loop - - return -end subroutine msk40spd diff --git a/lib/msk40sync.f90 b/lib/msk40sync.f90 deleted file mode 100644 index 5a2ca1e..0000000 --- a/lib/msk40sync.f90 +++ /dev/null @@ -1,103 +0,0 @@ -subroutine msk40sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest, & - npklocs,nsuccess,c) - - !$ use omp_lib - - parameter (NSPM=240) - complex cdat(NSPM*nframes) - complex cdat2(NSPM*nframes,8) - complex c(NSPM) !Coherently averaged complex data - complex cs(NSPM,8) - complex cb(42) !Complex waveform for sync word - - integer s8r(8) - integer iloc(1) - integer npklocs(npeaks) - integer navmask(nframes) ! defines which frames to average - - real cbi(42),cbq(42) - real pkamps(npeaks) - real xcc(0:NSPM-1) - real xccs(0:NSPM-1,8) - real xm(8) - real bf(8) - real pp(12) !Half-sine pulse shape - logical first - data first/.true./ - data s8r/1,0,1,1,0,0,0,1/ - save first,cb,fs,pi,twopi,dt,s8r,pp - - if(first) then - pi=4.0*atan(1.0) - twopi=8.0*atan(1.0) - fs=12000.0 - dt=1.0/fs - - do i=1,12 !Define half-sine pulse - angle=(i-1)*pi/12.0 - pp(i)=sin(angle) - enddo - -! Define the sync word waveforms - s8r=2*s8r-1 - cbq(1:6)=pp(7:12)*s8r(1) - cbq(7:18)=pp*s8r(3) - cbq(19:30)=pp*s8r(5) - cbq(31:42)=pp*s8r(7) - cbi(1:12)=pp*s8r(2) - cbi(13:24)=pp*s8r(4) - cbi(25:36)=pp*s8r(6) - cbi(37:42)=pp(1:6)*s8r(8) - cb=cmplx(cbi,cbq) - - first=.false. - endif - - nfreqs=2*nint(ntol/delf) + 1 - xm=0.0 - bf=0.0 - nthreads=1 - !$ nthreads=min(8,int(OMP_GET_MAX_THREADS(),4)) - nstep=nfreqs/nthreads - - !$OMP PARALLEL NUM_THREADS(nthreads) PRIVATE(id,if1,if2) - id=1 - !$ id=OMP_GET_THREAD_NUM() + 1 !Thread id = 1,2,... - if1=-nint(ntol/delf) + (id-1)*nstep - if2=if1+nstep-1 - if(id.eq.nthreads) if2=nint(ntol/delf) - call msk40_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb, & - cdat2(1,id),xm(id),bf(id),cs(1,id),xccs(1,id)) -! write(73,3002) id,if1,if2,nfreqs,nthreads,bf(id),xm(id) -!3002 format(5i5,2f10.3) - !$OMP END PARALLEL - - xmax=xm(1) - fest=fc+bf(1) - c=cs(1:NSPM,1) - xcc=xccs(0:NSPM-1,1) - if(nthreads.gt.1) then - do i=2,nthreads - if(xm(i).gt.xmax) then - xmax=xm(i) - fest=fc+bf(i) - c=cs(1:NSPM,i) - xcc=xccs(0:NSPM-1,i) - endif - enddo - endif - -! Find npeaks largest peaks - do ipk=1,npeaks - iloc=maxloc(xcc) - ic2=iloc(1) - npklocs(ipk)=ic2 - pkamps(ipk)=xcc(ic2-1) - xcc(max(0,ic2-7):min(NSPM-1,ic2+7))=0.0 - enddo - - nsuccess=0 - if( xmax .ge. 1.3 ) nsuccess=1 - - return -end subroutine msk40sync diff --git a/lib/mskber.f90 b/lib/mskber.f90 deleted file mode 100644 index 4b31127..0000000 --- a/lib/mskber.f90 +++ /dev/null @@ -1,146 +0,0 @@ -program mskber - -! Generate an MSK waveform, pass it through an AWGN channel, apply coherent -! MSK receiver, and count number of errors at each Eb/No. - - parameter (MAXSYM=1000*1000) - parameter (NSPS=5) !Samples per symbol - real ct(-NSPS:NSPS*MAXSYM-1) !cos(pi*t/2T) - real st(-NSPS:NSPS*MAXSYM-1) !sin(pi*t/2T) - real r(0:MAXSYM-1) !Random numbers to set test bits - real xsym(0:MAXSYM-1) !Soft Rx symbols - - complex xt(-NSPS:NSPS*MAXSYM-1) !Complex baseband Tx waveform - complex nt(-NSPS:NSPS*MAXSYM-1) !Generated AWGN channel noise - complex yt(-NSPS:NSPS*MAXSYM-1) !Received signal, yt = xt + fac*nt - complex cwave(-NSPS:NSPS*MAXSYM-1) !Audio waveform, Tx real part - complex z - - integer sym0(0:MAXSYM-1) !Generated test bits - integer sym(0:MAXSYM-1) !Hard-copy received bits - integer sym1(0:7) - - character*12 arg - data sym1/1,1,0,0,0,1,1,1/ - - nargs=iargc() - if(nargs.ne.2) then - print*,'Usage: mskber nsym EbNo' - go to 999 - endif - call getarg(1,arg) - read(arg,*) nsym - call getarg(2,arg) - read(arg,*) EbNo - - pi=4.0*atan(1.0) - - do i=-NSPS,NSPS*nsym-1 !Define ct, st arrays - t=i*pi/(2.0*NSPS) - ct(i)=cos(t) - st(i)=sin(t) - enddo - fac=1.0/sqrt(float(NSPS)) - - do iEbNo=0,10 !Loop over a range of Eb/No - sym0=0 - call random_number(r) - where(r(0:nsym-1).gt.0.5) sym0(0:nsym-1)=1 !Generate random data bits - if(nsym.eq.8) sym0(0:nsym-1)=sym1 - call mskmod(sym0,nsym,NSPS,ct,st,xt,cwave) !Generate Tx waveform - - do i=-NSPS,NSPS*nsym-1 !Generate Gaussian noise - xx=0.707*gran() - yy=0.707*gran() - nt(i)=cmplx(xx,yy) - enddo - fac_noise=10.0**(-iEbNo/20.0) - if(EbNo.ne.0.0) fac_noise=10.0**(-EbNo/20.0) - yt=xt + fac_noise*nt !Rx signal, with noise - - call mskdemod(yt,nsym,NSPS,ct,st,xsym) !MSK demodulator - - sym=0 - where(xsym.gt.0.0) sym=1 - - if(nsym.le.160 .and. EbNo.ne.0.0) then - write(*,1012) sym0(0:nsym-1) - if(nsym.gt.50) write(*,1012) - write(*,1012) sym(0:nsym-1) -1012 format(50i1) - do i=-nsps,nsps*nsym-1 - phi=i*2.0*pi*1500/12000.0 - z=cwave(i)*cmplx(cos(phi),sin(phi)) !Mix back to baseband - write(51,1014) float(i)/nsps,xt(i),abs(xt(i)),cwave(i),z -1014 format(8f8.4) - enddo - endif - -! Count the hard errors - nerr=count(sym(0:nsym-1).ne.sym0(0:nsym-1)) - thber=0.5*erfc(10.0**(iEbNo/20.0)) - xEbNo=iEbNo - if(EbNo.ne.0.0) xEbNo=EbNo - write(*,1000) xEbNo,thber,float(nerr)/nsym -1000 format(f6.1,2f10.6) - if(EbNo.ne.0.0) exit - enddo - -999 end program mskber - -subroutine mskmod(sym,nsym,nsps,ct,st,xt,cwave) - -! Generate MSK Tx waveform at baseband. - - integer sym(0:nsym-1) !Hard-copy received bits - complex xt(-nsps:nsps*nsym-1) !Complex baseband Tx waveform - complex cwave(-nsps:nsps*nsym-1) !Audio waveform, fc=1500 Hz. - real ct(-nsps:nsps*nsym-1) !cos(pi*t/2T) - real st(-nsps:nsps*nsym-1) !sin(pi*t/2T) - real ai(-nsps:nsps*nsym-1) !Rectangular pulses for even symbols - real aq(-nsps:nsps*nsym-1) !Rectangular pulses for odd symbols - - ai=0. - aq=0. - fac=1.0/sqrt(float(nsps)) - do j=0,nsym-1,2 - ia=(j-1)*nsps - ib=ia+2*nsps-1 - ai(ia:ib)=2*sym(j)-1 !Even bits as rectangular pulses - aq(ia+nsps:ib+nsps)=2*sym(j+1)-1 !Odd bits as rectangular pulses - enddo - xt=fac*cmplx(ai*ct,aq*st) !Baseband Tx waveform - - twopi=8.0*atan(1.0) - do i=-nsps,nsps*nsym-1 - phi=i*twopi*1500/12000.0 - cwave(i)=xt(i)*cmplx(cos(phi),-sin(phi)) - enddo - - return -end subroutine mskmod - -subroutine mskdemod(yt,nsym,nsps,ct,st,xsym) - -! MSK demodulator -! Rx phase must be known and stable; symbol sync must be established. - - complex yt(-nsps:nsps*nsym-1) !Received signal - real ct(-nsps:nsps*nsym-1) !cos(pi*t/2T) - real st(-nsps:nsps*nsym-1) !sin(pi*t/2T) - real xe(-nsps:nsps*nsym-1) !Temp array for received even symbols - real xo(-nsps:nsps*nsym-1) !Temp array for received odd symbols - real xsym(0:nsym-1) !Soft Rx symbols - - iz=nsps*(nsym+1) - xe(-nsps:nsps*nsym-1)=real(yt)*ct !Apply matched filters - xo(-nsps:nsps*nsym-1)=aimag(yt)*st - do j=0,nsym-1,2 - ia=(j-1)*nsps - ib=ia+2*nsps-1 - xsym(j)=sum(xe(ia:ib)) !Integrate over 2 symbol lengths - xsym(j+1)=sum(xo(ia+nsps:ib+nsps)) - enddo - - return -end subroutine mskdemod diff --git a/lib/mskdt.f90 b/lib/mskdt.f90 deleted file mode 100644 index bca8359..0000000 --- a/lib/mskdt.f90 +++ /dev/null @@ -1,78 +0,0 @@ -subroutine mskdt(d,npts,ty,yellow,nyel) - - parameter (NFFT=1024,NH=NFFT/2) - real d(npts) - real x(0:NFFT-1) - real green(703) - real yellow(703) !703 = 30*12000/512 - real ty(703) - real y2(175) - real ty2(175) - integer indx(703) - logical ok - complex c(0:NH) - equivalence (x,c) - - df=12000.0/NFFT - i1=nint(300.0/df) - i2=nint(800.0/df) - i3=nint(2200.0/df) - i4=nint(2700.0/df) - nblks=npts/NH - 1 - - do j=1,nblks - ib=(j+1)*NH - ia=ib-NFFT+1 - x=d(ia:ib) - call four2a(x,NFFT,1,-1,0) !r2c FFT - sqlow=0. - do i=i1,i2 - sqlow=sqlow + real(c(i))**2 + aimag(c(i))**2 - enddo - sqmid=0. - do i=i2,i3 - sqmid=sqmid + real(c(i))**2 + aimag(c(i))**2 - enddo - sqhigh=0. - do i=i3,i4 - sqhigh=sqhigh + real(c(i))**2 + aimag(c(i))**2 - enddo - green(j)=db(sqlow+sqmid+sqhigh) - yellow(j)=db(sqmid/(sqlow+sqhigh)) - ty(j)=j*512.0/12000.0 - enddo - - npct=20 - call pctile(green,nblks,npct,base) - green(1:nblks)=green(1:nblks) - base - 0.3 - call pctile(yellow,nblks,npct,base) - yellow(1:nblks)=yellow(1:nblks) - base - 0.6 - call indexx(yellow,nblks,indx) - - do j=1,nblks/4 - k=indx(nblks+1-j) - ty(j)=ty(k) - yellow(j)=yellow(k) - if(yellow(j).lt.1.5) exit - enddo - nyel=j-1 - k=1 - y2(1)=yellow(1) - ty2(1)=ty(1) - do j=2,nyel - ok=.true. - do i=1,j-1 - if(abs(ty(i)-ty(j)).lt.0.117) ok=.false. - enddo - if(ok) then - k=k+1 - y2(k)=yellow(j) - ty2(k)=ty(j) - endif - enddo - nyel=k - yellow(1:nyel)=y2(1:nyel) - ty(1:nyel)=ty2(1:nyel) - - return -end subroutine mskdt diff --git a/lib/mskrtd.f90 b/lib/mskrtd.f90 deleted file mode 100644 index 5712c71..0000000 --- a/lib/mskrtd.f90 +++ /dev/null @@ -1,257 +0,0 @@ -subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, & - bshmsg,bcontest,btrain,pcoeffs,bswl,datadir,line) - -! Real-time decoder for MSK144. -! Analysis block size = NZ = 7168 samples, t_block = 0.597333 s -! Called from hspec() at half-block increments, about 0.3 s - - parameter (NZ=7168) !Block size - parameter (NSPM=864) !Number of samples per message frame - parameter (NFFT1=8192) !FFT size for making analytic signal - parameter (NPATTERNS=4) !Number of frame averaging patterns to try - parameter (NRECENT=10) !Number of recent calls to remember - parameter (NSHMEM=50) !Number of recent SWL messages to remember - - character*4 decsym !"&" for mskspd or "^" for long averages - character*22 msgreceived !Decoded message - character*22 msglast,msglastswl !Used for dupechecking - character*80 line !Formatted line with UTC dB T Freq Msg - character*12 mycall,hiscall - character*6 mygrid - character*12 recent_calls(NRECENT) - character*22 recent_shmsgs(NSHMEM) - character*512 datadir - - complex cdat(NFFT1) !Analytic signal - complex c(NSPM) !Coherently averaged complex data - complex ct(NSPM) - - integer*2 id2(NZ) !Raw 16-bit data - integer iavmask(8) - integer iavpatterns(8,NPATTERNS) - integer npkloc(10) - integer nhasharray(NRECENT,NRECENT) - integer nsnrlast,nsnrlastswl - - real d(NFFT1) - real pow(8) - real softbits(144) - real xmc(NPATTERNS) - real*8 pcoeffs(5) - - logical*1 bshmsg,bcontest,btrain,bswl - logical*1 first - logical*1 bshdecode - logical*1 seenb4 - logical*1 bflag - logical*1 bvar - - data first/.true./ - data iavpatterns/ & - 1,1,1,1,0,0,0,0, & - 0,0,1,1,1,1,0,0, & - 1,1,1,1,1,0,0,0, & - 1,1,1,1,1,1,1,0/ - data xmc/2.0,4.5,2.5,3.5/ !Used to set time at center of averaging mask - save first,tsec0,nutc00,pnoise,cdat,msglast,msglastswl, & - nsnrlast,nsnrlastswl,recent_calls,nhasharray,recent_shmsgs - - if(first) then - tsec0=tsec - nutc00=nutc0 - pnoise=-1.0 - do i=1,nrecent - recent_calls(i)(1:12)=' ' - enddo - do i=1,nshmem - recent_shmsgs(i)(1:22)=' ' - enddo - msglast=' ' - msglastswl=' ' - nsnrlast=-99 - nsnrlastswl=-99 - first=.false. - endif - - fc=nrxfreq - -! Dupe checking setup - if(nutc00.ne.nutc0 .or. tsec.lt.tsec0) then ! reset dupe checker - msglast=' ' - msglastswl=' ' - nsnrlast=-99 - nsnrlastswl=-99 - nutc00=nutc0 - endif - - tframe=float(NSPM)/12000.0 - line=char(0) - msgreceived=' ' - max_iterations=10 - niterations=0 - d(1:NZ)=id2 - rms=sqrt(sum(d(1:NZ)*d(1:NZ))/NZ) - if(rms.lt.1.0) go to 999 - fac=1.0/rms - d(1:NZ)=fac*d(1:NZ) - d(NZ+1:NFFT1)=0. - bvar=.true. - if( btrain ) bvar=.false. ! if training, turn off rx eq - call analytic(d,NZ,NFFT1,cdat,pcoeffs,bvar) - -! Calculate average power for each frame and for the entire block. -! If decode is successful, largest power will be taken as signal+noise. -! If no decode, entire-block average will be used to update noise estimate. - pmax=-99 - do i=1,8 - ib=(i-1)*NSPM+1 - ie=ib+NSPM-1 - pow(i)=real(dot_product(cdat(ib:ie),cdat(ib:ie)))*rms**2 - pmax=max(pmax,pow(i)) - enddo - pavg=sum(pow)/8.0 - -! Short ping decoder uses squared-signal spectrum to determine where to -! center a 3-frame analysis window and attempts to decode each of the -! 3 frames along with 2- and 3-frame averages. - np=8*NSPM - call msk144spd(cdat,np,ntol,ndecodesuccess,msgreceived,fc,fest,tdec,navg,ct, & - softbits,recent_calls,nrecent) - if(ndecodesuccess.eq.0 .and. (bshmsg.or.bswl)) then - call msk40spd(cdat,np,ntol,mycall(1:6),hiscall(1:6),bswl,nhasharray, & - recent_calls,nrecent,ndecodesuccess,msgreceived,fc,fest,tdec,navg) - endif - if( ndecodesuccess .ge. 1 ) then - tdec=tsec+tdec - ipk=0 - is=0 - goto 900 - endif - -! If short ping decoder doesn't find a decode, -! Fast - short ping decoder only. -! Normal - try 4-frame averages -! Deep - try 4-, 5- and 7-frame averages. - npat=NPATTERNS - if( ndepth .eq. 1 ) npat=0 - if( ndepth .eq. 2 ) npat=2 - do iavg=1,npat - iavmask=iavpatterns(1:8,iavg) - navg=sum(iavmask) - deltaf=10.0/real(navg) ! search increment for frequency sync - npeaks=2 - call msk144sync(cdat(1:8*NSPM),8,ntol,deltaf,iavmask,npeaks,fc, & - fest,npkloc,nsyncsuccess,xmax,c) - if( nsyncsuccess .eq. 0 ) cycle - - do ipk=1,npeaks - do is=1,3 - ic0=npkloc(ipk) - if(is.eq.2) ic0=max(1,ic0-1) - if(is.eq.3) ic0=min(NSPM,ic0+1) - ct=cshift(c,ic0-1) - call msk144decodeframe(ct,softbits,msgreceived,ndecodesuccess, & - recent_calls,nrecent) - if(ndecodesuccess .gt. 0) then - tdec=tsec+xmc(iavg)*tframe - goto 900 - endif - enddo !Slicer dither - enddo !Peak loop - enddo - - - msgreceived=' ' - -! no decode - update noise level used for calculating displayed snr. - if( pnoise .lt. 0 ) then ! initialize noise level - pnoise=pavg - elseif( pavg .gt. pnoise ) then ! noise level is slow to rise - pnoise=0.9*pnoise+0.1*pavg - elseif( pavg .lt. pnoise ) then ! and quick to fall - pnoise=pavg - endif - go to 999 - -900 continue -! Successful decode - estimate snr - if( pnoise .gt. 0.0 ) then - snr0=10.0*log10(pmax/pnoise-1.0) - else - snr0=0.0 - endif - nsnr=nint(snr0) - - bshdecode=.false. - if( msgreceived(1:1) .eq. '<' ) bshdecode=.true. - - if(.not. bshdecode) then - call msk144signalquality(ct,snr0,fest,tdec,softbits,msgreceived,hiscall, & - btrain,datadir,ncorrected,eyeopening,pcoeffs) - endif - - decsym=' & ' - if( btrain ) decsym=' ^ ' - if( msgreceived(1:1).eq.'<') then - ncorrected=0 - eyeopening=0.0 - endif - - if( nsnr .lt. -8 ) nsnr=-8 - if( nsnr .gt. 24 ) nsnr=24 - -! Dupe check. - bflag=ndecodesuccess.eq.1 .and. & - (msgreceived.ne.msglast .or. nsnr.gt.nsnrlast .or. tsec.lt.tsec0) - if(bflag) then - msglast=msgreceived - nsnrlast=nsnr - if(.not. bshdecode) then - call update_hasharray(recent_calls,nrecent,nhasharray) - if(bcontest) call fix_contest_msg(mygrid,msgreceived) - endif - write(line,1020) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived, & - navg,ncorrected,eyeopening,char(0) -1020 format(i6.6,i4,f5.1,i5,a4,a22,i2,i3,f5.1,a1) - elseif(bswl .and. ndecodesuccess.ge.2) then - seenb4=.false. - do i=1,nshmem - if( msgreceived .eq. recent_shmsgs(i) ) then - seenb4=.true. - endif - enddo - call update_recent_shmsgs(msgreceived,recent_shmsgs,nshmem) - bflag=seenb4 .and. & - (msgreceived.ne.msglastswl .or. nsnr.gt.nsnrlastswl .or. tsec.lt.tsec0) & - .and. nsnr.gt.-6 - if(bflag) then - msglastswl=msgreceived - nsnrlastswl=nsnr - write(line,1020) nutc0,nsnr,tdec,nint(fest),decsym,msgreceived, & - navg,ncorrected,eyeopening,char(0) - endif - endif -999 tsec0=tsec - - return -end subroutine mskrtd - -subroutine update_recent_shmsgs(message,msgs,nsize) - character*22 msgs(nsize) - character*22 message - logical*1 seen - - seen=.false. - do i=1,nsize - if( msgs(i) .eq. message ) seen=.true. - enddo - - if( .not. seen ) then - do i=nsize,2,-1 - msgs(i)=msgs(i-1) - enddo - msgs(1)=message - endif - - return -end subroutine update_recent_shmsgs diff --git a/lib/wsprd/nhash.c b/lib/nhash.c similarity index 100% rename from lib/wsprd/nhash.c rename to lib/nhash.c diff --git a/lib/wsprd/nhash.h b/lib/nhash.h similarity index 100% rename from lib/wsprd/nhash.h rename to lib/nhash.h diff --git a/lib/packjt.f90 b/lib/packjt.f90 index faefe7b..de76813 100644 --- a/lib/packjt.f90 +++ b/lib/packjt.f90 @@ -660,8 +660,6 @@ subroutine packbits(dbits,nsymd,m0,sym) msg(4:4).ge.'A' .and. msg(4:4).le.'Z' .and. & msg(5:5).eq.' ') msg='CQ '//msg(3:) - if(bcontest) call fix_contest_msg(mygrid,msg) - if(msg(1:5).eq.'CQ 00' .and. msg(6:6).ge.'0' .and. & msg(6:6).le.'9') msg='CQ '//msg(6:) diff --git a/lib/qra/qra64/Makefile.Win b/lib/qra/qra64/Makefile.Win deleted file mode 100644 index 7bd10c2..0000000 --- a/lib/qra/qra64/Makefile.Win +++ /dev/null @@ -1,30 +0,0 @@ -FC = gfortran -CC = gcc -CFLAGS = -O2 -Wall -I. -D_WIN32 - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: qra64.exe - -OBJS1 = main.o qra64.o -qra64.exe: $(OBJS1) - ${CC} -o qra64.exe $(OBJS1) ../qracodes/libqra64.a -lm - -OBJS2 = qra64sim.o options.o wavhdr.o -qra64sim.exe: $(OBJS2) - ${FC} -o qra64sim.exe $(OBJS2) ../qracodes/libqra64.a -lm - -.PHONY : clean - -clean: - $(RM) *.o qra64.exe qra64sim.exe diff --git a/lib/qra/qra64/fadengauss.c b/lib/qra/qra64/fadengauss.c deleted file mode 100644 index c229626..0000000 --- a/lib/qra/qra64/fadengauss.c +++ /dev/null @@ -1,302 +0,0 @@ -// Gaussian energy fading tables for QRA64 -static const int glen_tab_gauss[64] = { - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 6, - 6, 6, 7, 7, 8, 8, 9, 10, - 10, 11, 12, 13, 14, 15, 17, 18, - 19, 21, 23, 25, 27, 29, 32, 34, - 37, 41, 44, 48, 52, 57, 62, 65 -}; -static const float ggauss1[2] = { -0.0296f, 0.9101f -}; -static const float ggauss2[2] = { -0.0350f, 0.8954f -}; -static const float ggauss3[2] = { -0.0411f, 0.8787f -}; -static const float ggauss4[2] = { -0.0483f, 0.8598f -}; -static const float ggauss5[2] = { -0.0566f, 0.8387f -}; -static const float ggauss6[2] = { -0.0660f, 0.8154f -}; -static const float ggauss7[2] = { -0.0767f, 0.7898f -}; -static const float ggauss8[2] = { -0.0886f, 0.7621f -}; -static const float ggauss9[2] = { -0.1017f, 0.7325f -}; -static const float ggauss10[2] = { -0.1159f, 0.7012f -}; -static const float ggauss11[2] = { -0.1310f, 0.6687f -}; -static const float ggauss12[2] = { -0.1465f, 0.6352f -}; -static const float ggauss13[2] = { -0.1621f, 0.6013f -}; -static const float ggauss14[2] = { -0.1771f, 0.5674f -}; -static const float ggauss15[2] = { -0.1911f, 0.5339f -}; -static const float ggauss16[2] = { -0.2034f, 0.5010f -}; -static const float ggauss17[3] = { -0.0299f, 0.2135f, 0.4690f -}; -static const float ggauss18[3] = { -0.0369f, 0.2212f, 0.4383f -}; -static const float ggauss19[3] = { -0.0454f, 0.2263f, 0.4088f -}; -static const float ggauss20[3] = { -0.0552f, 0.2286f, 0.3806f -}; -static const float ggauss21[3] = { -0.0658f, 0.2284f, 0.3539f -}; -static const float ggauss22[3] = { -0.0766f, 0.2258f, 0.3287f -}; -static const float ggauss23[3] = { -0.0869f, 0.2212f, 0.3049f -}; -static const float ggauss24[3] = { -0.0962f, 0.2148f, 0.2826f -}; -static const float ggauss25[4] = { -0.0351f, 0.1041f, 0.2071f, 0.2616f -}; -static const float ggauss26[4] = { -0.0429f, 0.1102f, 0.1984f, 0.2420f -}; -static const float ggauss27[4] = { -0.0508f, 0.1145f, 0.1890f, 0.2237f -}; -static const float ggauss28[4] = { -0.0582f, 0.1169f, 0.1791f, 0.2067f -}; -static const float ggauss29[5] = { -0.0289f, 0.0648f, 0.1176f, 0.1689f, 0.1908f -}; -static const float ggauss30[5] = { -0.0351f, 0.0703f, 0.1168f, 0.1588f, 0.1760f -}; -static const float ggauss31[5] = { -0.0411f, 0.0745f, 0.1146f, 0.1488f, 0.1623f -}; -static const float ggauss32[6] = { -0.0246f, 0.0466f, 0.0773f, 0.1115f, 0.1390f, 0.1497f -}; -static const float ggauss33[6] = { -0.0297f, 0.0512f, 0.0788f, 0.1075f, 0.1295f, 0.1379f -}; -static const float ggauss34[6] = { -0.0345f, 0.0549f, 0.0791f, 0.1029f, 0.1205f, 0.1270f -}; -static const float ggauss35[7] = { -0.0240f, 0.0387f, 0.0575f, 0.0784f, 0.0979f, 0.1118f, 0.1169f -}; -static const float ggauss36[7] = { -0.0281f, 0.0422f, 0.0590f, 0.0767f, 0.0926f, 0.1037f, 0.1076f -}; -static const float ggauss37[8] = { -0.0212f, 0.0318f, 0.0449f, 0.0596f, 0.0744f, 0.0872f, 0.0960f, 0.0991f -}; -static const float ggauss38[8] = { -0.0247f, 0.0348f, 0.0467f, 0.0593f, 0.0716f, 0.0819f, 0.0887f, 0.0911f -}; -static const float ggauss39[9] = { -0.0199f, 0.0278f, 0.0372f, 0.0476f, 0.0584f, 0.0684f, 0.0766f, 0.0819f, -0.0838f -}; -static const float ggauss40[10] = { -0.0166f, 0.0228f, 0.0303f, 0.0388f, 0.0478f, 0.0568f, 0.0649f, 0.0714f, -0.0756f, 0.0771f -}; -static const float ggauss41[10] = { -0.0193f, 0.0254f, 0.0322f, 0.0397f, 0.0474f, 0.0548f, 0.0613f, 0.0664f, -0.0697f, 0.0709f -}; -static const float ggauss42[11] = { -0.0168f, 0.0217f, 0.0273f, 0.0335f, 0.0399f, 0.0464f, 0.0524f, 0.0576f, -0.0617f, 0.0643f, 0.0651f -}; -static const float ggauss43[12] = { -0.0151f, 0.0191f, 0.0237f, 0.0288f, 0.0342f, 0.0396f, 0.0449f, 0.0498f, -0.0540f, 0.0572f, 0.0592f, 0.0599f -}; -static const float ggauss44[13] = { -0.0138f, 0.0171f, 0.0210f, 0.0252f, 0.0297f, 0.0343f, 0.0388f, 0.0432f, -0.0471f, 0.0504f, 0.0529f, 0.0545f, 0.0550f -}; -static const float ggauss45[14] = { -0.0128f, 0.0157f, 0.0189f, 0.0224f, 0.0261f, 0.0300f, 0.0339f, 0.0377f, -0.0412f, 0.0444f, 0.0470f, 0.0489f, 0.0501f, 0.0505f -}; -static const float ggauss46[15] = { -0.0121f, 0.0146f, 0.0173f, 0.0202f, 0.0234f, 0.0266f, 0.0299f, 0.0332f, -0.0363f, 0.0391f, 0.0416f, 0.0437f, 0.0452f, 0.0461f, 0.0464f -}; -static const float ggauss47[17] = { -0.0097f, 0.0116f, 0.0138f, 0.0161f, 0.0186f, 0.0212f, 0.0239f, 0.0267f, -0.0294f, 0.0321f, 0.0346f, 0.0369f, 0.0389f, 0.0405f, 0.0417f, 0.0424f, -0.0427f -}; -static const float ggauss48[18] = { -0.0096f, 0.0113f, 0.0131f, 0.0151f, 0.0172f, 0.0194f, 0.0217f, 0.0241f, -0.0264f, 0.0287f, 0.0308f, 0.0329f, 0.0347f, 0.0362f, 0.0375f, 0.0384f, -0.0390f, 0.0392f -}; -static const float ggauss49[19] = { -0.0095f, 0.0110f, 0.0126f, 0.0143f, 0.0161f, 0.0180f, 0.0199f, 0.0219f, -0.0239f, 0.0258f, 0.0277f, 0.0294f, 0.0310f, 0.0325f, 0.0337f, 0.0347f, -0.0354f, 0.0358f, 0.0360f -}; -static const float ggauss50[21] = { -0.0083f, 0.0095f, 0.0108f, 0.0122f, 0.0136f, 0.0152f, 0.0168f, 0.0184f, -0.0201f, 0.0217f, 0.0234f, 0.0250f, 0.0265f, 0.0279f, 0.0292f, 0.0303f, -0.0313f, 0.0320f, 0.0326f, 0.0329f, 0.0330f -}; -static const float ggauss51[23] = { -0.0074f, 0.0084f, 0.0095f, 0.0106f, 0.0118f, 0.0131f, 0.0144f, 0.0157f, -0.0171f, 0.0185f, 0.0199f, 0.0213f, 0.0227f, 0.0240f, 0.0252f, 0.0263f, -0.0273f, 0.0282f, 0.0290f, 0.0296f, 0.0300f, 0.0303f, 0.0303f -}; -static const float ggauss52[25] = { -0.0068f, 0.0076f, 0.0085f, 0.0094f, 0.0104f, 0.0115f, 0.0126f, 0.0137f, -0.0149f, 0.0160f, 0.0172f, 0.0184f, 0.0196f, 0.0207f, 0.0218f, 0.0228f, -0.0238f, 0.0247f, 0.0255f, 0.0262f, 0.0268f, 0.0273f, 0.0276f, 0.0278f, -0.0279f -}; -static const float ggauss53[27] = { -0.0063f, 0.0070f, 0.0078f, 0.0086f, 0.0094f, 0.0103f, 0.0112f, 0.0121f, -0.0131f, 0.0141f, 0.0151f, 0.0161f, 0.0170f, 0.0180f, 0.0190f, 0.0199f, -0.0208f, 0.0216f, 0.0224f, 0.0231f, 0.0237f, 0.0243f, 0.0247f, 0.0251f, -0.0254f, 0.0255f, 0.0256f -}; -static const float ggauss54[29] = { -0.0060f, 0.0066f, 0.0072f, 0.0079f, 0.0086f, 0.0093f, 0.0101f, 0.0109f, -0.0117f, 0.0125f, 0.0133f, 0.0142f, 0.0150f, 0.0159f, 0.0167f, 0.0175f, -0.0183f, 0.0190f, 0.0197f, 0.0204f, 0.0210f, 0.0216f, 0.0221f, 0.0225f, -0.0228f, 0.0231f, 0.0233f, 0.0234f, 0.0235f -}; -static const float ggauss55[32] = { -0.0053f, 0.0058f, 0.0063f, 0.0068f, 0.0074f, 0.0080f, 0.0086f, 0.0093f, -0.0099f, 0.0106f, 0.0113f, 0.0120f, 0.0127f, 0.0134f, 0.0141f, 0.0148f, -0.0155f, 0.0162f, 0.0168f, 0.0174f, 0.0180f, 0.0186f, 0.0191f, 0.0196f, -0.0201f, 0.0204f, 0.0208f, 0.0211f, 0.0213f, 0.0214f, 0.0215f, 0.0216f -}; -static const float ggauss56[34] = { -0.0052f, 0.0056f, 0.0060f, 0.0065f, 0.0070f, 0.0075f, 0.0080f, 0.0086f, -0.0091f, 0.0097f, 0.0103f, 0.0109f, 0.0115f, 0.0121f, 0.0127f, 0.0133f, -0.0138f, 0.0144f, 0.0150f, 0.0155f, 0.0161f, 0.0166f, 0.0170f, 0.0175f, -0.0179f, 0.0183f, 0.0186f, 0.0189f, 0.0192f, 0.0194f, 0.0196f, 0.0197f, -0.0198f, 0.0198f -}; -static const float ggauss57[37] = { -0.0047f, 0.0051f, 0.0055f, 0.0058f, 0.0063f, 0.0067f, 0.0071f, 0.0076f, -0.0080f, 0.0085f, 0.0090f, 0.0095f, 0.0100f, 0.0105f, 0.0110f, 0.0115f, -0.0120f, 0.0125f, 0.0130f, 0.0134f, 0.0139f, 0.0144f, 0.0148f, 0.0152f, -0.0156f, 0.0160f, 0.0164f, 0.0167f, 0.0170f, 0.0173f, 0.0175f, 0.0177f, -0.0179f, 0.0180f, 0.0181f, 0.0181f, 0.0182f -}; -static const float ggauss58[41] = { -0.0041f, 0.0044f, 0.0047f, 0.0050f, 0.0054f, 0.0057f, 0.0060f, 0.0064f, -0.0068f, 0.0072f, 0.0076f, 0.0080f, 0.0084f, 0.0088f, 0.0092f, 0.0096f, -0.0101f, 0.0105f, 0.0109f, 0.0113f, 0.0117f, 0.0121f, 0.0125f, 0.0129f, -0.0133f, 0.0137f, 0.0140f, 0.0144f, 0.0147f, 0.0150f, 0.0153f, 0.0155f, -0.0158f, 0.0160f, 0.0162f, 0.0163f, 0.0164f, 0.0165f, 0.0166f, 0.0167f, -0.0167f -}; -static const float ggauss59[44] = { -0.0039f, 0.0042f, 0.0044f, 0.0047f, 0.0050f, 0.0053f, 0.0056f, 0.0059f, -0.0062f, 0.0065f, 0.0068f, 0.0072f, 0.0075f, 0.0079f, 0.0082f, 0.0086f, -0.0089f, 0.0093f, 0.0096f, 0.0100f, 0.0104f, 0.0107f, 0.0110f, 0.0114f, -0.0117f, 0.0120f, 0.0124f, 0.0127f, 0.0130f, 0.0132f, 0.0135f, 0.0138f, -0.0140f, 0.0142f, 0.0144f, 0.0146f, 0.0148f, 0.0149f, 0.0150f, 0.0151f, -0.0152f, 0.0153f, 0.0153f, 0.0153f -}; -static const float ggauss60[48] = { -0.0036f, 0.0038f, 0.0040f, 0.0042f, 0.0044f, 0.0047f, 0.0049f, 0.0052f, -0.0055f, 0.0057f, 0.0060f, 0.0063f, 0.0066f, 0.0068f, 0.0071f, 0.0074f, -0.0077f, 0.0080f, 0.0083f, 0.0086f, 0.0089f, 0.0092f, 0.0095f, 0.0098f, -0.0101f, 0.0104f, 0.0107f, 0.0109f, 0.0112f, 0.0115f, 0.0117f, 0.0120f, -0.0122f, 0.0124f, 0.0126f, 0.0128f, 0.0130f, 0.0132f, 0.0134f, 0.0135f, -0.0136f, 0.0137f, 0.0138f, 0.0139f, 0.0140f, 0.0140f, 0.0140f, 0.0140f -}; -static const float ggauss61[52] = { -0.0033f, 0.0035f, 0.0037f, 0.0039f, 0.0041f, 0.0043f, 0.0045f, 0.0047f, -0.0049f, 0.0051f, 0.0053f, 0.0056f, 0.0058f, 0.0060f, 0.0063f, 0.0065f, -0.0068f, 0.0070f, 0.0073f, 0.0075f, 0.0078f, 0.0080f, 0.0083f, 0.0085f, -0.0088f, 0.0090f, 0.0093f, 0.0095f, 0.0098f, 0.0100f, 0.0102f, 0.0105f, -0.0107f, 0.0109f, 0.0111f, 0.0113f, 0.0115f, 0.0116f, 0.0118f, 0.0120f, -0.0121f, 0.0122f, 0.0124f, 0.0125f, 0.0126f, 0.0126f, 0.0127f, 0.0128f, -0.0128f, 0.0129f, 0.0129f, 0.0129f -}; -static const float ggauss62[57] = { -0.0030f, 0.0031f, 0.0033f, 0.0034f, 0.0036f, 0.0038f, 0.0039f, 0.0041f, -0.0043f, 0.0045f, 0.0047f, 0.0048f, 0.0050f, 0.0052f, 0.0054f, 0.0056f, -0.0058f, 0.0060f, 0.0063f, 0.0065f, 0.0067f, 0.0069f, 0.0071f, 0.0073f, -0.0075f, 0.0077f, 0.0080f, 0.0082f, 0.0084f, 0.0086f, 0.0088f, 0.0090f, -0.0092f, 0.0094f, 0.0096f, 0.0097f, 0.0099f, 0.0101f, 0.0103f, 0.0104f, -0.0106f, 0.0107f, 0.0108f, 0.0110f, 0.0111f, 0.0112f, 0.0113f, 0.0114f, -0.0115f, 0.0116f, 0.0116f, 0.0117f, 0.0117f, 0.0118f, 0.0118f, 0.0118f, -0.0118f -}; -static const float ggauss63[62] = { -0.0027f, 0.0029f, 0.0030f, 0.0031f, 0.0032f, 0.0034f, 0.0035f, 0.0037f, -0.0038f, 0.0040f, 0.0041f, 0.0043f, 0.0045f, 0.0046f, 0.0048f, 0.0049f, -0.0051f, 0.0053f, 0.0055f, 0.0056f, 0.0058f, 0.0060f, 0.0062f, 0.0063f, -0.0065f, 0.0067f, 0.0069f, 0.0071f, 0.0072f, 0.0074f, 0.0076f, 0.0078f, -0.0079f, 0.0081f, 0.0083f, 0.0084f, 0.0086f, 0.0088f, 0.0089f, 0.0091f, -0.0092f, 0.0094f, 0.0095f, 0.0096f, 0.0098f, 0.0099f, 0.0100f, 0.0101f, -0.0102f, 0.0103f, 0.0104f, 0.0105f, 0.0105f, 0.0106f, 0.0107f, 0.0107f, -0.0108f, 0.0108f, 0.0108f, 0.0108f, 0.0109f, 0.0109f -}; -static const float ggauss64[65] = { -0.0028f, 0.0029f, 0.0030f, 0.0031f, 0.0032f, 0.0034f, 0.0035f, 0.0036f, -0.0037f, 0.0039f, 0.0040f, 0.0041f, 0.0043f, 0.0044f, 0.0046f, 0.0047f, -0.0048f, 0.0050f, 0.0051f, 0.0053f, 0.0054f, 0.0056f, 0.0057f, 0.0059f, -0.0060f, 0.0062f, 0.0063f, 0.0065f, 0.0066f, 0.0068f, 0.0069f, 0.0071f, -0.0072f, 0.0074f, 0.0075f, 0.0077f, 0.0078f, 0.0079f, 0.0081f, 0.0082f, -0.0083f, 0.0084f, 0.0086f, 0.0087f, 0.0088f, 0.0089f, 0.0090f, 0.0091f, -0.0092f, 0.0093f, 0.0094f, 0.0094f, 0.0095f, 0.0096f, 0.0097f, 0.0097f, -0.0098f, 0.0098f, 0.0099f, 0.0099f, 0.0099f, 0.0099f, 0.0100f, 0.0100f, -0.0100f -}; -static const float *gptr_tab_gauss[64] = { -ggauss1, ggauss2, ggauss3, ggauss4, -ggauss5, ggauss6, ggauss7, ggauss8, -ggauss9, ggauss10, ggauss11, ggauss12, -ggauss13, ggauss14, ggauss15, ggauss16, -ggauss17, ggauss18, ggauss19, ggauss20, -ggauss21, ggauss22, ggauss23, ggauss24, -ggauss25, ggauss26, ggauss27, ggauss28, -ggauss29, ggauss30, ggauss31, ggauss32, -ggauss33, ggauss34, ggauss35, ggauss36, -ggauss37, ggauss38, ggauss39, ggauss40, -ggauss41, ggauss42, ggauss43, ggauss44, -ggauss45, ggauss46, ggauss47, ggauss48, -ggauss49, ggauss50, ggauss51, ggauss52, -ggauss53, ggauss54, ggauss55, ggauss56, -ggauss57, ggauss58, ggauss59, ggauss60, -ggauss61, ggauss62, ggauss63, ggauss64 -}; diff --git a/lib/qra/qra64/fadenlorentz.c b/lib/qra/qra64/fadenlorentz.c deleted file mode 100644 index 673a890..0000000 --- a/lib/qra/qra64/fadenlorentz.c +++ /dev/null @@ -1,304 +0,0 @@ -// Lorentz energy fading tables for QRA64 -static const int glen_tab_lorentz[64] = { - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 3, - 3, 3, 3, 3, 3, 4, 4, 4, - 4, 4, 5, 5, 5, 5, 6, 6, - 7, 7, 7, 8, 8, 9, 10, 10, - 11, 12, 13, 14, 15, 16, 17, 19, - 20, 22, 23, 25, 27, 30, 32, 35, - 38, 41, 45, 49, 53, 57, 62, 65 -}; -static const float glorentz1[2] = { -0.0214f, 0.9107f -}; -static const float glorentz2[2] = { -0.0244f, 0.9030f -}; -static const float glorentz3[2] = { -0.0280f, 0.8950f -}; -static const float glorentz4[2] = { -0.0314f, 0.8865f -}; -static const float glorentz5[2] = { -0.0349f, 0.8773f -}; -static const float glorentz6[2] = { -0.0388f, 0.8675f -}; -static const float glorentz7[2] = { -0.0426f, 0.8571f -}; -static const float glorentz8[2] = { -0.0463f, 0.8459f -}; -static const float glorentz9[2] = { -0.0500f, 0.8339f -}; -static const float glorentz10[2] = { -0.0538f, 0.8210f -}; -static const float glorentz11[2] = { -0.0579f, 0.8074f -}; -static const float glorentz12[2] = { -0.0622f, 0.7930f -}; -static const float glorentz13[2] = { -0.0668f, 0.7777f -}; -static const float glorentz14[2] = { -0.0715f, 0.7616f -}; -static const float glorentz15[3] = { -0.0196f, 0.0765f, 0.7445f -}; -static const float glorentz16[3] = { -0.0210f, 0.0816f, 0.7267f -}; -static const float glorentz17[3] = { -0.0226f, 0.0870f, 0.7080f -}; -static const float glorentz18[3] = { -0.0242f, 0.0925f, 0.6885f -}; -static const float glorentz19[3] = { -0.0259f, 0.0981f, 0.6682f -}; -static const float glorentz20[3] = { -0.0277f, 0.1039f, 0.6472f -}; -static const float glorentz21[3] = { -0.0296f, 0.1097f, 0.6255f -}; -static const float glorentz22[4] = { -0.0143f, 0.0316f, 0.1155f, 0.6031f -}; -static const float glorentz23[4] = { -0.0153f, 0.0337f, 0.1213f, 0.5803f -}; -static const float glorentz24[4] = { -0.0163f, 0.0358f, 0.1270f, 0.5570f -}; -static const float glorentz25[4] = { -0.0174f, 0.0381f, 0.1325f, 0.5333f -}; -static const float glorentz26[4] = { -0.0186f, 0.0405f, 0.1378f, 0.5095f -}; -static const float glorentz27[5] = { -0.0113f, 0.0198f, 0.0429f, 0.1428f, 0.4855f -}; -static const float glorentz28[5] = { -0.0120f, 0.0211f, 0.0455f, 0.1473f, 0.4615f -}; -static const float glorentz29[5] = { -0.0129f, 0.0225f, 0.0481f, 0.1514f, 0.4376f -}; -static const float glorentz30[5] = { -0.0137f, 0.0239f, 0.0508f, 0.1549f, 0.4140f -}; -static const float glorentz31[6] = { -0.0095f, 0.0147f, 0.0254f, 0.0536f, 0.1578f, 0.3907f -}; -static const float glorentz32[6] = { -0.0101f, 0.0156f, 0.0270f, 0.0564f, 0.1600f, 0.3680f -}; -static const float glorentz33[7] = { -0.0076f, 0.0109f, 0.0167f, 0.0287f, 0.0592f, 0.1614f, 0.3458f -}; -static const float glorentz34[7] = { -0.0081f, 0.0116f, 0.0178f, 0.0305f, 0.0621f, 0.1620f, 0.3243f -}; -static const float glorentz35[7] = { -0.0087f, 0.0124f, 0.0190f, 0.0324f, 0.0649f, 0.1618f, 0.3035f -}; -static const float glorentz36[8] = { -0.0069f, 0.0093f, 0.0133f, 0.0203f, 0.0343f, 0.0676f, 0.1607f, 0.2836f -}; -static const float glorentz37[8] = { -0.0074f, 0.0100f, 0.0142f, 0.0216f, 0.0362f, 0.0702f, 0.1588f, 0.2645f -}; -static const float glorentz38[9] = { -0.0061f, 0.0080f, 0.0107f, 0.0152f, 0.0230f, 0.0382f, 0.0726f, 0.1561f, -0.2464f -}; -static const float glorentz39[10] = { -0.0052f, 0.0066f, 0.0086f, 0.0115f, 0.0162f, 0.0244f, 0.0402f, 0.0747f, -0.1526f, 0.2291f -}; -static const float glorentz40[10] = { -0.0056f, 0.0071f, 0.0092f, 0.0123f, 0.0173f, 0.0259f, 0.0422f, 0.0766f, -0.1484f, 0.2128f -}; -static const float glorentz41[11] = { -0.0049f, 0.0061f, 0.0076f, 0.0098f, 0.0132f, 0.0184f, 0.0274f, 0.0441f, -0.0780f, 0.1437f, 0.1975f -}; -static const float glorentz42[12] = { -0.0044f, 0.0053f, 0.0065f, 0.0082f, 0.0106f, 0.0141f, 0.0196f, 0.0290f, -0.0460f, 0.0791f, 0.1384f, 0.1831f -}; -static const float glorentz43[13] = { -0.0040f, 0.0048f, 0.0057f, 0.0070f, 0.0088f, 0.0113f, 0.0150f, 0.0209f, -0.0305f, 0.0477f, 0.0797f, 0.1327f, 0.1695f -}; -static const float glorentz44[14] = { -0.0037f, 0.0043f, 0.0051f, 0.0062f, 0.0075f, 0.0094f, 0.0121f, 0.0160f, -0.0221f, 0.0321f, 0.0493f, 0.0799f, 0.1267f, 0.1568f -}; -static const float glorentz45[15] = { -0.0035f, 0.0040f, 0.0047f, 0.0055f, 0.0066f, 0.0081f, 0.0101f, 0.0129f, -0.0171f, 0.0234f, 0.0335f, 0.0506f, 0.0795f, 0.1204f, 0.1450f -}; -static const float glorentz46[16] = { -0.0033f, 0.0037f, 0.0043f, 0.0050f, 0.0059f, 0.0071f, 0.0087f, 0.0108f, -0.0138f, 0.0181f, 0.0246f, 0.0349f, 0.0517f, 0.0786f, 0.1141f, 0.1340f -}; -static const float glorentz47[17] = { -0.0031f, 0.0035f, 0.0040f, 0.0046f, 0.0054f, 0.0064f, 0.0077f, 0.0093f, -0.0116f, 0.0147f, 0.0192f, 0.0259f, 0.0362f, 0.0525f, 0.0773f, 0.1076f, -0.1237f -}; -static const float glorentz48[19] = { -0.0027f, 0.0030f, 0.0034f, 0.0038f, 0.0043f, 0.0050f, 0.0058f, 0.0069f, -0.0082f, 0.0100f, 0.0123f, 0.0156f, 0.0203f, 0.0271f, 0.0374f, 0.0530f, -0.0755f, 0.1013f, 0.1141f -}; -static const float glorentz49[20] = { -0.0026f, 0.0029f, 0.0032f, 0.0036f, 0.0041f, 0.0047f, 0.0054f, 0.0063f, -0.0074f, 0.0088f, 0.0107f, 0.0131f, 0.0165f, 0.0213f, 0.0282f, 0.0383f, -0.0531f, 0.0734f, 0.0950f, 0.1053f -}; -static const float glorentz50[22] = { -0.0023f, 0.0025f, 0.0028f, 0.0031f, 0.0035f, 0.0039f, 0.0044f, 0.0050f, -0.0058f, 0.0067f, 0.0079f, 0.0094f, 0.0114f, 0.0139f, 0.0175f, 0.0223f, -0.0292f, 0.0391f, 0.0529f, 0.0709f, 0.0889f, 0.0971f -}; -static const float glorentz51[23] = { -0.0023f, 0.0025f, 0.0027f, 0.0030f, 0.0034f, 0.0037f, 0.0042f, 0.0048f, -0.0054f, 0.0062f, 0.0072f, 0.0085f, 0.0100f, 0.0121f, 0.0148f, 0.0184f, -0.0233f, 0.0301f, 0.0396f, 0.0524f, 0.0681f, 0.0829f, 0.0894f -}; -static const float glorentz52[25] = { -0.0021f, 0.0023f, 0.0025f, 0.0027f, 0.0030f, 0.0033f, 0.0036f, 0.0040f, -0.0045f, 0.0051f, 0.0058f, 0.0067f, 0.0077f, 0.0090f, 0.0107f, 0.0128f, -0.0156f, 0.0192f, 0.0242f, 0.0308f, 0.0398f, 0.0515f, 0.0650f, 0.0772f, -0.0824f -}; -static const float glorentz53[27] = { -0.0019f, 0.0021f, 0.0022f, 0.0024f, 0.0027f, 0.0029f, 0.0032f, 0.0035f, -0.0039f, 0.0044f, 0.0049f, 0.0055f, 0.0062f, 0.0072f, 0.0083f, 0.0096f, -0.0113f, 0.0135f, 0.0164f, 0.0201f, 0.0249f, 0.0314f, 0.0398f, 0.0502f, -0.0619f, 0.0718f, 0.0759f -}; -static const float glorentz54[30] = { -0.0017f, 0.0018f, 0.0019f, 0.0021f, 0.0022f, 0.0024f, 0.0026f, 0.0029f, -0.0031f, 0.0034f, 0.0038f, 0.0042f, 0.0047f, 0.0052f, 0.0059f, 0.0067f, -0.0076f, 0.0088f, 0.0102f, 0.0120f, 0.0143f, 0.0171f, 0.0208f, 0.0256f, -0.0317f, 0.0395f, 0.0488f, 0.0586f, 0.0666f, 0.0698f -}; -static const float glorentz55[32] = { -0.0016f, 0.0017f, 0.0018f, 0.0019f, 0.0021f, 0.0022f, 0.0024f, 0.0026f, -0.0028f, 0.0031f, 0.0034f, 0.0037f, 0.0041f, 0.0045f, 0.0050f, 0.0056f, -0.0063f, 0.0071f, 0.0081f, 0.0094f, 0.0108f, 0.0127f, 0.0149f, 0.0178f, -0.0214f, 0.0261f, 0.0318f, 0.0389f, 0.0470f, 0.0553f, 0.0618f, 0.0643f -}; -static const float glorentz56[35] = { -0.0014f, 0.0015f, 0.0016f, 0.0017f, 0.0018f, 0.0020f, 0.0021f, 0.0023f, -0.0024f, 0.0026f, 0.0028f, 0.0031f, 0.0033f, 0.0036f, 0.0040f, 0.0044f, -0.0049f, 0.0054f, 0.0060f, 0.0067f, 0.0076f, 0.0087f, 0.0099f, 0.0114f, -0.0133f, 0.0156f, 0.0184f, 0.0220f, 0.0264f, 0.0318f, 0.0381f, 0.0451f, -0.0520f, 0.0572f, 0.0591f -}; -static const float glorentz57[38] = { -0.0013f, 0.0014f, 0.0015f, 0.0016f, 0.0017f, 0.0018f, 0.0019f, 0.0020f, -0.0021f, 0.0023f, 0.0024f, 0.0026f, 0.0028f, 0.0031f, 0.0033f, 0.0036f, -0.0039f, 0.0043f, 0.0047f, 0.0052f, 0.0058f, 0.0064f, 0.0072f, 0.0081f, -0.0092f, 0.0104f, 0.0120f, 0.0139f, 0.0162f, 0.0190f, 0.0224f, 0.0265f, -0.0315f, 0.0371f, 0.0431f, 0.0487f, 0.0529f, 0.0544f -}; -static const float glorentz58[41] = { -0.0012f, 0.0013f, 0.0014f, 0.0014f, 0.0015f, 0.0016f, 0.0017f, 0.0018f, -0.0019f, 0.0020f, 0.0022f, 0.0023f, 0.0025f, 0.0026f, 0.0028f, 0.0030f, -0.0033f, 0.0036f, 0.0039f, 0.0042f, 0.0046f, 0.0050f, 0.0056f, 0.0061f, -0.0068f, 0.0076f, 0.0086f, 0.0097f, 0.0110f, 0.0125f, 0.0144f, 0.0167f, -0.0194f, 0.0226f, 0.0265f, 0.0309f, 0.0359f, 0.0409f, 0.0455f, 0.0488f, -0.0500f -}; -static const float glorentz59[45] = { -0.0011f, 0.0012f, 0.0012f, 0.0013f, 0.0013f, 0.0014f, 0.0015f, 0.0016f, -0.0016f, 0.0017f, 0.0018f, 0.0019f, 0.0021f, 0.0022f, 0.0023f, 0.0025f, -0.0026f, 0.0028f, 0.0030f, 0.0033f, 0.0035f, 0.0038f, 0.0041f, 0.0045f, -0.0049f, 0.0054f, 0.0059f, 0.0065f, 0.0072f, 0.0081f, 0.0090f, 0.0102f, -0.0115f, 0.0130f, 0.0149f, 0.0171f, 0.0197f, 0.0227f, 0.0263f, 0.0302f, -0.0345f, 0.0387f, 0.0425f, 0.0451f, 0.0460f -}; -static const float glorentz60[49] = { -0.0010f, 0.0011f, 0.0011f, 0.0012f, 0.0012f, 0.0013f, 0.0013f, 0.0014f, -0.0014f, 0.0015f, 0.0016f, 0.0017f, 0.0018f, 0.0019f, 0.0020f, 0.0021f, -0.0022f, 0.0024f, 0.0025f, 0.0027f, 0.0028f, 0.0030f, 0.0033f, 0.0035f, -0.0038f, 0.0041f, 0.0044f, 0.0048f, 0.0052f, 0.0057f, 0.0063f, 0.0069f, -0.0077f, 0.0085f, 0.0095f, 0.0106f, 0.0119f, 0.0135f, 0.0153f, 0.0174f, -0.0199f, 0.0227f, 0.0259f, 0.0293f, 0.0330f, 0.0365f, 0.0395f, 0.0415f, -0.0423f -}; -static const float glorentz61[53] = { -0.0009f, 0.0010f, 0.0010f, 0.0011f, 0.0011f, 0.0011f, 0.0012f, 0.0012f, -0.0013f, 0.0014f, 0.0014f, 0.0015f, 0.0016f, 0.0016f, 0.0017f, 0.0018f, -0.0019f, 0.0020f, 0.0021f, 0.0023f, 0.0024f, 0.0025f, 0.0027f, 0.0029f, -0.0031f, 0.0033f, 0.0035f, 0.0038f, 0.0041f, 0.0044f, 0.0047f, 0.0051f, -0.0056f, 0.0061f, 0.0067f, 0.0073f, 0.0081f, 0.0089f, 0.0099f, 0.0110f, -0.0124f, 0.0139f, 0.0156f, 0.0176f, 0.0199f, 0.0225f, 0.0253f, 0.0283f, -0.0314f, 0.0343f, 0.0367f, 0.0383f, 0.0389f -}; -static const float glorentz62[57] = { -0.0009f, 0.0009f, 0.0009f, 0.0010f, 0.0010f, 0.0011f, 0.0011f, 0.0011f, -0.0012f, 0.0012f, 0.0013f, 0.0013f, 0.0014f, 0.0015f, 0.0015f, 0.0016f, -0.0017f, 0.0018f, 0.0019f, 0.0020f, 0.0021f, 0.0022f, 0.0023f, 0.0024f, -0.0026f, 0.0027f, 0.0029f, 0.0031f, 0.0033f, 0.0035f, 0.0038f, 0.0040f, -0.0043f, 0.0047f, 0.0050f, 0.0055f, 0.0059f, 0.0064f, 0.0070f, 0.0077f, -0.0085f, 0.0093f, 0.0103f, 0.0114f, 0.0127f, 0.0142f, 0.0158f, 0.0177f, -0.0198f, 0.0221f, 0.0246f, 0.0272f, 0.0297f, 0.0321f, 0.0340f, 0.0353f, -0.0357f -}; -static const float glorentz63[62] = { -0.0008f, 0.0008f, 0.0009f, 0.0009f, 0.0009f, 0.0010f, 0.0010f, 0.0010f, -0.0011f, 0.0011f, 0.0011f, 0.0012f, 0.0012f, 0.0013f, 0.0013f, 0.0014f, -0.0015f, 0.0015f, 0.0016f, 0.0017f, 0.0017f, 0.0018f, 0.0019f, 0.0020f, -0.0021f, 0.0022f, 0.0023f, 0.0025f, 0.0026f, 0.0028f, 0.0029f, 0.0031f, -0.0033f, 0.0035f, 0.0038f, 0.0040f, 0.0043f, 0.0046f, 0.0050f, 0.0053f, -0.0058f, 0.0062f, 0.0068f, 0.0074f, 0.0081f, 0.0088f, 0.0097f, 0.0106f, -0.0117f, 0.0130f, 0.0144f, 0.0159f, 0.0176f, 0.0195f, 0.0216f, 0.0237f, -0.0259f, 0.0280f, 0.0299f, 0.0315f, 0.0325f, 0.0328f -}; -static const float glorentz64[65] = { -0.0008f, 0.0008f, 0.0008f, 0.0009f, 0.0009f, 0.0009f, 0.0010f, 0.0010f, -0.0010f, 0.0011f, 0.0011f, 0.0012f, 0.0012f, 0.0012f, 0.0013f, 0.0013f, -0.0014f, 0.0014f, 0.0015f, 0.0016f, 0.0016f, 0.0017f, 0.0018f, 0.0019f, -0.0020f, 0.0021f, 0.0022f, 0.0023f, 0.0024f, 0.0025f, 0.0027f, 0.0028f, -0.0030f, 0.0031f, 0.0033f, 0.0035f, 0.0038f, 0.0040f, 0.0043f, 0.0046f, -0.0049f, 0.0052f, 0.0056f, 0.0061f, 0.0066f, 0.0071f, 0.0077f, 0.0084f, -0.0091f, 0.0100f, 0.0109f, 0.0120f, 0.0132f, 0.0145f, 0.0159f, 0.0175f, -0.0192f, 0.0209f, 0.0228f, 0.0246f, 0.0264f, 0.0279f, 0.0291f, 0.0299f, -0.0301f -}; -static const float *gptr_tab_lorentz[64] = { -glorentz1, glorentz2, glorentz3, glorentz4, -glorentz5, glorentz6, glorentz7, glorentz8, -glorentz9, glorentz10, glorentz11, glorentz12, -glorentz13, glorentz14, glorentz15, glorentz16, -glorentz17, glorentz18, glorentz19, glorentz20, -glorentz21, glorentz22, glorentz23, glorentz24, -glorentz25, glorentz26, glorentz27, glorentz28, -glorentz29, glorentz30, glorentz31, glorentz32, -glorentz33, glorentz34, glorentz35, glorentz36, -glorentz37, glorentz38, glorentz39, glorentz40, -glorentz41, glorentz42, glorentz43, glorentz44, -glorentz45, glorentz46, glorentz47, glorentz48, -glorentz49, glorentz50, glorentz51, glorentz52, -glorentz53, glorentz54, glorentz55, glorentz56, -glorentz57, glorentz58, glorentz59, glorentz60, -glorentz61, glorentz62, glorentz63, glorentz64 -}; diff --git a/lib/qra/qra64/main.c b/lib/qra/qra64/main.c deleted file mode 100644 index b685fd3..0000000 --- a/lib/qra/qra64/main.c +++ /dev/null @@ -1,746 +0,0 @@ -/* -main.c -QRA64 mode encode/decode tests - -(c) 2016 - Nico Palermo, IV3NWV - -Thanks to Andrea Montefusco IW0HDV for his help on adapting the sources -to OSs other than MS Windows - ------------------------------------------------------------------------------- -This file is part of the qracodes project, a Forward Error Control -encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. - -Files in this package: - main.c - this file - qra64.c/.h - qra64 mode encode/decoding functions - - ../qracodes/normrnd.{c,h} - random gaussian number generator - ../qracodes/npfwht.{c,h} - Fast Walsh-Hadamard Transforms - ../qracodes/pdmath.{c,h} - Elementary math on probability distributions - ../qracodes/qra12_63_64_irr_b.{c,h} - Tables for a QRA(12,63) irregular RA - code over GF(64) - ../qracodes/qra13_64_64_irr_e.{c,h} - Tables for a QRA(13,64) irregular RA - code over GF(64) - ../qracodes/qracodes.{c,h} - QRA codes encoding/decoding functions - -------------------------------------------------------------------------------- - - qracodes is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - qracodes is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with qracodes source distribution. - If not, see . - ------------------------------------------------------------------------------ - -The code used by the QRA64 mode is the code: QRA13_64_64_IRR_E: K=13 -N=64 Q=64 irregular QRA code (defined in qra13_64_64_irr_e.{h,c}). - -This code has been designed to include a CRC as the 13th information -symbol and improve the code UER (Undetected Error Rate). The CRC -symbol is not sent along the channel (the codes are punctured) and the -resulting code is still a (12,63) code with an effective code rate of -R = 12/63. -*/ - -// OS dependent defines and includes ------------------------------------------ - -#if _WIN32 // note the underscore: without it, it's not msdn official! -// Windows (x64 and x86) -#include // required only for GetTickCount(...) -#include // _beginthread -#endif - -#if __linux__ -#include -#include - -unsigned GetTickCount(void) { - struct timespec ts; - unsigned theTick = 0U; - clock_gettime( CLOCK_REALTIME, &ts ); - theTick = ts.tv_nsec / 1000000; - theTick += ts.tv_sec * 1000; - return theTick; -} -#endif - -#if __APPLE__ -#endif - -#include -#include -#include - -#include "qra64.h" -#include "../qracodes/normrnd.h" // gaussian numbers generator - -// ---------------------------------------------------------------------------- - -// channel types -#define CHANNEL_AWGN 0 -#define CHANNEL_RAYLEIGH 1 -#define CHANNEL_FASTFADE 2 - -#define JT65_SNR_EBNO_OFFSET 29.1f // with the synch used in JT65 -#define QRA64_SNR_EBNO_OFFSET 31.0f // with the costas array synch - -void printwordd(char *msg, int *x, int size) -{ - int k; - printf("\n%s ",msg); - for (k=0;k-15) - if (channel_type == CHANNEL_AWGN) - for (k=0;k=0) { // decoded - printf("K1JT rx: received with apcode=%d %s\n",rc, decode_type[rc]); - -// Step 2a: K1JT replies to IV3NWV (with no grid) - printf("K1JT tx: IV3NWV K1JT\n"); - encodemsg_jt65(x,CALL_IV3NWV,CALL_K1JT, GRID_BLANK); - qra64_encode(codec_k1jt, y, x); - rx = mfskchannel(y,channel_type,EbNodB); - -// Step 2b: IV3NWV attempts to decode [? ? ?], [IV3NWV ? ?] or [IV3NWV ?] - rc = qra64_decode(codec_iv3nwv, 0, xdec,rx); - if (rc>=0) { // decoded - printf("IV3NWV rx: received with apcode=%d %s\n",rc, decode_type[rc]); - -// Step 3a: IV3NWV replies to K1JT with a 73 - printf("IV3NWV tx: K1JT IV3NWV 73\n"); - encodemsg_jt65(x,CALL_K1JT,CALL_IV3NWV, GRID_73); - qra64_encode(codec_iv3nwv, y, x); - rx = mfskchannel(y,channel_type,EbNodB); - -// Step 3b: K1JT attempts to decode [? ? ?] or [K1JT IV3NWV ?] - rc = qra64_decode(codec_k1jt, 0, xdec,rx); - if (rc>=0) { // decoded - printf("K1JT rx: received with apcode=%d %s\n",rc, decode_type[rc]); - -// Step 4a: K1JT replies to IV3NWV with a 73 - printf("K1JT tx: IV3NWV K1JT 73\n"); - encodemsg_jt65(x,CALL_IV3NWV,CALL_K1JT, GRID_73); - qra64_encode(codec_k1jt, y, x); - rx = mfskchannel(y,channel_type,EbNodB); - -// Step 4b: IV3NWV attempts to decode [? ? ?], [IV3NWV ? ?], or [IV3NWV ?] - rc = qra64_decode(codec_iv3nwv, 0, xdec,rx); - if (rc>=0) { // decoded - printf("IV3NWV rx: received with apcode=%d %s\n",rc, decode_type[rc]); - return 0; - } - } - } - } - printf("no decode\n"); - return -1; -} - -int test_proc_2(int channel_type, float EbNodB, int mode) -{ -/* -Here we simulate the decoder of K1JT after K1JT has sent a msg [IV3NWV K1JT] -and IV3NWV sends him the msg [K1JT IV3NWV JN66]. - -If mode=QRA_NOAP, K1JT decoder attempts to decode only msgs of type [? ? ?]. - -If mode=QRA_AUTOP, K1JT decoder will attempt to decode also the msgs -[K1JT IV3NWV] and [K1JT IV3NWV ?]. - -In the case a decode is successful the return code of the qra64_decode function -indicates the amount of a-priori information required to decode the received -message according to this table: - - rc=0 [? ? ?] AP0 - rc=1 [CQ ? ?] AP27 - rc=2 [CQ ? ] AP42 - rc=3 [CALL ? ?] AP29 - rc=4 [CALL ? ] AP44 - rc=5 [CALL CALL ?] AP57 - rc=6 [? CALL ?] AP29 - rc=7 [? CALL ] AP44 - rc=8 [CALL CALL GRID] AP72 - rc=9 [CQ CALL ?] AP55 - rc=10 [CQ CALL ] AP70 - rc=11 [CQ CALL GRID] AP70 - -The return code is <0 when decoding is unsuccessful - -This test simulates the situation ntx times and reports how many times -a particular type decode among the above 6 cases succeded. -*/ - - int x[QRA64_K], xdec[QRA64_K]; - int y[QRA64_N]; - float *rx; - float ebnodbest, ebnodbavg=0; - int rc,k; - - int ndecok[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int nundet = 0; - int ntx = 200,ndec=0; - - qra64codec *codec_iv3nwv = qra64_init(mode); // codec for IV3NWV - qra64codec *codec_k1jt = qra64_init(mode); // codec for K1JT - - printf("\nQRA64 Test #2 - Decoding with AP knowledge (SNR-Eb/No offset = %.1f dB)\n\n", - QRA64_SNR_EBNO_OFFSET); - -// This will enable K1JT's decoder to look for calls directed to him [K1JT ? ?/b] -// printf("K1JT decoder enabled for [K1JT ? ?/blank]\n"); -// qra64_apset(codec_k1jt, CALL_K1JT,0,0,APTYPE_MYCALL); - -// This will enable K1JT's decoder to look for IV3NWV calls directed to him [K1JT IV3NWV ?/b] -// printf("K1JT decoder enabled for [K1JT IV3NWV ?]\n"); -// qra64_apset(codec_k1jt, CALL_CQ,CALL_IV3NWV,0,APTYPE_BOTHCALLS); - -// This will enable K1JT's decoder to look for msges sent by IV3NWV [? IV3NWV ?] -// printf("K1JT decoder enabled for [? IV3NWV ?/blank]\n"); -// qra64_apset(codec_k1jt, 0,CALL_IV3NWV,GRID_BLANK,APTYPE_HISCALL); - -// This will enable K1JT's decoder to look for full-knowledge [K1JT IV3NWV JN66] msgs - printf("K1JT decoder enabled for [K1JT IV3NWV JN66]\n"); - qra64_apset(codec_k1jt, CALL_K1JT,CALL_IV3NWV,GRID_JN66,APTYPE_FULL); - -// This will enable K1JT's decoder to look for calls from IV3NWV [CQ IV3NWV ?/b] msgs - printf("K1JT decoder enabled for [CQ IV3NWV ?/b/JN66]\n"); - qra64_apset(codec_k1jt, 0,CALL_IV3NWV,GRID_JN66,APTYPE_CQHISCALL); - - - // Dx station IV3NWV calls - printf("\nIV3NWV encoder sends msg: [K1JT IV3NWV JN66]\n\n"); - encodemsg_jt65(x,CALL_CQ,CALL_IV3NWV,GRID_JN66); - -// printf("\nIV3NWV encoder sends msg: [CQ IV3NWV JN66]\n\n"); -// encodemsg_jt65(x,CALL_CQ,CALL_IV3NWV,GRID_JN66); - -// printf("\nIV3NWV encoder sends msg: [CQ IV3NWV]\n\n"); -// encodemsg_jt65(x,CALL_CQ,CALL_IV3NWV,GRID_BLANK); - qra64_encode(codec_iv3nwv, y, x); - - printf("Simulating K1JT decoder up to AP72\n"); - - for (k=0;k=0) { - ebnodbavg +=ebnodbest; - if (memcmp(xdec,x,12*sizeof(int))==0) - ndecok[rc]++; - else - nundet++; - } - } - printf("\n\n"); - - - printf("Transimtted msgs:%d\nDecoded msgs:\n\n",ntx); - for (k=0;k<12;k++) { - printf("%3d with %s\n",ndecok[k],decode_type[k]); - ndec += ndecok[k]; - } - printf("\nTotal: %d/%d (%d undetected errors)\n\n",ndec,ntx,nundet); - printf(""); - - ebnodbavg/=(ndec+nundet); - printf("Estimated SNR (average in dB) = %.2f dB\n\n",ebnodbavg-QRA64_SNR_EBNO_OFFSET); - - return 0; -} - -int test_fastfading(float EbNodB, float B90, int fadingModel, int submode, int apmode, int olddec, int channel_type, int ntx) -{ - int x[QRA64_K], xdec[QRA64_K]; - int y[QRA64_N]; - float *rx; - float ebnodbest, ebnodbavg=0; - int rc,k; - float rxolddec[QRA64_N*QRA64_M]; // holds the energies at nominal tone freqs - - int ndecok[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int nundet = 0; - int ndec=0; - - qra64codec *codec_iv3nwv; - qra64codec *codec_k1jt; - - codec_iv3nwv=qra64_init(QRA_NOAP); - codec_k1jt =qra64_init(apmode); - - if (channel_type==2) { // fast-fading case - printf("Simulating the fast-fading channel\n"); - printf("B90=%.2f Hz - Fading Model=%s - Submode=QRA64%c\n",B90,fadingModel?"Lorentz":"Gauss",submode+'A'); - printf("Decoder metric = %s\n",olddec?"AWGN":"Matched to fast-fading signal"); - } - else { - printf("Simulating the %s channel\n",channel_type?"Rayleigh block fading":"AWGN"); - printf("Decoder metric = AWGN\n"); - } - - - printf("\nEncoding msg [K1JT IV3NWV JN66]\n"); - encodemsg_jt65(x,CALL_K1JT,CALL_IV3NWV,GRID_JN66); -// printf("["); -// for (k=0;k<11;k++) printf("%02hX ",x[k]); printf("%02hX]\n",x[11]); - - qra64_encode(codec_iv3nwv, y, x); - printf("%d transmissions will be simulated\n\n",ntx); - - if (apmode==QRA_USERAP) { - // This will enable K1JT's decoder to look for cq/qrz calls [CQ/QRZ ? ?/b] - printf("K1JT decoder enabled for [CQ ? ?/blank]\n"); - qra64_apset(codec_k1jt, CALL_K1JT,0,0,APTYPE_CQQRZ); - - // This will enable K1JT's decoder to look for calls directed to him [K1JT ? ?/b] - printf("K1JT decoder enabled for [K1JT ? ?/blank]\n"); - qra64_apset(codec_k1jt, CALL_K1JT,0,0,APTYPE_MYCALL); - - // This will enable K1JT's decoder to look for msges sent by IV3NWV [? IV3NWV ?] - printf("K1JT decoder enabled for [? IV3NWV ?/blank]\n"); - qra64_apset(codec_k1jt, 0,CALL_IV3NWV,GRID_BLANK,APTYPE_HISCALL); - - // This will enable K1JT's decoder to look for IV3NWV calls directed to him [K1JT IV3NWV ?/b] - printf("K1JT decoder enabled for [K1JT IV3NWV ?]\n"); - qra64_apset(codec_k1jt, CALL_K1JT,CALL_IV3NWV,0,APTYPE_BOTHCALLS); - - // This will enable K1JT's decoder to look for full-knowledge [K1JT IV3NWV JN66] msgs - printf("K1JT decoder enabled for [K1JT IV3NWV JN66]\n"); - qra64_apset(codec_k1jt, CALL_K1JT,CALL_IV3NWV,GRID_JN66,APTYPE_FULL); - - // This will enable K1JT's decoder to look for calls from IV3NWV [CQ IV3NWV ?/b] msgs - printf("K1JT decoder enabled for [CQ IV3NWV ?/b/JN66]\n"); - qra64_apset(codec_k1jt, 0,CALL_IV3NWV,GRID_JN66,APTYPE_CQHISCALL); - - } - - printf("\nNow decoding with K1JT's decoder...\n"); -/* - if (channel_type==2) // simulate a fast-faded signal - printf("Simulating a fast-fading channel with given B90 and spread type\n"); - else - printf("Simulating a %s channel\n",channel_type?"Rayleigh block fading":"AWGN"); -*/ - for (k=0;k=0) { - ebnodbavg +=ebnodbest; - if (memcmp(xdec,x,12*sizeof(int))==0) - ndecok[rc]++; - else { - fprintf(stderr,"\nUndetected error with rc=%d\n",rc); - nundet++; - } - } - - } - printf(" %5.1f %%\r",100.0*k/ntx); - - printf("\n\n"); - - printf("Msgs transmitted:%d\nMsg decoded:\n\n",ntx); - for (k=0;k<12;k++) { - printf("rc=%2d %3d with %s\n",k,ndecok[k],decode_type[k]); - ndec += ndecok[k]; - } - printf("\nTotal: %d/%d (%d undetected errors)\n\n",ndec,ntx,nundet); - printf(""); - - if (ndec>0) { - ebnodbavg/=(ndec+nundet); - printf("Estimated SNR (average in dB) = %.2f dB\n\n",ebnodbavg-QRA64_SNR_EBNO_OFFSET); - } - - return 0; -} - - - -void syntax(void) -{ - - printf("\nQRA64 Mode Tests\n"); - printf("2016, Nico Palermo - IV3NWV\n\n"); - printf("---------------------------\n\n"); - printf("Syntax: qra64 [-s] [-c] [-a] [-t] [-h]\n"); - printf("Options: \n"); - printf(" -s : set simulation SNR in 2500 Hz BW (default:-27.5 dB)\n"); - printf(" -c : set channel type 0=AWGN (default) 1=Rayleigh 2=Fast-fading\n"); - printf(" -a : set decode type 0=NOAP 1=AUTOAP (default) 2=USERAP\n"); - printf(" -t: 0=simulate seq of msgs between IV3NWV and K1JT (default)\n"); - printf(" 1=simulate K1JT receiving K1JT IV3NWV JN66\n"); - printf(" 2=simulate fast-fading/awgn/rayliegh decoders performance\n"); - printf(" -n : simulate the transmission of ntx codewords (default=100)\n"); - - printf("Options used only for fast-fading simulations (-c2):\n"); - printf(" -b : 90%% fading bandwidth in Hz [1..230 Hz] (default = 2.5 Hz)\n"); - printf(" -m : fading model. 0=Gauss, 1=Lorentz (default = Lorentz)\n"); - printf(" -q : qra64 submode. 0=QRA64A,... 4=QRA64E (default = QRA64A)\n"); - printf(" -d : use the old awgn decoder\n"); - printf(" -h: this help\n"); - printf("Example:\n"); - printf(" qra64 -t2 -c2 -a2 -b50 -m1 -q2 -n10000 -s-26\n"); - printf(" runs the error performance test (-t2)\n"); - printf(" with USER_AP (-a2)\n"); - printf(" simulating a fast fading channel (-c2)\n"); - printf(" with B90 = 50 Hz (-b50), Lorentz Doppler (-m1), mode QRA64C (-q2)\n"); - printf(" ntx = 10000 codewords (-n10000) and SNR = -26 dB (-s-26)\n"); - -} - -int main(int argc, char* argv[]) -{ - int k, rc, nok=0; - float SNRdB = -27.5f; - unsigned int channel = CHANNEL_AWGN; - unsigned int mode = QRA_AUTOAP; - unsigned int testtype=0; - int nqso = 100; - float EbNodB; - float B90 = 2.5; - int fadingModel = 1; - int submode = 0; - int olddec = 0; - int ntx = 100; - -// Parse the command line - while(--argc) { - argv++; - - if (strncmp(*argv,"-h",2)==0) { - syntax(); - return 0; - } - else - if (strncmp(*argv,"-n",2)==0) { - ntx = ( int)atoi((*argv)+2); - if (ntx<100 || ntx>1000000) { - printf("Invalid -n option. ntx must be in the range [100..1000000]\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-a",2)==0) { - mode = ( int)atoi((*argv)+2); - if (mode>2) { - printf("Invalid decoding mode\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-s",2)==0) { - SNRdB = (float)atof((*argv)+2); - if (SNRdB>20 || SNRdB<-50) { - printf("SNR should be in the range [-50..20]\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-t",2)==0) { - testtype = ( int)atoi((*argv)+2); - if (testtype>2) { - printf("Invalid test type\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-c",2)==0) { - channel = ( int)atoi((*argv)+2); - if (channel>CHANNEL_FASTFADE) { - printf("Invalid channel type\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-b",2)==0) { - B90 = (float)atof((*argv)+2); - if (B90<1 || B90>230) { - printf("Invalid B90\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-m",2)==0) { - fadingModel = (int)atoi((*argv)+2); - if (fadingModel<0 || fadingModel>1) { - printf("Invalid fading model\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-q",2)==0) { - submode = (int)atoi((*argv)+2); - if (submode<0 || submode>4) { - printf("Invalid submode\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-d",2)==0) { - olddec = 1; - } - else { - printf("Invalid option\n"); - syntax(); - return -1; - } - } - - if (testtype<2) // old tests - if (channel==CHANNEL_FASTFADE) { - printf("Invalid Option. Test type 0 and 1 supports only AWGN or Rayleigh Channel model\n"); - return -1; - } - - EbNodB = SNRdB+QRA64_SNR_EBNO_OFFSET; - -#if defined(__linux__) || defined(__unix__) - srand48(GetTickCount()); -#endif - - if (testtype==0) { - for (k=0;k. - ------------------------------------------------------------------------------ - -QRA code used in this sowftware release: - -QRA13_64_64_IRR_E: K=13 N=64 Q=64 irregular QRA code (defined in -qra13_64_64_irr_e.h /.c) - -Codes with K=13 are designed to include a CRC as the 13th information symbol -and improve the code UER (Undetected Error Rate). -The CRC symbol is not sent along the channel (the codes are punctured) and the -resulting code is a (12,63) code -*/ -//---------------------------------------------------------------------------- - -#include -#include - -#include "qra64.h" -#include "../qracodes/qracodes.h" -#include "../qracodes/qra13_64_64_irr_e.h" -#include "../qracodes/pdmath.h" -#include "../qracodes/normrnd.h" - -// Code parameters of the QRA64 mode -#define QRA64_CODE qra_13_64_64_irr_e -#define QRA64_NMSG 218 // Must much value indicated in QRA64_CODE.NMSG - -#define QRA64_KC (QRA64_K+1) // Information symbols (crc included) -#define QRA64_NC (QRA64_N+1) // Codeword length (as defined in the code) -#define QRA64_NITER 100 // max number of iterations per decode - -// static functions declarations ---------------------------------------------- -static int calc_crc6(const int *x, int sz); -static void ix_mask(float *dst, const float *src, const int *mask, - const int *x); -static int qra64_decode_attempts(qra64codec *pcodec, int *xdec, const float *ix); -static int qra64_do_decode(int *x, const float *pix, const int *ap_mask, - const int *ap_x); -static float qra64_fastfading_estim_noise_std( - const float *rxen, - const float esnometric, - const int submode); - -static void qra64_fastfading_intrinsics( - float *pix, - const float *rxen, - const float *hptr, - const int hlen, - const float sigma, - const float EsNoMetric, - const int submode); - -static float qra64_fastfading_msg_esno( - const int *ydec, - const float *rxen, - const float sigma, - const float EsNoMetric, - const int hlen, - const int submode); - - -// a-priori information masks for fields in JT65-like msgs -------------------- - -// when defined limits the AP masks to reduce the false decode rate -#define LIMIT_AP_MASKS - -#ifdef LIMIT_AP_MASKS -#define MASK_CQQRZ 0xFFFFFFC -#define MASK_CALL1 0xFFFFFFC -#define MASK_CALL2 0xFFFFFFC -#define MASK_GRIDFULL 0x3FFC -#define MASK_GRIDFULL12 0x3FFC -#define MASK_GRIDBIT 0x8000 -#else -#define MASK_CQQRZ 0xFFFFFFC -#define MASK_CALL1 0xFFFFFFF -#define MASK_CALL2 0xFFFFFFF -#define MASK_GRIDFULL 0xFFFF -#define MASK_GRIDFULL12 0x3FFC -#define MASK_GRIDBIT 0x8000 // b[15] is 1 for free text, 0 otherwise -#endif - -// ---------------------------------------------------------------------------- - - - - -qra64codec *qra64_init(int flags) -{ - - // Eb/No value for which we optimize the decoder metric - const float EbNodBMetric = 2.8f; - const float EbNoMetric = (float)pow(10,EbNodBMetric/10); - const float R = 1.0f*(QRA64_KC)/(QRA64_NC); - - qra64codec *pcodec = (qra64codec*)malloc(sizeof(qra64codec)); - - if (!pcodec) - return 0; // can't allocate memory - - pcodec->decEsNoMetric = 1.0f*QRA64_m*R*EbNoMetric; - pcodec->apflags = flags; - - memset(pcodec->apmsg_set,0,APTYPE_SIZE*sizeof(int)); - - if (flags==QRA_NOAP) - return pcodec; - - // for QRA_USERAP and QRA_AUTOAP modes we always enable [CQ/QRZ ? ?] mgs look-up. - // encode CQ/QRZ AP messages - // NOTE: Here we handle only CQ and QRZ msgs. - // 'CQ nnn', 'CQ DX' and 'DE' msgs will be handled by the decoder - // as messages with no a-priori knowledge - qra64_apset(pcodec, CALL_CQ, 0, GRID_BLANK, APTYPE_CQQRZ); - - // initialize masks for decoding with a-priori information - encodemsg_jt65(pcodec->apmask_cqqrz, MASK_CQQRZ, 0, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_cqqrz_ooo, MASK_CQQRZ, 0, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call1, MASK_CALL1, 0, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call1_ooo, MASK_CALL1, 0, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call2, 0, MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call2_ooo, 0, MASK_CALL2, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call1_call2, MASK_CALL1,MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call1_call2_grid,MASK_CALL1,MASK_CALL2, MASK_GRIDFULL12); - encodemsg_jt65(pcodec->apmask_cq_call2, MASK_CQQRZ, MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_cq_call2_ooo, MASK_CQQRZ, MASK_CALL2, MASK_GRIDFULL12); - - return pcodec; -} - -void qra64_close(qra64codec *pcodec) -{ - free(pcodec); -} - -int qra64_apset(qra64codec *pcodec, const int mycall, const int hiscall, const int grid, const int aptype) -{ -// Set decoder a-priori knowledge accordingly to the type of the message to look up for -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// mycall = mycall to look for -// hiscall = hiscall to look for -// grid = grid to look for -// aptype = define and masks the type of AP to be set accordingly to the following: -// APTYPE_CQQRZ set [cq/qrz ? ?/blank] -// APTYPE_MYCALL set [mycall ? ?/blank] -// APTYPE_HISCALL set [? hiscall ?/blank] -// APTYPE_BOTHCALLS set [mycall hiscall ?] -// APTYPE_FULL set [mycall hiscall grid] -// APTYPE_CQHISCALL set [cq/qrz hiscall ?/blank] and [cq/qrz hiscall grid] -// returns: -// 0 on success -// -1 when qra64_init was called with the QRA_NOAP flag -// -2 invalid apytpe - - if (pcodec->apflags==QRA_NOAP) - return -1; - - switch (aptype) { - case APTYPE_CQQRZ: - encodemsg_jt65(pcodec->apmsg_cqqrz, CALL_CQ, 0, GRID_BLANK); - break; - case APTYPE_MYCALL: - encodemsg_jt65(pcodec->apmsg_call1, mycall, 0, GRID_BLANK); - break; - case APTYPE_HISCALL: - encodemsg_jt65(pcodec->apmsg_call2, 0, hiscall, GRID_BLANK); - break; - case APTYPE_BOTHCALLS: - encodemsg_jt65(pcodec->apmsg_call1_call2, mycall, hiscall, GRID_BLANK); - break; - case APTYPE_FULL: - encodemsg_jt65(pcodec->apmsg_call1_call2_grid, mycall, hiscall, grid); - break; - case APTYPE_CQHISCALL: - encodemsg_jt65(pcodec->apmsg_cq_call2, CALL_CQ, hiscall, GRID_BLANK); - encodemsg_jt65(pcodec->apmsg_cq_call2_grid, CALL_CQ, hiscall, grid); - break; - default: - return -2; // invalid ap type - } - - pcodec->apmsg_set[aptype]=1; // signal the decoder to look-up for the specified type - - - return 0; -} -void qra64_apdisable(qra64codec *pcodec, const int aptype) -{ - if (pcodec->apflags==QRA_NOAP) - return; - - if (aptype=APTYPE_SIZE) - return; - - pcodec->apmsg_set[aptype] = 0; // signal the decoder not to look-up to the specified type -} - -void qra64_encode(qra64codec *pcodec, int *y, const int *x) -{ - int encx[QRA64_KC]; // encoder input buffer - int ency[QRA64_NC]; // encoder output buffer - - int hiscall,mycall,grid; - - memcpy(encx,x,QRA64_K*sizeof(int)); // Copy input to encoder buffer - encx[QRA64_K]=calc_crc6(encx,QRA64_K); // Compute and add crc symbol - qra_encode(&QRA64_CODE, ency, encx); // encode msg+crc using given QRA code - - // copy codeword to output puncturing the crc symbol - memcpy(y,ency,QRA64_K*sizeof(int)); // copy information symbols - memcpy(y+QRA64_K,ency+QRA64_KC,QRA64_C*sizeof(int)); // copy parity symbols - - if (pcodec->apflags!=QRA_AUTOAP) - return; - - // Here we handle the QRA_AUTOAP mode -------------------------------------------- - - // When a [hiscall mycall ?] msg is detected we instruct the decoder - // to look for [mycall hiscall ?] msgs - // otherwise when a [cq mycall ?] msg is sent we reset the APTYPE_BOTHCALLS - - // look if the msg sent is a std type message (bit15 of grid field = 0) - if ((x[9]&0x80)==1) - return; // no, it's a text message, nothing to do - - // It's a [hiscall mycall grid] message - - // We assume that mycall is our call (but we don't check it) - // hiscall the station we are calling or a general call (CQ/QRZ/etc..) - decodemsg_jt65(&hiscall,&mycall,&grid,x); - - - if ((hiscall>=CALL_CQ && hiscall<=CALL_CQ999) || hiscall==CALL_CQDX || - hiscall==CALL_DE) { - // tell the decoder to look for msgs directed to us - qra64_apset(pcodec,mycall,0,0,APTYPE_MYCALL); - // We are making a general call and don't know who might reply - // Reset APTYPE_BOTHCALLS so decoder won't look for [mycall hiscall ?] msgs - qra64_apdisable(pcodec,APTYPE_BOTHCALLS); - } else { - // We are replying to someone named hiscall - // Set APTYPE_BOTHCALLS so decoder will try for [mycall hiscall ?] msgs - qra64_apset(pcodec,mycall, hiscall, GRID_BLANK, APTYPE_BOTHCALLS); - } - -} - -#define EBNO_MIN -10.0f // minimum Eb/No value returned by the decoder (in dB) -// AWGN metric decoder -int qra64_decode(qra64codec *pcodec, float *ebno, int *x, const float *rxen) -{ - int k; - float *srctmp, *dsttmp; - float ix[QRA64_NC*QRA64_M]; // (depunctured) intrisic information - int xdec[QRA64_KC]; // decoded message (with crc) - int ydec[QRA64_NC]; // re-encoded message (for snr calculations) - float noisestd; // estimated noise variance - float msge; // estimated message energy - float ebnoval; // estimated Eb/No - int rc; - - if (QRA64_NMSG!=QRA64_CODE.NMSG) // sanity check - return -16; // QRA64_NMSG define is wrong - - // compute symbols intrinsic probabilities from received energy observations - noisestd = qra_mfskbesselmetric(ix, rxen, QRA64_m, QRA64_N,pcodec->decEsNoMetric); - - // de-puncture observations adding a uniform distribution for the crc symbol - - // move check symbols distributions one symbol towards the end - dsttmp = PD_ROWADDR(ix,QRA64_M, QRA64_NC-1); //Point to last symbol prob dist - srctmp = dsttmp-QRA64_M; // source is the previous pd - for (k=0;k57.004f) - ebnoval=57.004f; - ebnoval = ebnoval*57.03f/(57.03f-ebnoval); - - // compute value in dB - if (ebnoval<=0) { - ebnoval = EBNO_MIN; // assume a minimum, positive value - } - else { - ebnoval = 10.0f*(float)log10(ebnoval); - if (ebnoval4) - return -17; // invalid submode - - if (B90<1.0f || B90>238.0f) - return -18; // B90 out of range - - // compute index to most appropriate amplitude weighting function coefficients - hidx = (int)(log((float)B90)/log(1.09f) - 0.499f); - - if (hidx<0 || hidx > 64) - return -19; // index of weighting function out of range - - if (fadingModel==0) { // gaussian fading model - // point to gaussian energy weighting taps - hlen = glen_tab_gauss[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = gptr_tab_gauss[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else if (fadingModel==1) { - // point to lorentzian energy weighting taps - hlen = glen_tab_lorentz[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = gptr_tab_lorentz[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else - return -20; // invalid fading model index - - - // compute (euristically) the optimal decoder metric accordingly the given spread amount - // We assume that the decoder threshold is: - // Es/No(dB) = Es/No(AWGN)(dB) + 8*log(B90)/log(240)(dB) - // that's to say, at the maximum Doppler spread bandwidth (240 Hz) there's a ~8 dB Es/No degradation - // over the AWGN case - tempf = 8.0f*(float)log((float)B90)/(float)log(240.0f); - EsNoMetric = pcodec->decEsNoMetric*(float)pow(10.0f,tempf/10.0f); - - - - // Step 1 ----------------------------------------------------------------------------------- - // Evaluate the noise stdev from the received energies at nominal tone frequencies - noisestd = qra64_fastfading_estim_noise_std(rxen, EsNoMetric, submode); - - // Step 2 ----------------------------------------------------------------------------------- - // Compute message symbols probability distributions - qra64_fastfading_intrinsics(ix, rxen, hptr, hlen, noisestd, EsNoMetric, submode); - - // Step 3 --------------------------------------------------------------------------- - // De-puncture observations adding a uniform distribution for the crc symbol - // Move check symbols distributions one symbol towards the end - dsttmp = PD_ROWADDR(ix,QRA64_M, QRA64_NC-1); //Point to last symbol prob dist - srctmp = dsttmp-QRA64_M; // source is the previous pd - for (k=0;k Eb/N0 conversion - ebnoval = 1.0f/(1.0f*QRA64_K/QRA64_N*QRA64_m)*esno; - - // compute value in dB - if (ebnoval<=0) { - ebnoval = EBNO_MIN; // assume a minimum, positive value - } - else { - ebnoval = 10.0f*(float)log10(ebnoval); - if (ebnoval238.0f) - return -18; // B90 out of range - - // compute index to most appropriate energy weighting function coefficients - hidx = (int)(log((float)B90)/log(1.09f) - 0.499f); - - if (hidx<0 || hidx > 64) - return -19; // index of weighting function out of range - - if (fadingModel==0) { // gaussian fading model - // point to gaussian weighting taps - hlen = glen_tab_gauss[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = gptr_tab_gauss[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else if (fadingModel==1) { - // point to lorentzian weighting taps - hlen = glen_tab_lorentz[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = gptr_tab_lorentz[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else - return -20; // invalid fading model index - - - // Compute the unfaded tone amplitudes from the Eb/No value passed to the call - N0 = 1.0f; // assume unitary noise PSD - sigmanoise = (float)sqrt(N0/2); - EsN0 = (float)pow(10.0f,EbN0dB/10.0f)*QRA64_m*QRA64_K/QRA64_N; // Es/No = m*R*Eb/No - Es = EsN0*N0; - - // compute signal bin sigmas - for (n=0;n=0;j--) { - normrnd_s(iq, 2, 0 , sigmasig[j]); - *curi++ += iq[0]; - *curq++ += iq[1]; - } - - } - - // compute total bin energies (S+N) and store in first half of buffer - curi = channel_out; - curq = channel_out+bpm; - for (n=0;nmaxloglh) // keep track of the max loglikelihood - maxloglh = loglh; - curix[k]=loglh; - } - - // scale to likelihoods - sumix = 0.f; - for (k=0;k1 - if (u<1) - return 0.f; - - // check u(bps/tothlen)) - return 10000.f; - - // solve for Es/No - esno = (u-1.0f)/(1.0f/tothlen-u/bps); - - return esno; - - -} - -#ifdef LIMIT_AP_MASKS - -static int call1_match(const int *papmsg, const int *pdec) -{ - // assumes MASK_CALL1 = 0xFFFFFFC - int u = papmsg[4]^pdec[4]; - return (u&0x3C)==0; -} -static int call2_match(const int *papmsg, const int *pdec) -{ - // assumes MASK_CALL2 = 0xFFFFFFC - int u = papmsg[9]^pdec[9]; - return (u&0x30)==0; -} -static int grid_match(const int *papmsg, const int *pdec) -{ - // assumes MASK_GRIDFULL = 0x3FFC - int u = papmsg[11]^pdec[11]; - int rc = (u&0x03)==0; - - u = papmsg[9]^pdec[9]; - - return (u&0x0C)==0 && rc; -} - -#else -#define call1_match(a,b) (1) -#define call2_match(a,b) (1) -#define grid_match(a,b) (1) -#endif - - - - -// Attempt to decode given intrisic information -static int qra64_decode_attempts(qra64codec *pcodec, int *xdec, const float *ix) -{ - int rc; - - // Attempt to decode without a-priori info -------------------------------- - rc = qra64_do_decode(xdec, ix, NULL, NULL); - if (rc>=0) - return 0; // successfull decode with AP0 - else - if (pcodec->apflags==QRA_NOAP) - // nothing more to do - return rc; // rc<0 = unsuccessful decode - - // Here we handle decoding with AP knowledge - - - // Attempt to decode CQ calls - rc = qra64_do_decode(xdec,ix,pcodec->apmask_cqqrz, pcodec->apmsg_cqqrz); - if (rc>=0) - return 1; // decoded [cq/qrz ? ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cqqrz_ooo, - pcodec->apmsg_cqqrz); - if (rc>=0) - // check that ooo really matches - if (grid_match(pcodec->apmsg_cqqrz,xdec)) - return 2; // decoded [cq/qrz ? ooo] - - // attempt to decode calls directed to us - if (pcodec->apmsg_set[APTYPE_MYCALL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1, - pcodec->apmsg_call1); - if (rc>=0) - // check that mycall really matches - if (call1_match(pcodec->apmsg_call1,xdec)) - return 3; // decoded [mycall ? ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_ooo, - pcodec->apmsg_call1); - if (rc>=0) - // check that mycall and ooo really match - if (call1_match(pcodec->apmsg_call1,xdec) && - grid_match(pcodec->apmsg_call1,xdec)) - return 4; // decoded [mycall ? ooo] - } - - // attempt to decode [mycall hiscall ?] msgs - if (pcodec->apmsg_set[APTYPE_BOTHCALLS]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_call2, - pcodec->apmsg_call1_call2); - if (rc>=0) - // check that mycall and hiscall really match - if (call1_match(pcodec->apmsg_call1_call2,xdec) && - call2_match(pcodec->apmsg_call1_call2,xdec)) - return 5; // decoded [mycall srccall ?] - } - - // attempt to decode [? hiscall ?/b] msgs - if (pcodec->apmsg_set[APTYPE_HISCALL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call2, - pcodec->apmsg_call2); - if (rc>=0) - // check that hiscall really match - if (call2_match(pcodec->apmsg_call2,xdec)) - return 6; // decoded [? hiscall ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call2_ooo, - pcodec->apmsg_call2); - if (rc>=0) - // check that hiscall and ooo match - if (call2_match(pcodec->apmsg_call2,xdec) && - grid_match(pcodec->apmsg_call2,xdec)) - return 7; // decoded [? hiscall ooo] - } - - // attempt to decode [cq/qrz hiscall ?/b/grid] msgs - if (pcodec->apmsg_set[APTYPE_CQHISCALL]) { - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2, - pcodec->apmsg_cq_call2); - if (rc>=0) - // check that hiscall matches - if (call2_match(pcodec->apmsg_call2,xdec)) - return 9; // decoded [cq/qrz hiscall ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2_ooo, - pcodec->apmsg_cq_call2_grid); - if (rc>=0) { - // Full AP mask need special handling - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_cq_call2_grid,xdec, QRA64_K*sizeof(int))==0) - return 11; // decoded [cq/qrz hiscall grid] - } - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2_ooo, - pcodec->apmsg_cq_call2); - if (rc>=0) { - // Full AP mask need special handling - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_cq_call2,xdec, QRA64_K*sizeof(int))==0) - return 10; // decoded [cq/qrz hiscall ] - } - } - - // attempt to decode [mycall hiscall grid] - if (pcodec->apmsg_set[APTYPE_FULL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_call2_grid, - pcodec->apmsg_call1_call2_grid); - if (rc>=0) { - // Full AP mask need special handling - // All the three msg fields were given. - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_call1_call2_grid,xdec, QRA64_K*sizeof(int))==0) - return 8; // decoded [mycall hiscall grid] - } - } - - // all decoding attempts failed - return -1; -} - - - -// Decode with given a-priori information -static int qra64_do_decode(int *xdec, const float *pix, const int *ap_mask, - const int *ap_x) -{ - int rc; - const float *ixsrc; - float ix_masked[QRA64_NC*QRA64_M]; // Masked intrinsic information - float ex[QRA64_NC*QRA64_M]; // Extrinsic information from the decoder - - float v2cmsg[QRA64_NMSG*QRA64_M]; // buffers for the decoder messages - float c2vmsg[QRA64_NMSG*QRA64_M]; - - if (ap_mask==NULL) { // no a-priori information - ixsrc = pix; // intrinsic source is what passed as argument - } else { - // a-priori information provided - // mask channel observations with a-priori - ix_mask(ix_masked,pix,ap_mask,ap_x); - ixsrc = ix_masked; // intrinsic source is the masked version - } - - // run the decoding algorithm - rc = qra_extrinsic(&QRA64_CODE,ex,ixsrc,QRA64_NITER,v2cmsg,c2vmsg); - if (rc<0) - return -1; // no convergence in given iterations - - // decode - qra_mapdecode(&QRA64_CODE,xdec,ex,ixsrc); - - // verify crc - if (calc_crc6(xdec,QRA64_K)!=xdec[QRA64_K]) // crc doesn't match (detected error) - return -2; // decoding was succesfull but crc doesn't match - - return 0; -} - - -// crc functions -------------------------------------------------------------- -// crc-6 generator polynomial -// g(x) = x^6 + a5*x^5 + ... + a1*x + a0 - -// g(x) = x^6 + x + 1 -#define CRC6_GEN_POL 0x30 // MSB=a0 LSB=a5 - -// g(x) = x^6 + x^2 + x + 1 (See: https://users.ece.cmu.edu/~koopman/crc/) -// #define CRC6_GEN_POL 0x38 // MSB=a0 LSB=a5. Simulation results are similar - -static int calc_crc6(const int *x, int sz) -{ - // todo: compute it faster using a look up table - int k,j,t,sr = 0; - for (k=0;k>1) ^ CRC6_GEN_POL; - else - sr = (sr>>1); - t>>=1; - } - } - return sr; -} - -static void ix_mask(float *dst, const float *src, const int *mask, - const int *x) -{ - // mask intrinsic information (channel observations) with a priori knowledge - - int k,kk, smask; - float *row; - - memcpy(dst,src,(QRA64_NC*QRA64_M)*sizeof(float)); - - for (k=0;k>22)&0x3F; - y[1]= (call1>>16)&0x3F; - y[2]= (call1>>10)&0x3F; - y[3]= (call1>>4)&0x3F; - y[4]= (call1<<2)&0x3F; - - y[4] |= (call2>>26)&0x3F; - y[5]= (call2>>20)&0x3F; - y[6]= (call2>>14)&0x3F; - y[7]= (call2>>8)&0x3F; - y[8]= (call2>>2)&0x3F; - y[9]= (call2<<4)&0x3F; - - y[9] |= (grid>>12)&0x3F; - y[10]= (grid>>6)&0x3F; - y[11]= (grid)&0x3F; - -} -void decodemsg_jt65(int *call1, int *call2, int *grid, const int *x) -{ - int nc1, nc2, ng; - - nc1 = x[4]>>2; - nc1 |= x[3]<<4; - nc1 |= x[2]<<10; - nc1 |= x[1]<<16; - nc1 |= x[0]<<22; - - nc2 = x[9]>>4; - nc2 |= x[8]<<2; - nc2 |= x[7]<<8; - nc2 |= x[6]<<14; - nc2 |= x[5]<<20; - nc2 |= (x[4]&0x03)<<26; - - ng = x[11]; - ng |= x[10]<<6; - ng |= (x[9]&0x0F)<<12; - - *call1 = nc1; - *call2 = nc2; - *grid = ng; -} diff --git a/lib/qra/qra64/qra64.h b/lib/qra/qra64/qra64.h deleted file mode 100644 index 3b2b5bd..0000000 --- a/lib/qra/qra64/qra64.h +++ /dev/null @@ -1,269 +0,0 @@ -// qra64.h -// Encoding/decoding functions for the QRA64 mode -// -// (c) 2016 - Nico Palermo, IV3NWV -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#ifndef _qra64_h_ -#define _qra64_h_ - -// qra64_init(...) initialization flags -#define QRA_NOAP 0 // don't use a-priori knowledge -#define QRA_AUTOAP 1 // use auto a-priori knowledge -#define QRA_USERAP 2 // a-priori knowledge messages provided by the user - -// QRA code parameters -#define QRA64_K 12 // information symbols -#define QRA64_N 63 // codeword length -#define QRA64_C 51 // (number of parity checks C=(N-K)) -#define QRA64_M 64 // code alphabet size -#define QRA64_m 6 // bits per symbol - -// packed predefined callsigns and fields as defined in JT65 -#define CALL_CQ 0xFA08319 -#define CALL_QRZ 0xFA0831A -#define CALL_CQ000 0xFA0831B -#define CALL_CQ999 0xFA08702 -#define CALL_CQDX 0x5624C39 -#define CALL_DE 0xFF641D1 -#define GRID_BLANK 0x7E91 - -// Types of a-priori knowledge messages -#define APTYPE_CQQRZ 0 // [cq/qrz ? ?/blank] -#define APTYPE_MYCALL 1 // [mycall ? ?/blank] -#define APTYPE_HISCALL 2 // [? hiscall ?/blank] -#define APTYPE_BOTHCALLS 3 // [mycall hiscall ?] -#define APTYPE_FULL 4 // [mycall hiscall grid] -#define APTYPE_CQHISCALL 5 // [cq/qrz hiscall ?/blank] -#define APTYPE_SIZE (APTYPE_CQHISCALL+1) - -typedef struct { - float decEsNoMetric; - int apflags; - int apmsg_set[APTYPE_SIZE]; // indicate which ap type knowledge has - // been set by the user -// ap messages buffers - int apmsg_cqqrz[12]; // [cq/qrz ? ?/blank] - int apmsg_call1[12]; // [mycall ? ?/blank] - int apmsg_call2[12]; // [? hiscall ?/blank] - int apmsg_call1_call2[12]; // [mycall hiscall ?] - int apmsg_call1_call2_grid[12]; // [mycall hiscall grid] - int apmsg_cq_call2[12]; // [cq hiscall ?/blank] - int apmsg_cq_call2_grid[12]; // [cq hiscall grid] - -// ap messages masks - int apmask_cqqrz[12]; - int apmask_cqqrz_ooo[12]; - int apmask_call1[12]; - int apmask_call1_ooo[12]; - int apmask_call2[12]; - int apmask_call2_ooo[12]; - int apmask_call1_call2[12]; - int apmask_call1_call2_grid[12]; - int apmask_cq_call2[12]; - int apmask_cq_call2_ooo[12]; -} qra64codec; - -#ifdef __cplusplus -extern "C" { -#endif - -qra64codec *qra64_init(int flags); -// QRA64 mode initialization function -// arguments: -// flags: set the decoder mode -// QRA_NOAP use no a-priori information -// QRA_AUTOAP use any relevant previous decodes -// QRA_USERAP use a-priori information provided via qra64_apset(...) -// returns: -// Pointer to initialized qra64codec data structure -// this pointer should be passed to the encoding/decoding functions -// -// 0 if unsuccessful (can't allocate memory) -// ---------------------------------------------------------------------------- - -void qra64_encode(qra64codec *pcodec, int *y, const int *x); -// QRA64 encoder -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// x = pointer to the message to be encoded, int x[12] -// x must point to an array of integers (i.e. defined as int x[12]) -// y = pointer to encoded message, int y[63]= -// ---------------------------------------------------------------------------- - -int qra64_decode(qra64codec *pcodec, float *ebno, int *x, const float *r); -// QRA64 mode decoder -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// ebno = pointer to a float where the avg Eb/No (in dB) will be stored -// in case of successfull decoding -// (pass a null pointer if not interested) -// x = pointer to decoded message, int x[12] -// r = pointer to received symbol energies (squared amplitudes) -// r must point to an array of length QRA64_M*QRA64_N (=64*63=4032) -// The first QRA_M entries should be the energies of the first -// symbol in the codeword; the last QRA_M entries should be the -// energies of the last symbol in the codeword -// -// return code: -// -// The return code is <0 when decoding is unsuccessful -// -16 indicates that the definition of QRA64_NMSG does not match what required by the code -// If the decoding process is successfull the return code is accordingly to the following table -// rc=0 [? ? ?] AP0 (decoding with no a-priori) -// rc=1 [CQ ? ?] AP27 -// rc=2 [CQ ? ] AP44 -// rc=3 [CALL ? ?] AP29 -// rc=4 [CALL ? ] AP45 -// rc=5 [CALL CALL ?] AP57 -// rc=6 [? CALL ?] AP29 -// rc=7 [? CALL ] AP45 -// rc=8 [CALL CALL GRID] AP72 (actually a AP68 mask to reduce false decodes) -// rc=9 [CQ CALL ?] AP55 -// rc=10 [CQ CALL ] AP70 (actaully a AP68 mask to reduce false decodes) - -// return codes in the range 1-10 indicate the amount and the type of a-priori -// information was required to decode the received message. - - -// Decode a QRA64 msg using a fast-fading metric -int qra64_decode_fastfading( - qra64codec *pcodec, // ptr to the codec structure - float *ebno, // ptr to where the estimated Eb/No value will be saved - int *x, // ptr to decoded message - const float *rxen, // ptr to received symbol energies array - const int submode, // submode idx (0=QRA64A ... 4=QRA64E) - const float B90, // spread bandwidth (90% fractional energy) - const int fadingModel); // 0=Gaussian 1=Lorentzian fade model -// -// rxen: The array of the received bin energies -// Bins must be spaced by integer multiples of the symbol rate (1/Ts Hz) -// The array must be an array of total length U = L x N where: -// L: is the number of frequency bins per message symbol (see after) -// N: is the number of symbols in a QRA64 msg (63) -// -// The number of bins/symbol L depends on the selected submode accordingly to -// the following rule: -// L = (64+64*2^submode+64) = 64*(2+2^submode) -// Tone 0 is always supposed to be at offset 64 in the array. -// The m-th tone nominal frequency is located at offset 64 + m*2^submode (m=0..63) -// -// Submode A: (2^submode = 1) -// L = 64*3 = 196 bins/symbol -// Total length of the energies array: U = 192*63 = 12096 floats -// -// Submode B: (2^submode = 2) -// L = 64*4 = 256 bins/symbol -// Total length of the energies array: U = 256*63 = 16128 floats -// -// Submode C: (2^submode = 4) -// L = 64*6 = 384 bins/symbol -// Total length of the energies array: U = 384*63 = 24192 floats -// -// Submode D: (2^submode = 8) -// L = 64*10 = 640 bins/symbol -// Total length of the energies array: U = 640*63 = 40320 floats -// -// Submode E: (2^submode = 16) -// L = 64*18 = 1152 bins/symbol -// Total length of the energies array: U = 1152*63 = 72576 floats -// -// Note: The rxen array is modified and reused for internal calculations. -// -// -// B90: spread fading bandwidth in Hz (90% fractional average energy) -// -// B90 should be in the range 1 Hz ... 238 Hz -// The value passed to the call is rounded to the closest value among the -// 64 available values: -// B = 1.09^k Hz, with k=0,1,...,63 -// -// I.e. B90=27 Hz will be approximated in this way: -// k = rnd(log(27)/log(1.09)) = 38 -// B90 = 1.09^k = 1.09^38 = 26.4 Hz -// -// For any input value the maximum rounding error is not larger than +/- 5% -// -// return codes: same return codes of qra64_decode (+some additional error codes) - - -// Simulate the fast-fading channel (to be used with qra64_decode_fastfading) -int qra64_fastfading_channel( - float **rxen, - const int *xmsg, - const int submode, - const float EbN0dB, - const float B90, - const int fadingModel); -// Simulate transmission over a fading channel with given B90, fading model and submode -// and non coherent detection. -// Sets rxen to point to an array of bin energies formatted as required -// by the (fast-fading) decoding routine. -// returns 0 on success or negative values on error conditions - - -int qra64_apset(qra64codec *pcodec, const int mycall, const int hiscall, const int grid, const int aptype); -// Set decoder a-priori knowledge accordingly to the type of the message to -// look up for -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// mycall = mycall to look for -// hiscall = hiscall to look for -// grid = grid to look for -// aptype = define the type of AP to be set: -// APTYPE_CQQRZ set [cq/qrz ? ?/blank] -// APTYPE_MYCALL set [mycall ? ?/blank] -// APTYPE_HISCALL set [? hiscall ?/blank] -// APTYPE_BOTHCALLS set [mycall hiscall ?] -// APTYPE_FULL set [mycall hiscall grid] -// APTYPE_CQHISCALL set [cq/qrz hiscall ?/blank] - -// returns: -// 0 on success -// -1 when qra64_init was called with the QRA_NOAP flag -// -2 invalid apytpe (valid range [APTYPE_CQQRZ..APTYPE_CQHISCALL] -// (APTYPE_CQQRZ [cq/qrz ? ?] is set by default ) - -void qra64_apdisable(qra64codec *pcodec, const int aptype); -// disable specific AP type -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// aptype = define the type of AP to be disabled -// APTYPE_CQQRZ disable [cq/qrz ? ?/blank] -// APTYPE_MYCALL disable [mycall ? ?/blank] -// APTYPE_HISCALL disable [ ? hiscall ?/blank] -// APTYPE_BOTHCALLS disable [mycall hiscall ? ] -// APTYPE_FULL disable [mycall hiscall grid] -// APTYPE_CQHISCALL set [cq/qrz hiscall ?/blank] - -void qra64_close(qra64codec *pcodec); -// Free memory allocated by qra64_init -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init - -// ---------------------------------------------------------------------------- - -// encode/decode std msgs in 12 symbols as done in jt65 -void encodemsg_jt65(int *y, const int call1, const int call2, const int grid); -void decodemsg_jt65(int *call1, int *call2, int *grid, const int *x); - -#ifdef __cplusplus -} -#endif - -#endif // _qra64_h_ diff --git a/lib/qra/qra64/qra64_all.c b/lib/qra/qra64/qra64_all.c deleted file mode 100644 index 28f8ab9..0000000 --- a/lib/qra/qra64/qra64_all.c +++ /dev/null @@ -1,1050 +0,0 @@ -/* -qra64.c -Encoding/decoding functions for the QRA64 mode - -(c) 2016 - Nico Palermo, IV3NWV - -------------------------------------------------------------------------------- - - qracodes is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - qracodes is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with qracodes source distribution. - If not, see . - ------------------------------------------------------------------------------ - -QRA code used in this sowftware release: - -QRA13_64_64_IRR_E: K=13 N=64 Q=64 irregular QRA code (defined in -qra13_64_64_irr_e.h /.c) - -Codes with K=13 are designed to include a CRC as the 13th information symbol -and improve the code UER (Undetected Error Rate). -The CRC symbol is not sent along the channel (the codes are punctured) and the -resulting code is a (12,63) code -*/ -//---------------------------------------------------------------------------- - -#include -#include - -#include "qra64.h" -#include "../qracodes/qracodes.h" -#include "../qracodes/qra13_64_64_irr_e.h" -#include "../qracodes/pdmath.h" -#include "../qracodes/normrnd.h" - -// Code parameters of the QRA64 mode -#define QRA64_CODE qra_13_64_64_irr_e -#define QRA64_NMSG 218 // Must much value indicated in QRA64_CODE.NMSG - -#define QRA64_KC (QRA64_K+1) // Information symbols (crc included) -#define QRA64_NC (QRA64_N+1) // Codeword length (as defined in the code) -#define QRA64_NITER 100 // max number of iterations per decode - -// static functions declarations ---------------------------------------------- -static int calc_crc6(const int *x, int sz); -static void ix_mask(float *dst, const float *src, const int *mask, - const int *x); -static int qra64_decode_attempts(qra64codec *pcodec, int *xdec, const float *ix); -static int qra64_do_decode(int *x, const float *pix, const int *ap_mask, - const int *ap_x); -static float qra64_fastfading_estim_noise_std( - float *rxen, - const float esnometric, - const int submode); -static void qra64_fastfading_intrinsics( - float *pix, - const float *rxamp, - const float *hptr, - const int hlen, - const float cmetric, - const int submode); -static float qra64_fastfading_msg_esno( - const int *ydec, - const float *rxamp, - const float sigma, - const float EsNoMetric, - const int hlen, - const int submode); - - -// a-priori information masks for fields in JT65-like msgs -------------------- -#define MASK_CQQRZ 0xFFFFFFC // CQ/QRZ calls common bits -#define MASK_CALL1 0xFFFFFFF -#define MASK_CALL2 0xFFFFFFF -#define MASK_GRIDFULL 0xFFFF -#define MASK_GRIDFULL12 0x3FFC // less aggressive mask (to be used with full AP decoding) -#define MASK_GRIDBIT 0x8000 // b[15] is 1 for free text, 0 otherwise -// ---------------------------------------------------------------------------- - -qra64codec *qra64_init(int flags) -{ - - // Eb/No value for which we optimize the decoder metric - const float EbNodBMetric = 2.8f; - const float EbNoMetric = (float)pow(10,EbNodBMetric/10); - const float R = 1.0f*(QRA64_KC)/(QRA64_NC); - - qra64codec *pcodec = (qra64codec*)malloc(sizeof(qra64codec)); - - if (!pcodec) - return 0; // can't allocate memory - - pcodec->decEsNoMetric = 1.0f*QRA64_m*R*EbNoMetric; - pcodec->apflags = flags; - - memset(pcodec->apmsg_set,0,APTYPE_SIZE*sizeof(int)); - - if (flags==QRA_NOAP) - return pcodec; - - // for QRA_USERAP and QRA_AUTOAP modes we always enable [CQ/QRZ ? ?] mgs look-up. - // encode CQ/QRZ AP messages - // NOTE: Here we handle only CQ and QRZ msgs. - // 'CQ nnn', 'CQ DX' and 'DE' msgs will be handled by the decoder - // as messages with no a-priori knowledge - qra64_apset(pcodec, CALL_CQ, 0, GRID_BLANK, APTYPE_CQQRZ); - - // initialize masks for decoding with a-priori information - encodemsg_jt65(pcodec->apmask_cqqrz, MASK_CQQRZ, 0, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_cqqrz_ooo, MASK_CQQRZ, 0, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call1, MASK_CALL1, 0, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call1_ooo, MASK_CALL1, 0, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call2, 0, MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call2_ooo, 0, MASK_CALL2, MASK_GRIDFULL); - encodemsg_jt65(pcodec->apmask_call1_call2, MASK_CALL1,MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_call1_call2_grid,MASK_CALL1,MASK_CALL2, MASK_GRIDFULL12); - encodemsg_jt65(pcodec->apmask_cq_call2, MASK_CQQRZ, MASK_CALL2, MASK_GRIDBIT); - encodemsg_jt65(pcodec->apmask_cq_call2_ooo, MASK_CQQRZ, MASK_CALL2, MASK_GRIDFULL12); - - return pcodec; -} - -void qra64_close(qra64codec *pcodec) -{ - free(pcodec); -} - -int qra64_apset(qra64codec *pcodec, const int mycall, const int hiscall, const int grid, const int aptype) -{ -// Set decoder a-priori knowledge accordingly to the type of the message to look up for -// arguments: -// pcodec = pointer to a qra64codec data structure as returned by qra64_init -// mycall = mycall to look for -// hiscall = hiscall to look for -// grid = grid to look for -// aptype = define and masks the type of AP to be set accordingly to the following: -// APTYPE_CQQRZ set [cq/qrz ? ?/blank] -// APTYPE_MYCALL set [mycall ? ?/blank] -// APTYPE_HISCALL set [? hiscall ?/blank] -// APTYPE_BOTHCALLS set [mycall hiscall ?] -// APTYPE_FULL set [mycall hiscall grid] -// APTYPE_CQHISCALL set [cq/qrz hiscall ?/blank] and [cq/qrz hiscall grid] -// returns: -// 0 on success -// -1 when qra64_init was called with the QRA_NOAP flag -// -2 invalid apytpe - - if (pcodec->apflags==QRA_NOAP) - return -1; - - switch (aptype) { - case APTYPE_CQQRZ: - encodemsg_jt65(pcodec->apmsg_cqqrz, CALL_CQ, 0, GRID_BLANK); - break; - case APTYPE_MYCALL: - encodemsg_jt65(pcodec->apmsg_call1, mycall, 0, GRID_BLANK); - break; - case APTYPE_HISCALL: - encodemsg_jt65(pcodec->apmsg_call2, 0, hiscall, GRID_BLANK); - break; - case APTYPE_BOTHCALLS: - encodemsg_jt65(pcodec->apmsg_call1_call2, mycall, hiscall, GRID_BLANK); - break; - case APTYPE_FULL: - encodemsg_jt65(pcodec->apmsg_call1_call2_grid, mycall, hiscall, grid); - break; - case APTYPE_CQHISCALL: - encodemsg_jt65(pcodec->apmsg_cq_call2, CALL_CQ, hiscall, GRID_BLANK); - encodemsg_jt65(pcodec->apmsg_cq_call2_grid, CALL_CQ, hiscall, grid); - break; - default: - return -2; // invalid ap type - } - - pcodec->apmsg_set[aptype]=1; // signal the decoder to look-up for the specified type - - - return 0; -} -void qra64_apdisable(qra64codec *pcodec, const int aptype) -{ - if (pcodec->apflags==QRA_NOAP) - return; - - if (aptype=APTYPE_SIZE) - return; - - pcodec->apmsg_set[aptype] = 0; // signal the decoder not to look-up to the specified type -} - -void qra64_encode(qra64codec *pcodec, int *y, const int *x) -{ - int encx[QRA64_KC]; // encoder input buffer - int ency[QRA64_NC]; // encoder output buffer - - int hiscall,mycall,grid; - - memcpy(encx,x,QRA64_K*sizeof(int)); // Copy input to encoder buffer - encx[QRA64_K]=calc_crc6(encx,QRA64_K); // Compute and add crc symbol - qra_encode(&QRA64_CODE, ency, encx); // encode msg+crc using given QRA code - - // copy codeword to output puncturing the crc symbol - memcpy(y,ency,QRA64_K*sizeof(int)); // copy information symbols - memcpy(y+QRA64_K,ency+QRA64_KC,QRA64_C*sizeof(int)); // copy parity symbols - - if (pcodec->apflags!=QRA_AUTOAP) - return; - - // Here we handle the QRA_AUTOAP mode -------------------------------------------- - - // When a [hiscall mycall ?] msg is detected we instruct the decoder - // to look for [mycall hiscall ?] msgs - // otherwise when a [cq mycall ?] msg is sent we reset the APTYPE_BOTHCALLS - - // look if the msg sent is a std type message (bit15 of grid field = 0) - if ((x[9]&0x80)==1) - return; // no, it's a text message, nothing to do - - // It's a [hiscall mycall grid] message - - // We assume that mycall is our call (but we don't check it) - // hiscall the station we are calling or a general call (CQ/QRZ/etc..) - decodemsg_jt65(&hiscall,&mycall,&grid,x); - - - if ((hiscall>=CALL_CQ && hiscall<=CALL_CQ999) || hiscall==CALL_CQDX || - hiscall==CALL_DE) { - // tell the decoder to look for msgs directed to us - qra64_apset(pcodec,mycall,0,0,APTYPE_MYCALL); - // We are making a general call and don't know who might reply - // Reset APTYPE_BOTHCALLS so decoder won't look for [mycall hiscall ?] msgs - qra64_apdisable(pcodec,APTYPE_BOTHCALLS); - } else { - // We are replying to someone named hiscall - // Set APTYPE_BOTHCALLS so decoder will try for [mycall hiscall ?] msgs - qra64_apset(pcodec,mycall, hiscall, GRID_BLANK, APTYPE_BOTHCALLS); - } - -} - -#define EBNO_MIN -10.0f // minimum Eb/No value returned by the decoder (in dB) -int qra64_decode(qra64codec *pcodec, float *ebno, int *x, const float *rxen) -{ - int k; - float *srctmp, *dsttmp; - float ix[QRA64_NC*QRA64_M]; // (depunctured) intrisic information - int xdec[QRA64_KC]; // decoded message (with crc) - int ydec[QRA64_NC]; // re-encoded message (for snr calculations) - float noisestd; // estimated noise variance - float msge; // estimated message energy - float ebnoval; // estimated Eb/No - int rc; - - if (QRA64_NMSG!=QRA64_CODE.NMSG) // sanity check - return -16; // QRA64_NMSG define is wrong - - // compute symbols intrinsic probabilities from received energy observations - noisestd = qra_mfskbesselmetric(ix, rxen, QRA64_m, QRA64_N,pcodec->decEsNoMetric); - - // de-puncture observations adding a uniform distribution for the crc symbol - - // move check symbols distributions one symbol towards the end - dsttmp = PD_ROWADDR(ix,QRA64_M, QRA64_NC-1); //Point to last symbol prob dist - srctmp = dsttmp-QRA64_M; // source is the previous pd - for (k=0;k57.004f) - ebnoval=57.004f; - ebnoval = ebnoval*57.03f/(57.03f-ebnoval); - - // compute value in dB - if (ebnoval<=0) - ebnoval = EBNO_MIN; // assume a minimum, positive value - else - ebnoval = 10.0f*(float)log10(ebnoval); - if (ebnoval4) - return -17; // invalid submode - - if (B90<1.0f || B90>238.0f) - return -18; // B90 out of range - - // compute index to most appropriate amplitude weighting function coefficients - hidx = (int)(log((float)B90)/log(1.09f) - 0.499f); - - if (hidx<0 || hidx > 64) - return -19; // index of weighting function out of range - - if (fadingModel==0) { // gaussian fading model - // point to gaussian weighting taps - hlen = hlen_tab_gauss[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = hptr_tab_gauss[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else if (fadingModel==1) { - // point to lorentzian weighting taps - hlen = hlen_tab_lorentz[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = hptr_tab_lorentz[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else - return -20; // invalid fading model index - - - // compute (euristically) the optimal decoder metric accordingly the given spread amount - // We assume that the decoder threshold is: - // Es/No(dB) = Es/No(AWGN)(dB) + 8*log(B90)/log(240)(dB) - // that's to say, at the maximum Doppler spread bandwidth (240 Hz) there's a ~8 dB Es/No degradation - // over the AWGN case - tempf = 8.0f*(float)log((float)B90)/(float)log(240.0f); - EsNoMetric = pcodec->decEsNoMetric*(float)pow(10.0f,tempf/10.0f); - - // Step 1 ----------------------------------------------------------------------------------- - // Evaluate the noise stdev from the received energies at nominal tone frequencies - // and transform energies to amplitudes - tempf = hptr[hlen-1]; // amplitude weigth at nominal freq; - tempf = tempf*tempf; // fractional energy at nominal freq. bin - - noisestd = qra64_fastfading_estim_noise_std(rxen, EsNoMetric, submode); - cmetric = (float)sqrt(M_PI_2*EsNoMetric)/noisestd; - - // Step 2 ----------------------------------------------------------------------------------- - // Compute message symbols probability distributions - qra64_fastfading_intrinsics(ix, rxen, hptr, hlen, cmetric, submode); - - // Step 3 --------------------------------------------------------------------------- - // De-puncture observations adding a uniform distribution for the crc symbol - // Move check symbols distributions one symbol towards the end - dsttmp = PD_ROWADDR(ix,QRA64_M, QRA64_NC-1); //Point to last symbol prob dist - srctmp = dsttmp-QRA64_M; // source is the previous pd - for (k=0;k238.0f) - return -18; // B90 out of range - - // compute index to most appropriate amplitude weighting function coefficients - hidx = (int)(log((float)B90)/log(1.09f) - 0.499f); - - if (hidx<0 || hidx > 64) - return -19; // index of weighting function out of range - - if (fadingModel==0) { // gaussian fading model - // point to gaussian weighting taps - hlen = hlen_tab_gauss[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = hptr_tab_gauss[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else if (fadingModel==1) { - // point to lorentzian weighting taps - hlen = hlen_tab_lorentz[hidx]; // hlen = (L+1)/2 (where L=(odd) number of taps of w fun) - hptr = hptr_tab_lorentz[hidx]; // pointer to the first (L+1)/2 coefficients of w fun - } - else - return -20; // invalid fading model index - - - // Compute the unfaded tone amplitudes from the Eb/No value passed to the call - N0 = 1.0f; // assume unitary noise PSD - sigmanoise = (float)sqrt(N0/2); - EsN0 = (float)pow(10.0f,EbN0dB/10.0f)*QRA64_m*QRA64_K/QRA64_N; // Es/No = m*R*Eb/No - Es = EsN0*N0; - A = (float)sqrt(Es/2.0f); // unfaded tone amplitude (i^2+q^2 = Es/2+Es/2 = Es) - - - // Generate gaussian noise iq components - normrnd_s(channel_out, bpm*2, 0 , sigmanoise); - - // Add message symbols energies - for (n=0;n=0;j--) { - sigmasig = A*hptr[j]; - normrnd_s(iq, 2, 0 , sigmasig); -// iq[0]=sigmasig*sqrt(2); iq[1]=0; debug: used to verify Eb/No - *curi++ += iq[0]; - *curq++ += iq[1]; -// tote +=iq[0]*iq[0]+iq[1]*iq[1]; // debug - } - - } - -// tote = tote/QRA64_N; // debug - - // compute total bin energies (S+N) and store in first half of buffer - curi = channel_out; - curq = channel_out+bpm; - for (n=0;n=0;j--) { - u = *curbin++ * hptr[j]*cmetric; - u = u*u/(u+(float)M_E); // log(I0(u)) approx. - loglh = loglh + u; - } - if (loglh>maxloglh) // keep track of the max loglikelihood - maxloglh = loglh; - curix[k]=loglh; - } - // scale to likelihoods - sumix = 0.f; - for (k=0;k=0;j--) { - u = *curbin++; - msgsn += u*u; - } - - } - - msgsn = msgsn/(QRA64_N*tothlen); // avg msg energy per bin (noise included) - - // as sigma is overestimated (sigmatrue = sigma*sqrt((1+EsNoMetric/bps)/(1+EsNo/bps)) - // we have: msgsn = (1+x/hlen)/(1+x/bps)*2*sigma^2*(1+EsnoMetric/bps), where x = Es/N0(true) - // - // we can then write: - // u = msgsn/2.0f/(sigma*sigma)/(1.0f+EsNoMetric/bps); - // (1+x/hlen)/(1+x/bps) = u - - u = msgsn/(2.0f*sigma*sigma)/(1.0f+EsNoMetric/bps); - - // check u>1 - if (u<1) - return 0.f; - - // check u(bps/tothlen)) - return 10000.f; - - // solve for Es/No - esno = (u-1.0f)/(1.0f/tothlen-u/bps); - - return esno; - - -} - - -// Attempt to decode given intrisic information -static int qra64_decode_attempts(qra64codec *pcodec, int *xdec, const float *ix) -{ - int rc; - - // Attempt to decode without a-priori info -------------------------------- - rc = qra64_do_decode(xdec, ix, NULL, NULL); - if (rc>=0) - return 0; // successfull decode with AP0 - else - if (pcodec->apflags==QRA_NOAP) - // nothing more to do - return rc; // rc<0 = unsuccessful decode - - // Here we handle decoding with AP knowledge - - // Attempt to decode CQ calls - rc = qra64_do_decode(xdec,ix,pcodec->apmask_cqqrz, pcodec->apmsg_cqqrz); - if (rc>=0) return 1; // decoded [cq/qrz ? ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cqqrz_ooo, - pcodec->apmsg_cqqrz); - if (rc>=0) return 2; // decoded [cq ? ooo] - - // attempt to decode calls directed to us - if (pcodec->apmsg_set[APTYPE_MYCALL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1, - pcodec->apmsg_call1); - if (rc>=0) return 3; // decoded [mycall ? ?] - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_ooo, - pcodec->apmsg_call1); - if (rc>=0) return 4; // decoded [mycall ? ooo] - } - - // attempt to decode [mycall srccall ?] msgs - if (pcodec->apmsg_set[APTYPE_BOTHCALLS]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_call2, - pcodec->apmsg_call1_call2); - if (rc>=0) return 5; // decoded [mycall srccall ?] - } - - // attempt to decode [? hiscall ?/b] msgs - if (pcodec->apmsg_set[APTYPE_HISCALL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call2, - pcodec->apmsg_call2); - if (rc>=0) return 6; // decoded [? hiscall ?] - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call2_ooo, - pcodec->apmsg_call2); - if (rc>=0) return 7; // decoded [? hiscall ooo] - } - - // attempt to decode [cq/qrz hiscall ?/b/grid] msgs - if (pcodec->apmsg_set[APTYPE_CQHISCALL]) { - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2, - pcodec->apmsg_cq_call2); - if (rc>=0) return 9; // decoded [cq/qrz hiscall ?] - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2_ooo, - pcodec->apmsg_cq_call2_grid); - if (rc>=0) { - // Full AP mask need special handling - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_cq_call2_grid,xdec, QRA64_K*sizeof(int))!=0) - return -1; - else - return 11; // decoded [cq/qrz hiscall grid] - }; - - rc = qra64_do_decode(xdec, ix, pcodec->apmask_cq_call2_ooo, - pcodec->apmsg_cq_call2); - if (rc>=0) { - // Full AP mask need special handling - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_cq_call2,xdec, QRA64_K*sizeof(int))!=0) - return -1; - else - return 10; // decoded [cq/qrz hiscall ] - } - } - - // attempt to decode [mycall hiscall grid] - if (pcodec->apmsg_set[APTYPE_FULL]) { - rc = qra64_do_decode(xdec, ix, pcodec->apmask_call1_call2_grid, - pcodec->apmsg_call1_call2_grid); - if (rc>=0) { - // Full AP mask need special handling - // All the three msg fields were given. - // To minimize false decodes we check the decoded message - // with what passed in the ap_set call - if (memcmp(pcodec->apmsg_call1_call2_grid,xdec, QRA64_K*sizeof(int))!=0) - return -1; - else - return 8; // decoded [mycall hiscall grid] - } - } - - // all decoding attempts failed - return rc; -} - - - -// Decode with given a-priori information -static int qra64_do_decode(int *xdec, const float *pix, const int *ap_mask, - const int *ap_x) -{ - int rc; - const float *ixsrc; - float ix_masked[QRA64_NC*QRA64_M]; // Masked intrinsic information - float ex[QRA64_NC*QRA64_M]; // Extrinsic information from the decoder - - float v2cmsg[QRA64_NMSG*QRA64_M]; // buffers for the decoder messages - float c2vmsg[QRA64_NMSG*QRA64_M]; - - if (ap_mask==NULL) { // no a-priori information - ixsrc = pix; // intrinsic source is what passed as argument - } else { - // a-priori information provided - // mask channel observations with a-priori - ix_mask(ix_masked,pix,ap_mask,ap_x); - ixsrc = ix_masked; // intrinsic source is the masked version - } - - // run the decoding algorithm - rc = qra_extrinsic(&QRA64_CODE,ex,ixsrc,QRA64_NITER,v2cmsg,c2vmsg); - if (rc<0) - return -1; // no convergence in given iterations - - // decode - qra_mapdecode(&QRA64_CODE,xdec,ex,ixsrc); - - // verify crc - if (calc_crc6(xdec,QRA64_K)!=xdec[QRA64_K]) // crc doesn't match (detected error) - return -2; // decoding was succesfull but crc doesn't match - - return 0; -} - - -// crc functions -------------------------------------------------------------- -// crc-6 generator polynomial -// g(x) = x^6 + a5*x^5 + ... + a1*x + a0 - -// g(x) = x^6 + x + 1 -#define CRC6_GEN_POL 0x30 // MSB=a0 LSB=a5 - -// g(x) = x^6 + x^2 + x + 1 (See: https://users.ece.cmu.edu/~koopman/crc/) -// #define CRC6_GEN_POL 0x38 // MSB=a0 LSB=a5. Simulation results are similar - -static int calc_crc6(const int *x, int sz) -{ - // todo: compute it faster using a look up table - int k,j,t,sr = 0; - for (k=0;k>1) ^ CRC6_GEN_POL; - else - sr = (sr>>1); - t>>=1; - } - } - return sr; -} - -static void ix_mask(float *dst, const float *src, const int *mask, - const int *x) -{ - // mask intrinsic information (channel observations) with a priori knowledge - - int k,kk, smask; - float *row; - - memcpy(dst,src,(QRA64_NC*QRA64_M)*sizeof(float)); - - for (k=0;k>22)&0x3F; - y[1]= (call1>>16)&0x3F; - y[2]= (call1>>10)&0x3F; - y[3]= (call1>>4)&0x3F; - y[4]= (call1<<2)&0x3F; - - y[4] |= (call2>>26)&0x3F; - y[5]= (call2>>20)&0x3F; - y[6]= (call2>>14)&0x3F; - y[7]= (call2>>8)&0x3F; - y[8]= (call2>>2)&0x3F; - y[9]= (call2<<4)&0x3F; - - y[9] |= (grid>>12)&0x3F; - y[10]= (grid>>6)&0x3F; - y[11]= (grid)&0x3F; - -} -void decodemsg_jt65(int *call1, int *call2, int *grid, const int *x) -{ - int nc1, nc2, ng; - - nc1 = x[4]>>2; - nc1 |= x[3]<<4; - nc1 |= x[2]<<10; - nc1 |= x[1]<<16; - nc1 |= x[0]<<22; - - nc2 = x[9]>>4; - nc2 |= x[8]<<2; - nc2 |= x[7]<<8; - nc2 |= x[6]<<14; - nc2 |= x[5]<<20; - nc2 |= (x[4]&0x03)<<26; - - ng = x[11]; - ng |= x[10]<<6; - ng |= (x[9]&0x0F)<<12; - - *call1 = nc1; - *call2 = nc2; - *grid = ng; -} diff --git a/lib/qra/qra64/qra64_subs.c b/lib/qra/qra64/qra64_subs.c deleted file mode 100644 index b60f9fa..0000000 --- a/lib/qra/qra64/qra64_subs.c +++ /dev/null @@ -1,65 +0,0 @@ -// qra64_subs.c -// Fortran interface routines for QRA64 - -#include "qra64.h" -#include - -static qra64codec *pqra64codec = NULL; - -void qra64_enc_(int x[], int y[]) -{ - if (pqra64codec==NULL) pqra64codec = qra64_init(QRA_USERAP); - qra64_encode(pqra64codec, y, x); -} - -void qra64_dec_(float r[], int* nc1, int* nc2, int* ng2, int* APtype, - int* iset, int* ns0, float* b0, int* nf0, - int xdec[], float* snr, int* rc) -{ -/* - APtype: AP ------------------------------------------------------------------------ - -1 0 (no AP information) - 0 [CQ/QRZ ? ? ] 25/37 - 1 [MyCall ? ? ] 25/37 - 2 [ ? HisCall ? ] 25/37 - 3 [MyCall HisCall ? ] 49/68 - 4 [MyCall HisCall grid] 68 - 5 [CQ/QRZ HisCall ? ] 49/68 - - rc Message format AP APTYPE Comments ------------------------------------------------------------------------- - -16 Failed sanity check - -2 Decoded but CRC failed - -1 No decode - 0 [ ? ? ? ] 0 -1 Decode with no AP info - 1 [CQ/QRZ ? ? ] 25 0 - 2 [CQ/QRZ ? _ ] 37 0 - 3 [MyCall ? ? ] 25 1 - 4 [MyCall ? _ ] 37 1 - 5 [MyCall HisCall ? ] 49 3 - 6 [ ? HisCall ? ] 25 2 Optional - 7 [ ? HisCall _ ] 37 2 Optional - 8 [MyCall HisCall Grid] 68 4 - 9 [CQ/QRZ HisCall ? ] 49 5 Optional (not needed?) - 10 [CQ/QRZ HisCall _ ] 68 5 Optional - 11 [CQ/QRZ HisCall Grid] 68 ? Optional -*/ - - float EbNodBEstimated; - int err=0; - int nSubmode=*ns0; - float b90=*b0; - int nFadingModel=*nf0; - - if(pqra64codec==NULL) pqra64codec = qra64_init(QRA_USERAP); - err=qra64_apset(pqra64codec,*nc1,*nc2,*ng2,*APtype); - if(err<0) printf("ERROR: qra64_apset returned %d\n",err); - - if(*iset==0) { - *rc = qra64_decode_fastfading(pqra64codec,&EbNodBEstimated,xdec,r, - nSubmode,b90,nFadingModel); - *snr = EbNodBEstimated - 31.0; - } -} - diff --git a/lib/qra/qra64/qra64example.txt b/lib/qra/qra64/qra64example.txt deleted file mode 100644 index 3add33d..0000000 --- a/lib/qra/qra64/qra64example.txt +++ /dev/null @@ -1,88 +0,0 @@ -$ qra64_nico -h - -QRA64 Mode Tests -2016, Nico Palermo - IV3NWV - ---------------------------- - -Syntax: qra64 [-s] [-c] [-a] [-t] [-h] -Options: - -s : set simulation SNR in 2500 Hz BW (default:-27.5 dB) - -c : set channel type 0=AWGN (default) 1=Rayleigh - -a : set decode type 0=NOAP 1=AUTOAP (default) 2=USERAP - -t: 0=simulate seq of msgs between IV3NWV and K1JT (default) - 1=simulate K1JT receiving K1JT IV3NWV JN66 - 2=simulate fast-fading routines (option -c ignored) -Options used only for fast-fading simulations: - -b : 90% fading bandwidth in Hz [1..230 Hz] (default = 2.5 Hz) - -m : fading model. 0=Gauss, 1=Lorentz (default = Lorentz) - -q : qra64 submode. 0=QRA64A,... 4=QRA64E (default = QRA64A) - -h: this help - - -############################################################################# -Usage example: - -qra64 -c2 -t2 -a2 -b50 -m1 -q2 -s-26.0 -n50000 - -Simulate a fast-fading channel (-c2) -Evaluate decoder performance (-t2) with -USER_AP (-a2) -B90 = 50 Hz (-b50) -Lorentz model (-m1) -submode QRA64C (-q2) -Input SNR = -26.0 dB (-s-26.0) -Simulate 50000 transmissions (-n50000) - -(type qra64 -h for command syntax) - -Command Output: - -Input SNR = -26.0dB ap-mode=USER AP - -Simulating the fast-fading channel -B90=50.00 Hz - Fading Model=Lorentz - Submode=QRA64C -Decoder metric = Matched to fast-fading signal - -Encoding msg [K1JT IV3NWV JN66] -50000 transmissions will be simulated - -K1JT decoder enabled for [CQ ? ?/blank] -K1JT decoder enabled for [K1JT ? ?/blank] -K1JT decoder enabled for [? IV3NWV ?/blank] -K1JT decoder enabled for [K1JT IV3NWV ?] -K1JT decoder enabled for [K1JT IV3NWV JN66] -K1JT decoder enabled for [CQ IV3NWV ?/b/JN66] - -Now decoding with K1JT's decoder... - 5.5 % -Undetected error with rc=6 - 13.1 % -Undetected error with rc=7 - 70.8 % -Undetected error with rc=1 - 75.8 % -Undetected error with rc=9 - 88.9 % -Undetected error with rc=6 - 100.0 % - -Msgs transmitted:50000 -Msg decoded: - -rc= 0 0 with [? ? ?] AP0 -rc= 1 0 with [CQ ? ?] AP27 -rc= 2 0 with [CQ ? ] AP42 -rc= 3 145 with [CALL ? ?] AP29 -rc= 4 0 with [CALL ? ] AP44 -rc= 5 12085 with [CALL CALL ?] AP57 -rc= 6 0 with [? CALL ?] AP29 -rc= 7 0 with [? CALL ] AP44 -rc= 8 24307 with [CALL CALL G] AP72 -rc= 9 0 with [CQ CALL ?] AP55 -rc=10 0 with [CQ CALL ] AP70 -rc=11 0 with [CQ CALL G] AP70 - -Total: 36537/50000 (5 undetected errors) - -Estimated SNR (average in dB) = -26.26 dB diff --git a/lib/qra/qra64/qra64sim.f90 b/lib/qra/qra64/qra64sim.f90 deleted file mode 100644 index b7ca2e1..0000000 --- a/lib/qra/qra64/qra64sim.f90 +++ /dev/null @@ -1,170 +0,0 @@ -program qra64sim - -! Generate simulated QRA64 data for testing the decoder. - - use wavhdr - use packjt - parameter (NMAX=54*12000) ! = 648,000 - parameter (NFFT=10*65536,NH=NFFT/2) - type(hdr) h !Header for .wav file - integer*2 iwave(NMAX) !Generated waveform - integer*4 itone(84) !Channel symbols (values 0-63) - real*4 xnoise(NMAX) !Generated random noise - real*4 dat(NMAX) !Generated real data - complex cdat(NMAX) !Generated complex waveform - complex cspread(0:NFFT-1) !Complex amplitude for Rayleigh fading - complex z - real*8 f0,dt,twopi,phi,dphi,baud,fsample,freq - character msg*22,fname*11,csubmode*1,arg*12 - character msgsent*22 - - nargs=iargc() - if(nargs.ne. 7) then - print *, 'Usage: qra64sim "msg" A-E Nsigs fDop DT Nfiles SNR' - print *, 'Example qra64sim "K1ABC W9XYZ EN37" A 10 0.2 0.0 1 0' - go to 999 - endif - call getarg(1,msg) - call getarg(2,csubmode) - mode64=2**(ichar(csubmode)-ichar('A')) - call getarg(3,arg) - read(arg,*) nsigs - call getarg(4,arg) - read(arg,*) fspread - call getarg(5,arg) - read(arg,*) xdt - call getarg(6,arg) - read(arg,*) nfiles - call getarg(7,arg) - read(arg,*) snrdb - - if(mode64.ge.8) nsigs=1 - rms=100. - fsample=12000.d0 !Sample rate (Hz) - dt=1.d0/fsample !Sample interval (s) - twopi=8.d0*atan(1.d0) - npts=54*12000 !Total samples in .wav file - nsps=6912 - baud=12000.d0/nsps !Keying rate = 1.7361111111 - nsym=84 !Number of channel symbols - h=default_header(12000,npts) - dfsig=2000.0/nsigs !Freq spacing between sigs in file (Hz) - ichk=0 - - write(*,1000) -1000 format('File Sig Freq A-E S/N DT Dop Message'/60('-')) - - do ifile=1,nfiles !Loop over requested number of files - write(fname,1002) ifile !Output filename -1002 format('000000_',i4.4) - open(10,file=fname//'.wav',access='stream',status='unknown') - xnoise=0. - cdat=0. - if(snrdb.lt.90) then - do i=1,npts - xnoise(i)=gran() !Generate gaussian noise - enddo - endif - - do isig=1,nsigs !Generate requested number of sigs - if(mod(nsigs,2).eq.0) f0=1500.0 + dfsig*(isig-0.5-nsigs/2) - if(mod(nsigs,2).eq.1) f0=1500.0 + dfsig*(isig-(nsigs+1)/2) - if(nsigs.eq.1) f0=1000.0 - xsnr=snrdb - if(snrdb.eq.0.0) xsnr=-20 - isig - - call genqra64(msg,ichk,msgsent,itone,itype) - - bandwidth_ratio=2500.0/6000.0 - sig=sqrt(2*bandwidth_ratio)*10.0**(0.05*xsnr) - if(xsnr.gt.90.0) sig=1.0 - write(*,1020) ifile,isig,f0,csubmode,xsnr,xdt,fspread,msg -1020 format(i4,i4,f10.3,2x,a1,2x,f5.1,f6.2,f6.1,1x,a22) - - phi=0.d0 - dphi=0.d0 - k=(xdt+1.0)*12000 !Start audio at t = xdt + 1.0 s - isym0=-99 - do i=1,npts !Add this signal into cdat() - isym=i/nsps + 1 - if(isym.gt.nsym) exit - if(isym.ne.isym0) then - freq=f0 + itone(isym)*baud*mode64 - dphi=twopi*freq*dt - isym0=isym - endif - phi=phi + dphi - if(phi.gt.twopi) phi=phi-twopi - xphi=phi - z=cmplx(cos(xphi),sin(xphi)) - k=k+1 - if(k.ge.1) cdat(k)=cdat(k) + sig*z - enddo - enddo - - if(fspread.ne.0) then !Apply specified Doppler spread - df=12000.0/nfft - twopi=8*atan(1.0) - cspread(0)=1.0 - cspread(NH)=0. - b=6.0 !Lorenzian 3/28 onward - do i=1,NH - f=i*df - x=b*f/fspread - z=0. - a=0. - if(x.lt.3.0) then !Cutoff beyond x=3 - a=sqrt(1.111/(1.0+x*x)-0.1) !Lorentzian - call random_number(r1) - phi1=twopi*r1 - z=a*cmplx(cos(phi1),sin(phi1)) - endif - cspread(i)=z - z=0. - if(x.lt.50.0) then - call random_number(r2) - phi2=twopi*r2 - z=a*cmplx(cos(phi2),sin(phi2)) - endif - cspread(NFFT-i)=z - enddo - - do i=0,NFFT-1 - f=i*df - if(i.gt.NH) f=(i-nfft)*df - s=real(cspread(i))**2 + aimag(cspread(i))**2 -! write(13,3000) i,f,s,cspread(i) -!3000 format(i5,f10.3,3f12.6) - enddo -! s=real(cspread(0))**2 + aimag(cspread(0))**2 -! write(13,3000) 1024,0.0,s,cspread(0) - - call four2a(cspread,NFFT,1,1,1) !Transform to time domain - - sum=0. - do i=0,NFFT-1 - p=real(cspread(i))**2 + aimag(cspread(i))**2 - sum=sum+p - enddo - avep=sum/NFFT - fac=sqrt(1.0/avep) - cspread=fac*cspread !Normalize to constant avg power - cdat=cspread(1:npts)*cdat !Apply Rayleigh fading - -! do i=0,NFFT-1 -! p=real(cspread(i))**2 + aimag(cspread(i))**2 -! write(14,3010) i,p,cspread(i) -!3010 format(i8,3f12.6) -! enddo - - endif - - dat=aimag(cdat) + xnoise !Add the generated noise - fac=32767.0/nsigs - if(snrdb.ge.90.0) iwave(1:npts)=nint(fac*dat(1:npts)) - if(snrdb.lt.90.0) iwave(1:npts)=nint(rms*dat(1:npts)) - write(10) h,iwave(1:npts) !Save the .wav file - close(10) - enddo - -999 end program qra64sim diff --git a/lib/qra/qracodes/Makefile.Win b/lib/qra/qracodes/Makefile.Win deleted file mode 100644 index fb30504..0000000 --- a/lib/qra/qracodes/Makefile.Win +++ /dev/null @@ -1,33 +0,0 @@ -CC = gcc -CFLAGS = -O2 -Wall -I. -D_WIN32 - -# Default rules -%.o: %.c - ${CC} ${CFLAGS} -c $< -%.o: %.f - ${FC} ${FFLAGS} -c $< -%.o: %.F - ${FC} ${FFLAGS} -c $< -%.o: %.f90 - ${FC} ${FFLAGS} -c $< -%.o: %.F90 - ${FC} ${FFLAGS} -c $< - -all: libqra64.a qracodes.exe - -OBJS1 = normrnd.o npfwht.o pdmath.o qra12_63_64_irr_b.o \ - qra13_64_64_irr_e.o qracodes.o - -libqra64.a: $(OBJS1) - ar cr libqra64.a $(OBJS1) - ranlib libqra64.a - -OBJS2 = main.o - -qracodes.exe: $(OBJS2) - ${CC} -o qracodes.exe $(OBJS2) libqra64.a -lm - -.PHONY : clean - -clean: - $(RM) *.o libqra64.a qracodes.exe diff --git a/lib/qra/qracodes/ebno10000.txt b/lib/qra/qracodes/ebno10000.txt deleted file mode 100644 index c41174b..0000000 --- a/lib/qra/qracodes/ebno10000.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Eb/No Values to be used during the code simulation -# Each line of this file indicates the Eb/No value to be simulated (in dB) -# and the number of errors to be detected by the decoder -0.6 10000 -1.1 10000 -1.6 10000 -2.1 10000 diff --git a/lib/qra/qracodes/ebnovalues.txt b/lib/qra/qracodes/ebnovalues.txt deleted file mode 100644 index 7dba138..0000000 --- a/lib/qra/qracodes/ebnovalues.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Eb/No Values to be used during the code simulation -# Each line of this file indicates the Eb/No value to be simulated (in dB) -# and the number of errors to be detected by the decoder -1.1 1000 -1.6 1000 -2.1 1000 -2.6 1000 -3.1 1000 -3.6 1000 -4.1 1000 -4.6 1000 -5.1 500 -5.6 200 -6.1 100 -6.6 50 \ No newline at end of file diff --git a/lib/qra/qracodes/ebnovaluesfast.txt b/lib/qra/qracodes/ebnovaluesfast.txt deleted file mode 100644 index b057b31..0000000 --- a/lib/qra/qracodes/ebnovaluesfast.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Eb/No Values to be used during the code simulation -# Each line of this file indicates the Eb/No value to be simulated (in dB) -# and the number of errors to be detected by the decoder -1.1 500 -1.6 500 -2.1 500 -2.6 500 -3.1 500 -3.6 500 -4.1 200 -4.6 50 diff --git a/lib/qra/qracodes/main.c b/lib/qra/qracodes/main.c deleted file mode 100644 index 5f9f067..0000000 --- a/lib/qra/qracodes/main.c +++ /dev/null @@ -1,737 +0,0 @@ -// main.c -// Word Error Rate test example for Q-ary RA codes over GF(64) -// -// (c) 2016 - Nico Palermo, IV3NWV -// -// Thanks to Andrea Montefusco IW0HDV for his help on adapting the sources -// to OSs other than MS Windows -// -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// Files in this package: -// main.c - this file -// normrnd.c/.h - random gaussian number generator -// npfwht.c/.h - Fast Walsh-Hadamard Transforms -// pdmath.c/.h - Elementary math on probability distributions -// qra12_63_64_irr_b.c/.h - Tables for a QRA(12,63) irregular RA code over GF(64) -// qra13_64_64_irr_e.c/.h - Tables for a QRA(13,64) irregular RA code " " -// qracodes.c/.h - QRA codes encoding/decoding functions -// -// ------------------------------------------------------------------------------- -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -// ----------------------------------------------------------------------------- - -// Two codes are available for simulations in this sowftware release: - -// QRA12_63_64_IRR_B: K=12 N=63 Q=64 irregular QRA code (defined in qra12_63_64_irr_b.h /.c) -// QRA13_64_64_IRR_E: K=13 N=64 Q=64 irregular QRA code (defined in qra13_64_64_irr_b.h /.c) - -// Codes with K=13 are designed to include a CRC as the 13th information symbol -// and improve the code UER (Undetected Error Rate). -// The CRC symbol is not sent along the channel (the codes are punctured) and the -// resulting code is still a (12,63) code with an effective code rate of R = 12/63. - -// ------------------------------------------------------------------------------ - -// OS dependent defines and includes -------------------------------------------- - -#if _WIN32 // note the underscore: without it, it's not msdn official! - // Windows (x64 and x86) - #include // required only for GetTickCount(...) - #include // _beginthread -#endif - -#if defined(__linux__) - -// remove unwanted macros -#define __cdecl - -// implements Windows API -#include - - unsigned int GetTickCount(void) { - struct timespec ts; - unsigned int theTick = 0U; - clock_gettime( CLOCK_REALTIME, &ts ); - theTick = ts.tv_nsec / 1000000; - theTick += ts.tv_sec * 1000; - return theTick; -} - -// Convert Windows millisecond sleep -// -// VOID WINAPI Sleep(_In_ DWORD dwMilliseconds); -// -// to Posix usleep (in microseconds) -// -// int usleep(useconds_t usec); -// -#include -#define Sleep(x) usleep(x*1000) - -#endif - -#if defined(__linux__) || ( defined(__MINGW32__) || defined (__MIGW64__) ) -#include -#endif - -#if __APPLE__ -#endif - -#include -#include - -#include "qracodes.h" -#include "normrnd.h" // gaussian numbers generator -#include "pdmath.h" // operations on probability distributions - -// defined codes -#include "qra12_63_64_irr_b.h" -#include "qra13_64_64_irr_e.h" - -// ----------------------------------------------------------------------------------- - -#define NTHREADS_MAX 160 - -// channel types -#define CHANNEL_AWGN 0 -#define CHANNEL_RAYLEIGH 1 - -// amount of a-priori information provided to the decoder -#define AP_NONE 0 -#define AP_28 1 -#define AP_44 2 -#define AP_56 3 - -const char ap_str[4][16] = { - "None", - "28 bit", - "44 bit", - "56 bit" -}; - -const char fnameout_pfx[2][64] = { - "wer-awgn-", - "wer-rayleigh-" -}; -const char fnameout_sfx[4][64] = { - "-ap00.txt", - "-ap28.txt", - "-ap44.txt", - "-ap56.txt" -}; - -const int ap_masks_jt65[4][13] = { -// Each row must be 13 entries long (to handle puntc. codes 13,64) -// The mask of 13th symbol (crc) is alway initializated to 0 - // AP0 - no a-priori knowledge - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - // AP28 - 1st field known [cq ? ?] or [dst ? ?] - {0x3F,0x3F,0x3F,0x3F,0x3C, 0, 0, 0, 0, 0, 0, 0}, - // AP44 - 1st and 3rd fields known [cq ? 0] or [dst ? 0] - {0x3F,0x3F,0x3F,0x3F,0x3C, 0, 0, 0, 0,0x0F,0x3F,0x3F}, - // AP56 - 1st and 2nd fields known [dst src ?] - {0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x30, 0, 0} -}; - -void ix_mask(const qracode *pcode, float *r, const int *mask, const int *x); - -void printword(char *msg, int *x, int size) -{ - int k; - printf("\n%s ",msg); - for (k=0;kc msg buffer - float *qra_c2vmsg; //[qra_NMSG*qra_M]; MP decoder c->v msg buffer - float *rp; // [qra_N*qra_M]; received samples (real component) buffer - float *rq; // [qra_N*qra_M]; received samples (imag component) buffer - float *chp; //[qra_N]; channel gains (real component) buffer - float *chq; //[qra_N]; channel gains (imag component) buffer - float *r; //[qra_N*qra_M]; received samples (amplitude) buffer - float *ix; // [qra_N*qra_M]; // intrinsic information to the MP algorithm - float *ex; // [qra_N*qra_M]; // extrinsic information from the MP algorithm - -} wer_test_ds; - -typedef void( __cdecl *pwer_test_thread)(wer_test_ds*); - -// crc-6 generator polynomial -// g(x) = x^6 + a5*x^5 + ... + a1*x + a0 - -// g(x) = x^6 + x + 1 -#define CRC6_GEN_POL 0x30 // MSB=a0 LSB=a5 - -// g(x) = x^6 + x^2 + x + 1 (as suggested by Joe. See: https://users.ece.cmu.edu/~koopman/crc/) -// #define CRC6_GEN_POL 0x38 // MSB=a0 LSB=a5. Simulation results are similar - -int calc_crc6(int *x, int sz) -{ - int k,j,t,sr = 0; - for (k=0;k>1) ^ CRC6_GEN_POL; - else - sr = (sr>>1); - t>>=1; - } - } - return sr; -} - -void wer_test_thread(wer_test_ds *pdata) -{ - const qracode *pcode=pdata->pcode; - const int qra_K = pcode->K; - const int qra_N = pcode->N; - const int qra_M = pcode->M; - const int qra_m = pcode->m; - const int NSAMPLES = pcode->N*pcode->M; - - const float No = 1.0f; // noise spectral density - const float sigma = (float)sqrt(No/2.0f); // std dev of noise I/Q components - const float sigmach = (float)sqrt(1/2.0f); // std dev of channel I/Q gains - - // Eb/No value for which we optimize the bessel metric - const float EbNodBMetric = 2.8f; - const float EbNoMetric = (float)pow(10,EbNodBMetric/10); - - int k,t,j,diff; - float R; - float EsNoMetric; - float EbNo, EsNo, Es, A; - int channel_type, code_type; - int nt=0; // transmitted codewords - int nerrs = 0; // total number of errors - int nerrsu = 0; // number of undetected errors - int rc; - - - // inizialize pointer to required buffers - int *x=pdata->x; // message buffer - int *y=pdata->y, *ydec=pdata->ydec; // encoded/decoded codeword buffers - float *qra_v2cmsg=pdata->qra_v2cmsg; // table of the v->c messages - float *qra_c2vmsg=pdata->qra_c2vmsg; // table of the c->v messages - float *rp=pdata->rp; // received samples (real component) - float *rq=pdata->rq; // received samples (imag component) - float *chp=pdata->chp; // channel gains (real component) - float *chq=pdata->chq; // channel gains (imag component) - float *r=pdata->r; // received samples amplitudes - float *ix=pdata->ix; // intrinsic information to the MP algorithm - float *ex=pdata->ex; // extrinsic information from the MP algorithm - - channel_type = pdata->channel_type; - code_type = pcode->type; - - // define the (true) code rate accordingly to the code type - switch(code_type) { - case QRATYPE_CRC: - R = 1.0f*(qra_K-1)/qra_N; - break; - case QRATYPE_CRCPUNCTURED: - R = 1.0f*(qra_K-1)/(qra_N-1); - break; - case QRATYPE_NORMAL: - default: - R = 1.0f*(qra_K)/(qra_N); - } - - EsNoMetric = 1.0f*qra_m*R*EbNoMetric; - - EbNo = (float)pow(10,pdata->EbNodB/10); - EsNo = 1.0f*qra_m*R*EbNo; - Es = EsNo*No; - A = (float)sqrt(Es); - - - // encode the input - if (code_type==QRATYPE_CRC || code_type==QRATYPE_CRCPUNCTURED) { - // compute the information message symbol check as the (negated) xor of all the - // information message symbols - for (k=0;k<(qra_K-1);k++) - x[k]=k%qra_M; - x[k]=calc_crc6(x,qra_K-1); - } - else - for (k=0;kstop==0) { - - // simulate the channel - // NOTE: in the case that the code is punctured, for simplicity - // we compute the channel outputs and the metric also for the crc symbol - // then we ignore its observation. - normrnd_s(rp,NSAMPLES,0,sigma); - normrnd_s(rq,NSAMPLES,0,sigma); - - if (channel_type == CHANNEL_AWGN) { - for (k=0;kdone = 1; - return; // unknown channel type - } - - // compute the squares of the amplitudes of the received samples - for (k=0;km,pcode->N,EsNoMetric); - - if (code_type==QRATYPE_CRCPUNCTURED) { - // ignore observations of the CRC symbol as it is not actually sent - // over the channel - pd_init(PD_ROWADDR(ix,qra_M,qra_K),pd_uniform(qra_m),qra_M); - } - - - if (pdata->ap_index!=0) - // mask channel observations with a priori knowledge - ix_mask(pcode,ix,ap_masks_jt65[pdata->ap_index],x); - - - // compute the extrinsic symbols probabilities with the message-passing algorithm - // stop if extrinsic information does not converges to 1 within the given number of iterations - rc = qra_extrinsic(pcode,ex,ix,100,qra_v2cmsg,qra_c2vmsg); - - if (rc>=0) { // the MP algorithm converged to Iex~1 in rc iterations - - // decode the codeword - qra_mapdecode(pcode,ydec,ex,ix); - - // look for undetected errors - if (code_type==QRATYPE_CRC || code_type==QRATYPE_CRCPUNCTURED) { - - j = 0; diff = 0; - for (k=0;k<(qra_K-1);k++) - diff |= (ydec[k]!=x[k]); - t = calc_crc6(ydec,qra_K-1); - if (t!=ydec[k]) // error detected - crc doesn't matches - nerrs += 1; - else - if (diff) { // decoded message is not equal to the transmitted one but - // the crc test passed - // add as undetected error - nerrsu += 1; - nerrs += 1; - // uncomment to see what the undetected error pattern looks like - //printword("U", ydec); - } - } - else - for (k=0;knt=nt; - pdata->nerrs=nerrs; - pdata->nerrsu=nerrsu; - - } - - pdata->done=1; - - #if _WIN32 - _endthread(); - #endif -} - -#if defined(__linux__) || ( defined(__MINGW32__) || defined (__MIGW64__) ) - -void *wer_test_pthread(void *p) -{ - wer_test_thread ((wer_test_ds *)p); - return 0; -} - -#endif - -void ix_mask(const qracode *pcode, float *r, const int *mask, const int *x) -{ - // mask intrinsic information (channel observations) with a priori knowledge - - int k,kk, smask; - const int qra_K=pcode->K; - const int qra_M=pcode->M; - const int qra_m=pcode->m; - - for (k=0;kNTHREADS_MAX) { - printf("Error: nthreads should be <=%d\n",NTHREADS_MAX); - return -1; - } - - sprintf(fnameout,"%s%s%s", - fnameout_pfx[chtype], - pcode->name, - fnameout_sfx[ap_index]); - - fout = fopen(fnameout,"w"); - fprintf(fout,"# Channel (0=AWGN,1=Rayleigh), Eb/No (dB), Transmitted codewords, Errors, Undetected Errors, Avg dec. time (ms), WER\n"); - - printf("\nTesting the code %s over the %s channel\nSimulation data will be saved to %s\n", - pcode->name, - chtype==CHANNEL_AWGN?"AWGN":"Rayleigh", - fnameout); - fflush (stdout); - - // init fixed thread parameters and preallocate buffers - for (j=0;jK*sizeof(int)); - wt[j].y = (int*)malloc(pcode->N*sizeof(int)); - wt[j].ydec = (int*)malloc(pcode->N*sizeof(int)); - wt[j].qra_v2cmsg = (float*)malloc(pcode->NMSG*pcode->M*sizeof(float)); - wt[j].qra_c2vmsg = (float*)malloc(pcode->NMSG*pcode->M*sizeof(float)); - wt[j].rp = (float*)malloc(pcode->N*pcode->M*sizeof(float)); - wt[j].rq = (float*)malloc(pcode->N*pcode->M*sizeof(float)); - wt[j].chp = (float*)malloc(pcode->N*sizeof(float)); - wt[j].chq = (float*)malloc(pcode->N*sizeof(float)); - wt[j].r = (float*)malloc(pcode->N*pcode->M*sizeof(float)); - wt[j].ix = (float*)malloc(pcode->N*pcode->M*sizeof(float)); - wt[j].ex = (float*)malloc(pcode->N*pcode->M*sizeof(float)); - } - - - for (k=0;k=nerrstgt[k]) { - for (j=0;j] [-t] [-c] [-a] [-f[-h]\n"); - printf("Options: \n"); - printf(" -q: code to simulate. 0=qra_12_63_64_irr_b\n"); - printf(" 1=qra_13_64_64_irr_e (default)\n"); - printf(" -t : number of threads to be used for the simulation [1..24]\n"); - printf(" (default=8)\n"); - printf(" -c : channel_type. 0=AWGN 1=Rayleigh \n"); - printf(" (default=AWGN)\n"); - printf(" -a : amount of a-priori information provided to decoder. \n"); - printf(" 0= No a-priori (default)\n"); - printf(" 1= 28 bit \n"); - printf(" 2= 44 bit \n"); - printf(" 3= 56 bit \n"); - printf(" -f : name of the file containing the Eb/No values to be simulated\n"); - printf(" (default=ebnovalues.txt)\n"); - printf(" This file should contain lines in this format:\n"); - printf(" # Eb/No(dB) Target Errors\n"); - printf(" 0.1 5000\n"); - printf(" 0.6 5000\n"); - printf(" 1.1 1000\n"); - printf(" 1.6 1000\n"); - printf(" ...\n"); - printf(" (lines beginning with a # are treated as comments\n\n"); -} - -#define SIM_POINTS_MAX 20 - -int main(int argc, char* argv[]) -{ - - float EbNodB[SIM_POINTS_MAX]; - int nerrstgt[SIM_POINTS_MAX]; - FILE *fin; - - char fnamein[128]= "ebnovalues.txt"; - char buf[128]; - - int nitems = 0; - int code_idx = 1; - int nthreads = 8; - int ch_type = CHANNEL_AWGN; - int ap_index = AP_NONE; - - // parse command line - while(--argc) { - argv++; - if (strncmp(*argv,"-h",2)==0) { - syntax(); - return 0; - } - else - if (strncmp(*argv,"-q",2)==0) { - code_idx = (int)atoi((*argv)+2); - if (code_idx>1) { - printf("Invalid code index\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-t",2)==0) { - nthreads = (int)atoi((*argv)+2); - printf("nthreads = %d\n",nthreads); - if (nthreads>NTHREADS_MAX) { - printf("Invalid number of threads\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-c",2)==0) { - ch_type = (int)atoi((*argv)+2); - if (ch_type>CHANNEL_RAYLEIGH) { - printf("Invalid channel type\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-a",2)==0) { - ap_index = (int)atoi((*argv)+2); - if (ap_index>AP_56) { - printf("Invalid a-priori information index\n"); - syntax(); - return -1; - } - } - else - if (strncmp(*argv,"-f",2)==0) { - strncpy(fnamein,(*argv)+2,127); - } - else - if (strncmp(*argv,"-h",2)==0) { - syntax(); - return -1; - } - else { - printf("Invalid option\n"); - syntax(); - return -1; - } - } - - // parse points to be simulated from the input file - fin = fopen(fnamein,"r"); - if (!fin) { - printf("Can't open file: %s\n",fnamein); - syntax(); - } - - while (fgets(buf,128,fin)!=0) - if (*buf=='#' || *buf=='\n' ) - continue; - else - if (nitems==SIM_POINTS_MAX) - break; - else - if (sscanf(buf,"%f %u",&EbNodB[nitems],&nerrstgt[nitems])!=2) { - printf("Invalid input file format\n"); - syntax(); - return -1; - } - else - nitems++; - - fclose(fin); - - if (nitems==0) { - printf("No Eb/No point specified in file %s\n",fnamein); - syntax(); - return -1; - } - - printf("\nQ-ary Repeat-Accumulate Code Word Error Rate Simulator\n"); - printf("2016, Nico Palermo - IV3NWV\n\n"); - - printf("Nthreads = %d\n",nthreads); - printf("Channel = %s\n",ch_type==CHANNEL_AWGN?"AWGN":"Rayleigh"); - printf("Codename = %s\n",codetotest[code_idx]->name); - printf("A-priori = %s\n",ap_str[ap_index]); - printf("Eb/No input file = %s\n\n",fnamein); - - wer_test_proc(codetotest[code_idx], nthreads, ch_type, ap_index, EbNodB, nerrstgt, nitems); - - return 0; -} - diff --git a/lib/qra/qracodes/normrnd.c b/lib/qra/qracodes/normrnd.c deleted file mode 100644 index 90abfa4..0000000 --- a/lib/qra/qracodes/normrnd.c +++ /dev/null @@ -1,82 +0,0 @@ -// normrnd.c -// functions to generate gaussian distributed numbers -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// -// Credits to Andrea Montefusco - IW0HDV for his help on adapting the sources -// to OSs other than MS Windows -// -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - - -#include "normrnd.h" - -#if _WIN32 // note the underscore: without it, it's not msdn official! - // Windows (x64 and x86) - #include // required only for GetTickCount(...) - #define K_RAND_MAX UINT_MAX -#elif _SVID_SOURCE || _XOPEN_SOURCE || __unix__ || (defined (__APPLE__) && defined(__MACH__)) /* POSIX or Unix or Apple */ - #include - #define rand_s(x) (*x)=(unsigned int)lrand48() // returns unsigned integers in the range 0..0x7FFFFFFF - #define K_RAND_MAX 0x7FFFFFFF // that's the max number - // generated by lrand48 -#else - #error "No good quality PRNG found" -#endif - - -// use MS rand_s(...) function -void normrnd_s(float *dst, int nitems, float mean, float stdev) -{ - unsigned int r; - float phi=0, u=0; - int set = 0; - - while (nitems--) - if (set==1) { - *dst++ = (float)sin(phi)*u*stdev+mean; - set = 0; - } - else { - rand_s((unsigned int*)&r); phi = (M_2PI/(1.0f+K_RAND_MAX))*r; - rand_s((unsigned int*)&r); u = (float)sqrt(-2.0f* log( (1.0f/(1.0f+K_RAND_MAX))*(1.0f+r) ) ); - *dst++ = (float)cos(phi)*u*stdev+mean; - set=1; - } -} - -/* NOT USED -// use MS rand() function -void normrnd(float *dst, int nitems, float mean, float stdev) -{ - float phi=0, u=0; - int set = 0; - - while (nitems--) - if (set==1) { - *dst++ = (float)sin(phi)*u*stdev+mean; - set = 0; - } - else { - phi = (M_2PI/(1.0f+RAND_MAX))*rand(); - u = (float)sqrt(-2.0f* log( (1.0f/(1.0f+RAND_MAX))*(1.0f+rand()) ) ); - *dst++ = (float)cos(phi)*u*stdev+mean; - set=1; - } -} -*/ diff --git a/lib/qra/qracodes/normrnd.h b/lib/qra/qracodes/normrnd.h deleted file mode 100644 index dd4b65b..0000000 --- a/lib/qra/qracodes/normrnd.h +++ /dev/null @@ -1,51 +0,0 @@ -// normrnd.h -// Functions to generate gaussian distributed numbers -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#ifndef _normrnd_h_ -#define _normrnd_h_ - -#define _CRT_RAND_S -#include - -#define _USE_MATH_DEFINES -#include -#define M_2PI (2.0f*(float)M_PI) - -#ifdef __cplusplus -extern "C" { -#endif - -void normrnd_s(float *dst, int nitems, float mean, float stdev); -// generate a random array of numbers with a gaussian distribution of given mean and stdev -// use MS rand_s(...) function - -/* not used -void normrnd(float *dst, int nitems, float mean, float stdev); -// generate a random array of numbers with a gaussian distribution of given mean and stdev -// use MS rand() function -*/ - -#ifdef __cplusplus -} -#endif - -#endif // _normrnd_h_ - diff --git a/lib/qra/qracodes/npfwht.c b/lib/qra/qracodes/npfwht.c deleted file mode 100644 index 5732ce9..0000000 --- a/lib/qra/qracodes/npfwht.c +++ /dev/null @@ -1,216 +0,0 @@ -// npfwht.c -// Basic implementation of the Fast Walsh-Hadamard Transforms -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (repeat and accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#include "npfwht.h" - -#define WHBFY(dst,src,base,offs,dist) { dst[base+offs]=src[base+offs]+src[base+offs+dist]; dst[base+offs+dist]=src[base+offs]-src[base+offs+dist]; } - -typedef void (*pnp_fwht)(float*,float*); - -static void np_fwht2(float *dst, float *src); - -static void np_fwht1(float *dst, float *src); -static void np_fwht2(float *dst, float *src); -static void np_fwht4(float *dst, float *src); -static void np_fwht8(float *dst, float *src); -static void np_fwht16(float *dst, float *src); -static void np_fwht32(float *dst, float *src); -static void np_fwht64(float *dst, float *src); - -static pnp_fwht np_fwht_tab[7] = { - np_fwht1, - np_fwht2, - np_fwht4, - np_fwht8, - np_fwht16, - np_fwht32, - np_fwht64 -}; - -void np_fwht(int nlogdim, float *dst, float *src) -{ - np_fwht_tab[nlogdim](dst,src); -} - -static void np_fwht1(float *dst, float *src) -{ - dst[0] = src[0]; -} - - -static void np_fwht2(float *dst, float *src) -{ - float t[2]; - - WHBFY(t,src,0,0,1); - dst[0]= t[0]; - dst[1]= t[1]; -} - -static void np_fwht4(float *dst, float *src) -{ - float t[4]; - - // group 1 - WHBFY(t,src,0,0,2); WHBFY(t,src,0,1,2); - // group 2 - WHBFY(dst,t,0,0,1); WHBFY(dst,t,2,0,1); -}; - - -static void np_fwht8(float *dst, float *src) -{ - float t[16]; - float *t1=t, *t2=t+8; - - // group 1 - WHBFY(t1,src,0,0,4); WHBFY(t1,src,0,1,4); WHBFY(t1,src,0,2,4); WHBFY(t1,src,0,3,4); - // group 2 - WHBFY(t2,t1,0,0,2); WHBFY(t2,t1,0,1,2); WHBFY(t2,t1,4,0,2); WHBFY(t2,t1,4,1,2); - // group 3 - WHBFY(dst,t2,0,0,1); WHBFY(dst,t2,2,0,1); WHBFY(dst,t2,4,0,1); WHBFY(dst,t2,6,0,1); -}; - - -static void np_fwht16(float *dst, float *src) -{ - float t[32]; - float *t1=t, *t2=t+16; - - // group 1 - WHBFY(t1,src,0,0,8); WHBFY(t1,src,0,1,8); WHBFY(t1,src,0,2,8); WHBFY(t1,src,0,3,8); - WHBFY(t1,src,0,4,8); WHBFY(t1,src,0,5,8); WHBFY(t1,src,0,6,8); WHBFY(t1,src,0,7,8); - // group 2 - WHBFY(t2,t1,0,0,4); WHBFY(t2,t1,0,1,4); WHBFY(t2,t1,0,2,4); WHBFY(t2,t1,0,3,4); - WHBFY(t2,t1,8,0,4); WHBFY(t2,t1,8,1,4); WHBFY(t2,t1,8,2,4); WHBFY(t2,t1,8,3,4); - // group 3 - WHBFY(t1,t2,0,0,2); WHBFY(t1,t2,0,1,2); WHBFY(t1,t2,4,0,2); WHBFY(t1,t2,4,1,2); - WHBFY(t1,t2,8,0,2); WHBFY(t1,t2,8,1,2); WHBFY(t1,t2,12,0,2); WHBFY(t1,t2,12,1,2); - // group 4 - WHBFY(dst,t1,0,0,1); WHBFY(dst,t1,2,0,1); WHBFY(dst,t1,4,0,1); WHBFY(dst,t1,6,0,1); - WHBFY(dst,t1,8,0,1); WHBFY(dst,t1,10,0,1); WHBFY(dst,t1,12,0,1); WHBFY(dst,t1,14,0,1); - -} - -static void np_fwht32(float *dst, float *src) -{ - float t[64]; - float *t1=t, *t2=t+32; - - // group 1 - WHBFY(t1,src,0,0,16); WHBFY(t1,src,0,1,16); WHBFY(t1,src,0,2,16); WHBFY(t1,src,0,3,16); - WHBFY(t1,src,0,4,16); WHBFY(t1,src,0,5,16); WHBFY(t1,src,0,6,16); WHBFY(t1,src,0,7,16); - WHBFY(t1,src,0,8,16); WHBFY(t1,src,0,9,16); WHBFY(t1,src,0,10,16); WHBFY(t1,src,0,11,16); - WHBFY(t1,src,0,12,16); WHBFY(t1,src,0,13,16); WHBFY(t1,src,0,14,16); WHBFY(t1,src,0,15,16); - - // group 2 - WHBFY(t2,t1,0,0,8); WHBFY(t2,t1,0,1,8); WHBFY(t2,t1,0,2,8); WHBFY(t2,t1,0,3,8); - WHBFY(t2,t1,0,4,8); WHBFY(t2,t1,0,5,8); WHBFY(t2,t1,0,6,8); WHBFY(t2,t1,0,7,8); - WHBFY(t2,t1,16,0,8); WHBFY(t2,t1,16,1,8); WHBFY(t2,t1,16,2,8); WHBFY(t2,t1,16,3,8); - WHBFY(t2,t1,16,4,8); WHBFY(t2,t1,16,5,8); WHBFY(t2,t1,16,6,8); WHBFY(t2,t1,16,7,8); - - // group 3 - WHBFY(t1,t2,0,0,4); WHBFY(t1,t2,0,1,4); WHBFY(t1,t2,0,2,4); WHBFY(t1,t2,0,3,4); - WHBFY(t1,t2,8,0,4); WHBFY(t1,t2,8,1,4); WHBFY(t1,t2,8,2,4); WHBFY(t1,t2,8,3,4); - WHBFY(t1,t2,16,0,4); WHBFY(t1,t2,16,1,4); WHBFY(t1,t2,16,2,4); WHBFY(t1,t2,16,3,4); - WHBFY(t1,t2,24,0,4); WHBFY(t1,t2,24,1,4); WHBFY(t1,t2,24,2,4); WHBFY(t1,t2,24,3,4); - - // group 4 - WHBFY(t2,t1,0,0,2); WHBFY(t2,t1,0,1,2); WHBFY(t2,t1,4,0,2); WHBFY(t2,t1,4,1,2); - WHBFY(t2,t1,8,0,2); WHBFY(t2,t1,8,1,2); WHBFY(t2,t1,12,0,2); WHBFY(t2,t1,12,1,2); - WHBFY(t2,t1,16,0,2); WHBFY(t2,t1,16,1,2); WHBFY(t2,t1,20,0,2); WHBFY(t2,t1,20,1,2); - WHBFY(t2,t1,24,0,2); WHBFY(t2,t1,24,1,2); WHBFY(t2,t1,28,0,2); WHBFY(t2,t1,28,1,2); - - // group 5 - WHBFY(dst,t2,0,0,1); WHBFY(dst,t2,2,0,1); WHBFY(dst,t2,4,0,1); WHBFY(dst,t2,6,0,1); - WHBFY(dst,t2,8,0,1); WHBFY(dst,t2,10,0,1); WHBFY(dst,t2,12,0,1); WHBFY(dst,t2,14,0,1); - WHBFY(dst,t2,16,0,1); WHBFY(dst,t2,18,0,1); WHBFY(dst,t2,20,0,1); WHBFY(dst,t2,22,0,1); - WHBFY(dst,t2,24,0,1); WHBFY(dst,t2,26,0,1); WHBFY(dst,t2,28,0,1); WHBFY(dst,t2,30,0,1); - -} - -static void np_fwht64(float *dst, float *src) -{ - float t[128]; - float *t1=t, *t2=t+64; - - - // group 1 - WHBFY(t1,src,0,0,32); WHBFY(t1,src,0,1,32); WHBFY(t1,src,0,2,32); WHBFY(t1,src,0,3,32); - WHBFY(t1,src,0,4,32); WHBFY(t1,src,0,5,32); WHBFY(t1,src,0,6,32); WHBFY(t1,src,0,7,32); - WHBFY(t1,src,0,8,32); WHBFY(t1,src,0,9,32); WHBFY(t1,src,0,10,32); WHBFY(t1,src,0,11,32); - WHBFY(t1,src,0,12,32); WHBFY(t1,src,0,13,32); WHBFY(t1,src,0,14,32); WHBFY(t1,src,0,15,32); - WHBFY(t1,src,0,16,32); WHBFY(t1,src,0,17,32); WHBFY(t1,src,0,18,32); WHBFY(t1,src,0,19,32); - WHBFY(t1,src,0,20,32); WHBFY(t1,src,0,21,32); WHBFY(t1,src,0,22,32); WHBFY(t1,src,0,23,32); - WHBFY(t1,src,0,24,32); WHBFY(t1,src,0,25,32); WHBFY(t1,src,0,26,32); WHBFY(t1,src,0,27,32); - WHBFY(t1,src,0,28,32); WHBFY(t1,src,0,29,32); WHBFY(t1,src,0,30,32); WHBFY(t1,src,0,31,32); - - // group 2 - WHBFY(t2,t1,0,0,16); WHBFY(t2,t1,0,1,16); WHBFY(t2,t1,0,2,16); WHBFY(t2,t1,0,3,16); - WHBFY(t2,t1,0,4,16); WHBFY(t2,t1,0,5,16); WHBFY(t2,t1,0,6,16); WHBFY(t2,t1,0,7,16); - WHBFY(t2,t1,0,8,16); WHBFY(t2,t1,0,9,16); WHBFY(t2,t1,0,10,16); WHBFY(t2,t1,0,11,16); - WHBFY(t2,t1,0,12,16); WHBFY(t2,t1,0,13,16); WHBFY(t2,t1,0,14,16); WHBFY(t2,t1,0,15,16); - - WHBFY(t2,t1,32,0,16); WHBFY(t2,t1,32,1,16); WHBFY(t2,t1,32,2,16); WHBFY(t2,t1,32,3,16); - WHBFY(t2,t1,32,4,16); WHBFY(t2,t1,32,5,16); WHBFY(t2,t1,32,6,16); WHBFY(t2,t1,32,7,16); - WHBFY(t2,t1,32,8,16); WHBFY(t2,t1,32,9,16); WHBFY(t2,t1,32,10,16); WHBFY(t2,t1,32,11,16); - WHBFY(t2,t1,32,12,16); WHBFY(t2,t1,32,13,16); WHBFY(t2,t1,32,14,16); WHBFY(t2,t1,32,15,16); - - // group 3 - WHBFY(t1,t2,0,0,8); WHBFY(t1,t2,0,1,8); WHBFY(t1,t2,0,2,8); WHBFY(t1,t2,0,3,8); - WHBFY(t1,t2,0,4,8); WHBFY(t1,t2,0,5,8); WHBFY(t1,t2,0,6,8); WHBFY(t1,t2,0,7,8); - WHBFY(t1,t2,16,0,8); WHBFY(t1,t2,16,1,8); WHBFY(t1,t2,16,2,8); WHBFY(t1,t2,16,3,8); - WHBFY(t1,t2,16,4,8); WHBFY(t1,t2,16,5,8); WHBFY(t1,t2,16,6,8); WHBFY(t1,t2,16,7,8); - WHBFY(t1,t2,32,0,8); WHBFY(t1,t2,32,1,8); WHBFY(t1,t2,32,2,8); WHBFY(t1,t2,32,3,8); - WHBFY(t1,t2,32,4,8); WHBFY(t1,t2,32,5,8); WHBFY(t1,t2,32,6,8); WHBFY(t1,t2,32,7,8); - WHBFY(t1,t2,48,0,8); WHBFY(t1,t2,48,1,8); WHBFY(t1,t2,48,2,8); WHBFY(t1,t2,48,3,8); - WHBFY(t1,t2,48,4,8); WHBFY(t1,t2,48,5,8); WHBFY(t1,t2,48,6,8); WHBFY(t1,t2,48,7,8); - - // group 4 - WHBFY(t2,t1,0,0,4); WHBFY(t2,t1,0,1,4); WHBFY(t2,t1,0,2,4); WHBFY(t2,t1,0,3,4); - WHBFY(t2,t1,8,0,4); WHBFY(t2,t1,8,1,4); WHBFY(t2,t1,8,2,4); WHBFY(t2,t1,8,3,4); - WHBFY(t2,t1,16,0,4); WHBFY(t2,t1,16,1,4); WHBFY(t2,t1,16,2,4); WHBFY(t2,t1,16,3,4); - WHBFY(t2,t1,24,0,4); WHBFY(t2,t1,24,1,4); WHBFY(t2,t1,24,2,4); WHBFY(t2,t1,24,3,4); - WHBFY(t2,t1,32,0,4); WHBFY(t2,t1,32,1,4); WHBFY(t2,t1,32,2,4); WHBFY(t2,t1,32,3,4); - WHBFY(t2,t1,40,0,4); WHBFY(t2,t1,40,1,4); WHBFY(t2,t1,40,2,4); WHBFY(t2,t1,40,3,4); - WHBFY(t2,t1,48,0,4); WHBFY(t2,t1,48,1,4); WHBFY(t2,t1,48,2,4); WHBFY(t2,t1,48,3,4); - WHBFY(t2,t1,56,0,4); WHBFY(t2,t1,56,1,4); WHBFY(t2,t1,56,2,4); WHBFY(t2,t1,56,3,4); - - // group 5 - WHBFY(t1,t2,0,0,2); WHBFY(t1,t2,0,1,2); WHBFY(t1,t2,4,0,2); WHBFY(t1,t2,4,1,2); - WHBFY(t1,t2,8,0,2); WHBFY(t1,t2,8,1,2); WHBFY(t1,t2,12,0,2); WHBFY(t1,t2,12,1,2); - WHBFY(t1,t2,16,0,2); WHBFY(t1,t2,16,1,2); WHBFY(t1,t2,20,0,2); WHBFY(t1,t2,20,1,2); - WHBFY(t1,t2,24,0,2); WHBFY(t1,t2,24,1,2); WHBFY(t1,t2,28,0,2); WHBFY(t1,t2,28,1,2); - WHBFY(t1,t2,32,0,2); WHBFY(t1,t2,32,1,2); WHBFY(t1,t2,36,0,2); WHBFY(t1,t2,36,1,2); - WHBFY(t1,t2,40,0,2); WHBFY(t1,t2,40,1,2); WHBFY(t1,t2,44,0,2); WHBFY(t1,t2,44,1,2); - WHBFY(t1,t2,48,0,2); WHBFY(t1,t2,48,1,2); WHBFY(t1,t2,52,0,2); WHBFY(t1,t2,52,1,2); - WHBFY(t1,t2,56,0,2); WHBFY(t1,t2,56,1,2); WHBFY(t1,t2,60,0,2); WHBFY(t1,t2,60,1,2); - - // group 6 - WHBFY(dst,t1,0,0,1); WHBFY(dst,t1,2,0,1); WHBFY(dst,t1,4,0,1); WHBFY(dst,t1,6,0,1); - WHBFY(dst,t1,8,0,1); WHBFY(dst,t1,10,0,1); WHBFY(dst,t1,12,0,1); WHBFY(dst,t1,14,0,1); - WHBFY(dst,t1,16,0,1); WHBFY(dst,t1,18,0,1); WHBFY(dst,t1,20,0,1); WHBFY(dst,t1,22,0,1); - WHBFY(dst,t1,24,0,1); WHBFY(dst,t1,26,0,1); WHBFY(dst,t1,28,0,1); WHBFY(dst,t1,30,0,1); - WHBFY(dst,t1,32,0,1); WHBFY(dst,t1,34,0,1); WHBFY(dst,t1,36,0,1); WHBFY(dst,t1,38,0,1); - WHBFY(dst,t1,40,0,1); WHBFY(dst,t1,42,0,1); WHBFY(dst,t1,44,0,1); WHBFY(dst,t1,46,0,1); - WHBFY(dst,t1,48,0,1); WHBFY(dst,t1,50,0,1); WHBFY(dst,t1,52,0,1); WHBFY(dst,t1,54,0,1); - WHBFY(dst,t1,56,0,1); WHBFY(dst,t1,58,0,1); WHBFY(dst,t1,60,0,1); WHBFY(dst,t1,62,0,1); -} \ No newline at end of file diff --git a/lib/qra/qracodes/npfwht.h b/lib/qra/qracodes/npfwht.h deleted file mode 100644 index 9452e20..0000000 --- a/lib/qra/qracodes/npfwht.h +++ /dev/null @@ -1,45 +0,0 @@ -// np_fwht.h -// Basic implementation of the Fast Walsh-Hadamard Transforms -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (repeat and accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#ifndef _npfwht_h_ -#define _npfwht_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -void np_fwht(int nlogdim, float *dst, float *src); -// Compute the Walsh-Hadamard transform of the given data up to a -// 64-dimensional transform -// -// Input parameters: -// nlogdim: log2 of the transform size. Must be in the range [0..6] -// src : pointer to the input data buffer. -// dst : pointer to the output data buffer. -// -// src and dst must point to preallocated data buffers of size 2^nlogdim*sizeof(float) -// src and dst buffers can overlap - -#ifdef __cplusplus -} -#endif - -#endif // _npfwht_ diff --git a/lib/qra/qracodes/pdmath.c b/lib/qra/qracodes/pdmath.c deleted file mode 100644 index 47ecab9..0000000 --- a/lib/qra/qracodes/pdmath.c +++ /dev/null @@ -1,385 +0,0 @@ -// pdmath.c -// Elementary math on probability distributions -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#include "pdmath.h" - -typedef const float *ppd_uniform; -typedef void (*ppd_imul)(float*,const float*); -typedef float (*ppd_norm)(float*); - -// define vector size in function of its logarithm in base 2 -static const int pd_log2dim[7] = { - 1,2,4,8,16,32,64 -}; - -// define uniform distributions of given size -static const float pd_uniform1[1] = { - 1. -}; -static const float pd_uniform2[2] = { - 1./2., 1./2. -}; -static const float pd_uniform4[4] = { - 1./4., 1./4.,1./4., 1./4. -}; -static const float pd_uniform8[8] = { - 1./8., 1./8.,1./8., 1./8.,1./8., 1./8.,1./8., 1./8. -}; -static const float pd_uniform16[16] = { - 1./16., 1./16., 1./16., 1./16.,1./16., 1./16.,1./16., 1./16., - 1./16., 1./16., 1./16., 1./16.,1./16., 1./16.,1./16., 1./16. -}; -static const float pd_uniform32[32] = { - 1./32., 1./32., 1./32., 1./32.,1./32., 1./32.,1./32., 1./32., - 1./32., 1./32., 1./32., 1./32.,1./32., 1./32.,1./32., 1./32., - 1./32., 1./32., 1./32., 1./32.,1./32., 1./32.,1./32., 1./32., - 1./32., 1./32., 1./32., 1./32.,1./32., 1./32.,1./32., 1./32. -}; -static const float pd_uniform64[64] = { - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64., - 1./64., 1./64., 1./64., 1./64.,1./64., 1./64.,1./64., 1./64. - -}; - -static const ppd_uniform pd_uniform_tab[7] = { - pd_uniform1, - pd_uniform2, - pd_uniform4, - pd_uniform8, - pd_uniform16, - pd_uniform32, - pd_uniform64 -}; - -// returns a pointer to the uniform distribution of the given logsize -const float *pd_uniform(int nlogdim) -{ - return pd_uniform_tab[nlogdim]; -} - -// in-place multiplication functions -// compute dst = dst*src for any element of the distrib - -static void pd_imul1(float *dst, const float *src) -{ - dst[0] *= src[0]; -} - -static void pd_imul2(float *dst, const float *src) -{ - dst[0] *= src[0]; dst[1] *= src[1]; -} -static void pd_imul4(float *dst, const float *src) -{ - dst[0] *= src[0]; dst[1] *= src[1]; - dst[2] *= src[2]; dst[3] *= src[3]; -} -static void pd_imul8(float *dst, const float *src) -{ - dst[0] *= src[0]; dst[1] *= src[1]; dst[2] *= src[2]; dst[3] *= src[3]; - dst[4] *= src[4]; dst[5] *= src[5]; dst[6] *= src[6]; dst[7] *= src[7]; -} -static void pd_imul16(float *dst, const float *src) -{ - dst[0] *= src[0]; dst[1] *= src[1]; dst[2] *= src[2]; dst[3] *= src[3]; - dst[4] *= src[4]; dst[5] *= src[5]; dst[6] *= src[6]; dst[7] *= src[7]; - dst[8] *= src[8]; dst[9] *= src[9]; dst[10]*= src[10]; dst[11]*= src[11]; - dst[12]*= src[12]; dst[13]*= src[13]; dst[14]*= src[14]; dst[15]*= src[15]; -} -static void pd_imul32(float *dst, const float *src) -{ - pd_imul16(dst,src); - pd_imul16(dst+16,src+16); -} -static void pd_imul64(float *dst, const float *src) -{ - pd_imul16(dst, src); - pd_imul16(dst+16, src+16); - pd_imul16(dst+32, src+32); - pd_imul16(dst+48, src+48); -} - -static const ppd_imul pd_imul_tab[7] = { - pd_imul1, - pd_imul2, - pd_imul4, - pd_imul8, - pd_imul16, - pd_imul32, - pd_imul64 -}; - -// in place multiplication -// compute dst = dst*src for any element of the distrib give their log2 size -// arguments must be pointers to array of floats of the given size -void pd_imul(float *dst, const float *src, int nlogdim) -{ - pd_imul_tab[nlogdim](dst,src); -} - -static float pd_norm1(float *ppd) -{ - float t = ppd[0]; - ppd[0] = 1.f; - return t; -} - -static float pd_norm2(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; - - if (t<=0) { - pd_init(ppd,pd_uniform(1),pd_log2dim[1]); - return t; - } - - to = t; - t = 1.f/t; - ppd[0] *=t; ppd[1] *=t; - return to; - -} - -static float pd_norm4(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; t +=ppd[2]; t +=ppd[3]; - - if (t<=0) { - pd_init(ppd,pd_uniform(2),pd_log2dim[2]); - return t; - } - - to = t; - t = 1.f/t; - ppd[0] *=t; ppd[1] *=t; ppd[2] *=t; ppd[3] *=t; - return to; -} - -static float pd_norm8(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; t +=ppd[2]; t +=ppd[3]; - t +=ppd[4]; t +=ppd[5]; t +=ppd[6]; t +=ppd[7]; - - if (t<=0) { - pd_init(ppd,pd_uniform(3),pd_log2dim[3]); - return t; - } - - to = t; - t = 1.f/t; - ppd[0] *=t; ppd[1] *=t; ppd[2] *=t; ppd[3] *=t; - ppd[4] *=t; ppd[5] *=t; ppd[6] *=t; ppd[7] *=t; - return to; -} -static float pd_norm16(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; t +=ppd[2]; t +=ppd[3]; - t +=ppd[4]; t +=ppd[5]; t +=ppd[6]; t +=ppd[7]; - t +=ppd[8]; t +=ppd[9]; t +=ppd[10]; t +=ppd[11]; - t +=ppd[12]; t +=ppd[13]; t +=ppd[14]; t +=ppd[15]; - - if (t<=0) { - pd_init(ppd,pd_uniform(4),pd_log2dim[4]); - return t; - } - - to = t; - t = 1.f/t; - ppd[0] *=t; ppd[1] *=t; ppd[2] *=t; ppd[3] *=t; - ppd[4] *=t; ppd[5] *=t; ppd[6] *=t; ppd[7] *=t; - ppd[8] *=t; ppd[9] *=t; ppd[10] *=t; ppd[11] *=t; - ppd[12] *=t; ppd[13] *=t; ppd[14] *=t; ppd[15] *=t; - - return to; -} -static float pd_norm32(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; t +=ppd[2]; t +=ppd[3]; - t +=ppd[4]; t +=ppd[5]; t +=ppd[6]; t +=ppd[7]; - t +=ppd[8]; t +=ppd[9]; t +=ppd[10]; t +=ppd[11]; - t +=ppd[12]; t +=ppd[13]; t +=ppd[14]; t +=ppd[15]; - t +=ppd[16]; t +=ppd[17]; t +=ppd[18]; t +=ppd[19]; - t +=ppd[20]; t +=ppd[21]; t +=ppd[22]; t +=ppd[23]; - t +=ppd[24]; t +=ppd[25]; t +=ppd[26]; t +=ppd[27]; - t +=ppd[28]; t +=ppd[29]; t +=ppd[30]; t +=ppd[31]; - - if (t<=0) { - pd_init(ppd,pd_uniform(5),pd_log2dim[5]); - return t; - } - - to = t; - t = 1.f/t; - ppd[0] *=t; ppd[1] *=t; ppd[2] *=t; ppd[3] *=t; - ppd[4] *=t; ppd[5] *=t; ppd[6] *=t; ppd[7] *=t; - ppd[8] *=t; ppd[9] *=t; ppd[10] *=t; ppd[11] *=t; - ppd[12] *=t; ppd[13] *=t; ppd[14] *=t; ppd[15] *=t; - ppd[16] *=t; ppd[17] *=t; ppd[18] *=t; ppd[19] *=t; - ppd[20] *=t; ppd[21] *=t; ppd[22] *=t; ppd[23] *=t; - ppd[24] *=t; ppd[25] *=t; ppd[26] *=t; ppd[27] *=t; - ppd[28] *=t; ppd[29] *=t; ppd[30] *=t; ppd[31] *=t; - - return to; -} - -static float pd_norm64(float *ppd) -{ - float t,to; - - t =ppd[0]; t +=ppd[1]; t +=ppd[2]; t +=ppd[3]; - t +=ppd[4]; t +=ppd[5]; t +=ppd[6]; t +=ppd[7]; - t +=ppd[8]; t +=ppd[9]; t +=ppd[10]; t +=ppd[11]; - t +=ppd[12]; t +=ppd[13]; t +=ppd[14]; t +=ppd[15]; - t +=ppd[16]; t +=ppd[17]; t +=ppd[18]; t +=ppd[19]; - t +=ppd[20]; t +=ppd[21]; t +=ppd[22]; t +=ppd[23]; - t +=ppd[24]; t +=ppd[25]; t +=ppd[26]; t +=ppd[27]; - t +=ppd[28]; t +=ppd[29]; t +=ppd[30]; t +=ppd[31]; - - t +=ppd[32]; t +=ppd[33]; t +=ppd[34]; t +=ppd[35]; - t +=ppd[36]; t +=ppd[37]; t +=ppd[38]; t +=ppd[39]; - t +=ppd[40]; t +=ppd[41]; t +=ppd[42]; t +=ppd[43]; - t +=ppd[44]; t +=ppd[45]; t +=ppd[46]; t +=ppd[47]; - t +=ppd[48]; t +=ppd[49]; t +=ppd[50]; t +=ppd[51]; - t +=ppd[52]; t +=ppd[53]; t +=ppd[54]; t +=ppd[55]; - t +=ppd[56]; t +=ppd[57]; t +=ppd[58]; t +=ppd[59]; - t +=ppd[60]; t +=ppd[61]; t +=ppd[62]; t +=ppd[63]; - - if (t<=0) { - pd_init(ppd,pd_uniform(6),pd_log2dim[6]); - return t; - } - - to = t; - t = 1.0f/t; - ppd[0] *=t; ppd[1] *=t; ppd[2] *=t; ppd[3] *=t; - ppd[4] *=t; ppd[5] *=t; ppd[6] *=t; ppd[7] *=t; - ppd[8] *=t; ppd[9] *=t; ppd[10] *=t; ppd[11] *=t; - ppd[12] *=t; ppd[13] *=t; ppd[14] *=t; ppd[15] *=t; - ppd[16] *=t; ppd[17] *=t; ppd[18] *=t; ppd[19] *=t; - ppd[20] *=t; ppd[21] *=t; ppd[22] *=t; ppd[23] *=t; - ppd[24] *=t; ppd[25] *=t; ppd[26] *=t; ppd[27] *=t; - ppd[28] *=t; ppd[29] *=t; ppd[30] *=t; ppd[31] *=t; - - ppd[32] *=t; ppd[33] *=t; ppd[34] *=t; ppd[35] *=t; - ppd[36] *=t; ppd[37] *=t; ppd[38] *=t; ppd[39] *=t; - ppd[40] *=t; ppd[41] *=t; ppd[42] *=t; ppd[43] *=t; - ppd[44] *=t; ppd[45] *=t; ppd[46] *=t; ppd[47] *=t; - ppd[48] *=t; ppd[49] *=t; ppd[50] *=t; ppd[51] *=t; - ppd[52] *=t; ppd[53] *=t; ppd[54] *=t; ppd[55] *=t; - ppd[56] *=t; ppd[57] *=t; ppd[58] *=t; ppd[59] *=t; - ppd[60] *=t; ppd[61] *=t; ppd[62] *=t; ppd[63] *=t; - - return to; -} - - -static const ppd_norm pd_norm_tab[7] = { - pd_norm1, - pd_norm2, - pd_norm4, - pd_norm8, - pd_norm16, - pd_norm32, - pd_norm64 -}; - -float pd_norm(float *pd, int nlogdim) -{ - return pd_norm_tab[nlogdim](pd); -} - -void pd_memset(float *dst, const float *src, int ndim, int nitems) -{ - int size = PD_SIZE(ndim); - while(nitems--) { - memcpy(dst,src,size); - dst +=ndim; - } -} - -void pd_fwdperm(float *dst, float *src, const int *perm, int ndim) -{ - // TODO: non-loop implementation - while (ndim--) - dst[ndim] = src[perm[ndim]]; -} - -void pd_bwdperm(float *dst, float *src, const int *perm, int ndim) -{ - // TODO: non-loop implementation - while (ndim--) - dst[perm[ndim]] = src[ndim]; -} - -float pd_max(float *src, int ndim) -{ - // TODO: faster implementation - - float cmax=0; // we assume that prob distributions are always positive - float cval; - - while (ndim--) { - cval = src[ndim]; - if (cval>=cmax) { - cmax = cval; - } - } - - return cmax; -} - -int pd_argmax(float *pmax, float *src, int ndim) -{ - // TODO: faster implementation - - float cmax=0; // we assume that prob distributions are always positive - float cval; - int idxmax=-1; // indicates that all pd elements are <0 - - while (ndim--) { - cval = src[ndim]; - if (cval>=cmax) { - cmax = cval; - idxmax = ndim; - } - } - - if (pmax) - *pmax = cmax; - - return idxmax; -} diff --git a/lib/qra/qracodes/pdmath.h b/lib/qra/qracodes/pdmath.h deleted file mode 100644 index bbd1210..0000000 --- a/lib/qra/qracodes/pdmath.h +++ /dev/null @@ -1,85 +0,0 @@ -// pdmath.h -// Elementary math on probability distributions -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (repeat and accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - - -#ifndef _pdmath_h_ -#define _pdmath_h_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define PD_NDIM(nlogdim) ((1<<(nlogdim)) -#define PD_SIZE(ndim) ((ndim)*sizeof(float)) -#define PD_ROWADDR(fp,ndim,idx) (fp+((ndim)*(idx))) - -const float *pd_uniform(int nlogdim); -// Returns a pointer to a (constant) uniform distribution of the given log2 size - -#define pd_init(dst,src,ndim) memcpy(dst,src,PD_SIZE(ndim)) -// Distribution copy - -void pd_memset(float *dst, const float *src, int ndim, int nitems); -// Copy the distribution pointed by src to the array of distributions dst -// src is a pointer to the input distribution (a vector of size ndim) -// dst is a pointer to a linear array of distributions (a vector of size ndim*nitems) - -void pd_imul(float *dst, const float *src, int nlogdim); -// In place multiplication -// Compute dst = dst*src for any element of the distrib give their log2 size -// src and dst arguments must be pointers to array of floats of the given size - -float pd_norm(float *pd, int nlogdim); -// In place normalizazion -// Normalizes the input vector so that the sum of its components are one -// pd must be a pointer to an array of floats of the given size. -// If the norm of the input vector is non-positive the vector components -// are replaced with a uniform distribution -// Returns the norm of the distribution prior to the normalization - -void pd_fwdperm(float *dst, float *src, const int *perm, int ndim); -// Forward permutation of a distribution -// Computes dst[k] = src[perm[k]] for every element in the distribution -// perm must be a pointer to an array of integers of length ndim - -void pd_bwdperm(float *dst, float *src, const int *perm, int ndim); -// Backward permutation of a distribution -// Computes dst[perm[k]] = src[k] for every element in the distribution -// perm must be a pointer to an array of integers of length ndim - -float pd_max(float *src, int ndim); -// Return the maximum of the elements of the given distribution -// Assumes that the input vector is a probability distribution and that each element in the -// distribution is non negative - -int pd_argmax(float *pmax, float *src, int ndim); -// Return the index of the maximum element of the given distribution -// The maximum is stored in the variable pointed by pmax if pmax is not null -// Same note of pd_max applies. -// Return -1 if all the elements in the distribution are negative - -#ifdef __cplusplus -} -#endif - -#endif // _pdmath_h_ diff --git a/lib/qra/qracodes/qra12_63_64_irr_b.c b/lib/qra/qracodes/qra12_63_64_irr_b.c deleted file mode 100644 index d69443b..0000000 --- a/lib/qra/qracodes/qra12_63_64_irr_b.c +++ /dev/null @@ -1,534 +0,0 @@ -// qra12_63_64_irr_b.c -// Encoding/Decoding tables for Q-ary RA code (12,63) over GF(64) -// Code Name: qra12_63_64_irr_b -// (12,63) RA Code over GF(64) - RF=333344455567 - -// (c) 2016 - Nico Palermo - IV3NWV - Microtelecom Srl, Italy - -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#include "qra12_63_64_irr_b.h" - -#define qra_K 12 // number of information symbols -#define qra_N 63 // codeword length in symbols -#define qra_m 6 // bits/symbol -#define qra_M 64 // Symbol alphabet cardinality -#define qra_a 1 // grouping factor -#define qra_NC 51 // number of check symbols (N-K) - -// Defines used by the message passing decoder -------- - -#define qra_V 63 // number of variables in the code graph (N) -#define qra_C 115 // number of factors in the code graph (N +(N-K)+1) -#define qra_NMSG 217 // number of msgs in the code graph -#define qra_MAXVDEG 8 // maximum variable degree -#define qra_MAXCDEG 3 // maximum factor degree -#define qra_R 0.19048f // code rate (K/N) -#define CODE_NAME "qra_12_63_64_irr_b" - - -// table of the systematic symbols indexes in the accumulator chain -static const int qra_acc_input_idx[qra_NC+1] = { - 3, 11, 0, 1, 7, 8, 6, 5, 10, 4, - 11, 9, 0, 2, 6, 7, 8, 4, 11, 5, - 10, 2, 1, 9, 3, 8, 4, 11, 5, 7, - 10, 9, 6, 3, 11, 5, 8, 10, 0, 7, - 9, 11, 4, 2, 10, 6, 8, 1, 9, 7, - 11, 10 -}; - -// table of the systematic symbols weight logarithms over GF(M) -static const int qra_acc_input_wlog[qra_NC+1] = { - 39, 0, 34, 16, 25, 0, 34, 48, 19, 13, - 29, 56, 0, 5, 39, 42, 31, 0, 10, 0, - 57, 62, 33, 43, 0, 14, 22, 48, 28, 20, - 5, 45, 16, 43, 17, 4, 32, 0, 31, 0, - 0, 28, 57, 0, 18, 0, 60, 0, 10, 31, - 57, 27 -}; - -// table of the logarithms of the elements of GF(M) (log(0) never used) -static const int qra_log[qra_M] = { - -1, 0, 1, 6, 2, 12, 7, 26, 3, 32, - 13, 35, 8, 48, 27, 18, 4, 24, 33, 16, - 14, 52, 36, 54, 9, 45, 49, 38, 28, 41, - 19, 56, 5, 62, 25, 11, 34, 31, 17, 47, - 15, 23, 53, 51, 37, 44, 55, 40, 10, 61, - 46, 30, 50, 22, 39, 43, 29, 60, 42, 21, - 20, 59, 57, 58 -}; - -// table of GF(M) elements given their logarithm -static const int qra_exp[qra_M-1] = { - 1, 2, 4, 8, 16, 32, 3, 6, 12, 24, - 48, 35, 5, 10, 20, 40, 19, 38, 15, 30, - 60, 59, 53, 41, 17, 34, 7, 14, 28, 56, - 51, 37, 9, 18, 36, 11, 22, 44, 27, 54, - 47, 29, 58, 55, 45, 25, 50, 39, 13, 26, - 52, 43, 21, 42, 23, 46, 31, 62, 63, 61, - 57, 49, 33 -}; - -// table of the messages weight logarithms over GF(M) -static const int qra_msgw[qra_NMSG] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 39, 0, 34, 16, 25, 0, 34, - 48, 19, 13, 29, 56, 0, 5, 39, 42, 31, - 0, 10, 0, 57, 62, 33, 43, 0, 14, 22, - 48, 28, 20, 5, 45, 16, 43, 17, 4, 32, - 0, 31, 0, 0, 28, 57, 0, 18, 0, 60, - 0, 10, 31, 57, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 -}; - -// table of the degrees of the variable nodes -static const int qra_vdeg[qra_V] = { - 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, - 7, 8, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3 -}; - -// table of the degrees of the factor nodes -static const int qra_cdeg[qra_C] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2 -}; - -// table (uncompressed) of the v->c message indexes (-1=unused entry) -static const int qra_v2cmidx[qra_V*qra_MAXVDEG] = { - 0, 65, 75, 101, -1, -1, -1, -1, - 1, 66, 85, 110, -1, -1, -1, -1, - 2, 76, 84, 106, -1, -1, -1, -1, - 3, 63, 87, 96, -1, -1, -1, -1, - 4, 72, 80, 89, 105, -1, -1, -1, - 5, 70, 82, 91, 98, -1, -1, -1, - 6, 69, 77, 95, 108, -1, -1, -1, - 7, 67, 78, 92, 102, 112, -1, -1, - 8, 68, 79, 88, 99, 109, -1, -1, - 9, 74, 86, 94, 103, 111, -1, -1, - 10, 71, 83, 93, 100, 107, 114, -1, - 11, 64, 73, 81, 90, 97, 104, 113, - 12, 115, 116, -1, -1, -1, -1, -1, - 13, 117, 118, -1, -1, -1, -1, -1, - 14, 119, 120, -1, -1, -1, -1, -1, - 15, 121, 122, -1, -1, -1, -1, -1, - 16, 123, 124, -1, -1, -1, -1, -1, - 17, 125, 126, -1, -1, -1, -1, -1, - 18, 127, 128, -1, -1, -1, -1, -1, - 19, 129, 130, -1, -1, -1, -1, -1, - 20, 131, 132, -1, -1, -1, -1, -1, - 21, 133, 134, -1, -1, -1, -1, -1, - 22, 135, 136, -1, -1, -1, -1, -1, - 23, 137, 138, -1, -1, -1, -1, -1, - 24, 139, 140, -1, -1, -1, -1, -1, - 25, 141, 142, -1, -1, -1, -1, -1, - 26, 143, 144, -1, -1, -1, -1, -1, - 27, 145, 146, -1, -1, -1, -1, -1, - 28, 147, 148, -1, -1, -1, -1, -1, - 29, 149, 150, -1, -1, -1, -1, -1, - 30, 151, 152, -1, -1, -1, -1, -1, - 31, 153, 154, -1, -1, -1, -1, -1, - 32, 155, 156, -1, -1, -1, -1, -1, - 33, 157, 158, -1, -1, -1, -1, -1, - 34, 159, 160, -1, -1, -1, -1, -1, - 35, 161, 162, -1, -1, -1, -1, -1, - 36, 163, 164, -1, -1, -1, -1, -1, - 37, 165, 166, -1, -1, -1, -1, -1, - 38, 167, 168, -1, -1, -1, -1, -1, - 39, 169, 170, -1, -1, -1, -1, -1, - 40, 171, 172, -1, -1, -1, -1, -1, - 41, 173, 174, -1, -1, -1, -1, -1, - 42, 175, 176, -1, -1, -1, -1, -1, - 43, 177, 178, -1, -1, -1, -1, -1, - 44, 179, 180, -1, -1, -1, -1, -1, - 45, 181, 182, -1, -1, -1, -1, -1, - 46, 183, 184, -1, -1, -1, -1, -1, - 47, 185, 186, -1, -1, -1, -1, -1, - 48, 187, 188, -1, -1, -1, -1, -1, - 49, 189, 190, -1, -1, -1, -1, -1, - 50, 191, 192, -1, -1, -1, -1, -1, - 51, 193, 194, -1, -1, -1, -1, -1, - 52, 195, 196, -1, -1, -1, -1, -1, - 53, 197, 198, -1, -1, -1, -1, -1, - 54, 199, 200, -1, -1, -1, -1, -1, - 55, 201, 202, -1, -1, -1, -1, -1, - 56, 203, 204, -1, -1, -1, -1, -1, - 57, 205, 206, -1, -1, -1, -1, -1, - 58, 207, 208, -1, -1, -1, -1, -1, - 59, 209, 210, -1, -1, -1, -1, -1, - 60, 211, 212, -1, -1, -1, -1, -1, - 61, 213, 214, -1, -1, -1, -1, -1, - 62, 215, 216, -1, -1, -1, -1, -1 -}; - -// table (uncompressed) of the c->v message indexes (-1=unused entry) -static const int qra_c2vmidx[qra_C*qra_MAXCDEG] = { - 0, -1, -1, 1, -1, -1, 2, -1, -1, 3, -1, -1, - 4, -1, -1, 5, -1, -1, 6, -1, -1, 7, -1, -1, - 8, -1, -1, 9, -1, -1, 10, -1, -1, 11, -1, -1, - 12, -1, -1, 13, -1, -1, 14, -1, -1, 15, -1, -1, - 16, -1, -1, 17, -1, -1, 18, -1, -1, 19, -1, -1, - 20, -1, -1, 21, -1, -1, 22, -1, -1, 23, -1, -1, - 24, -1, -1, 25, -1, -1, 26, -1, -1, 27, -1, -1, - 28, -1, -1, 29, -1, -1, 30, -1, -1, 31, -1, -1, - 32, -1, -1, 33, -1, -1, 34, -1, -1, 35, -1, -1, - 36, -1, -1, 37, -1, -1, 38, -1, -1, 39, -1, -1, - 40, -1, -1, 41, -1, -1, 42, -1, -1, 43, -1, -1, - 44, -1, -1, 45, -1, -1, 46, -1, -1, 47, -1, -1, - 48, -1, -1, 49, -1, -1, 50, -1, -1, 51, -1, -1, - 52, -1, -1, 53, -1, -1, 54, -1, -1, 55, -1, -1, - 56, -1, -1, 57, -1, -1, 58, -1, -1, 59, -1, -1, - 60, -1, -1, 61, -1, -1, 62, -1, -1, 63, 115, -1, - 64, 116, 117, 65, 118, 119, 66, 120, 121, 67, 122, 123, - 68, 124, 125, 69, 126, 127, 70, 128, 129, 71, 130, 131, - 72, 132, 133, 73, 134, 135, 74, 136, 137, 75, 138, 139, - 76, 140, 141, 77, 142, 143, 78, 144, 145, 79, 146, 147, - 80, 148, 149, 81, 150, 151, 82, 152, 153, 83, 154, 155, - 84, 156, 157, 85, 158, 159, 86, 160, 161, 87, 162, 163, - 88, 164, 165, 89, 166, 167, 90, 168, 169, 91, 170, 171, - 92, 172, 173, 93, 174, 175, 94, 176, 177, 95, 178, 179, - 96, 180, 181, 97, 182, 183, 98, 184, 185, 99, 186, 187, -100, 188, 189, 101, 190, 191, 102, 192, 193, 103, 194, 195, -104, 196, 197, 105, 198, 199, 106, 200, 201, 107, 202, 203, -108, 204, 205, 109, 206, 207, 110, 208, 209, 111, 210, 211, -112, 212, 213, 113, 214, 215, 114, 216, -1 -}; - -// permutation matrix to compute Prob(x*alfa^logw) -static const int qra_pmat[qra_M*qra_M] = { - 0, 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, 59, 60, 61, 62, 63, - 0, 33, 1, 32, 2, 35, 3, 34, 4, 37, 5, 36, 6, 39, 7, 38, - 8, 41, 9, 40, 10, 43, 11, 42, 12, 45, 13, 44, 14, 47, 15, 46, - 16, 49, 17, 48, 18, 51, 19, 50, 20, 53, 21, 52, 22, 55, 23, 54, - 24, 57, 25, 56, 26, 59, 27, 58, 28, 61, 29, 60, 30, 63, 31, 62, - 0, 49, 33, 16, 1, 48, 32, 17, 2, 51, 35, 18, 3, 50, 34, 19, - 4, 53, 37, 20, 5, 52, 36, 21, 6, 55, 39, 22, 7, 54, 38, 23, - 8, 57, 41, 24, 9, 56, 40, 25, 10, 59, 43, 26, 11, 58, 42, 27, - 12, 61, 45, 28, 13, 60, 44, 29, 14, 63, 47, 30, 15, 62, 46, 31, - 0, 57, 49, 8, 33, 24, 16, 41, 1, 56, 48, 9, 32, 25, 17, 40, - 2, 59, 51, 10, 35, 26, 18, 43, 3, 58, 50, 11, 34, 27, 19, 42, - 4, 61, 53, 12, 37, 28, 20, 45, 5, 60, 52, 13, 36, 29, 21, 44, - 6, 63, 55, 14, 39, 30, 22, 47, 7, 62, 54, 15, 38, 31, 23, 46, - 0, 61, 57, 4, 49, 12, 8, 53, 33, 28, 24, 37, 16, 45, 41, 20, - 1, 60, 56, 5, 48, 13, 9, 52, 32, 29, 25, 36, 17, 44, 40, 21, - 2, 63, 59, 6, 51, 14, 10, 55, 35, 30, 26, 39, 18, 47, 43, 22, - 3, 62, 58, 7, 50, 15, 11, 54, 34, 31, 27, 38, 19, 46, 42, 23, - 0, 63, 61, 2, 57, 6, 4, 59, 49, 14, 12, 51, 8, 55, 53, 10, - 33, 30, 28, 35, 24, 39, 37, 26, 16, 47, 45, 18, 41, 22, 20, 43, - 1, 62, 60, 3, 56, 7, 5, 58, 48, 15, 13, 50, 9, 54, 52, 11, - 32, 31, 29, 34, 25, 38, 36, 27, 17, 46, 44, 19, 40, 23, 21, 42, - 0, 62, 63, 1, 61, 3, 2, 60, 57, 7, 6, 56, 4, 58, 59, 5, - 49, 15, 14, 48, 12, 50, 51, 13, 8, 54, 55, 9, 53, 11, 10, 52, - 33, 31, 30, 32, 28, 34, 35, 29, 24, 38, 39, 25, 37, 27, 26, 36, - 16, 46, 47, 17, 45, 19, 18, 44, 41, 23, 22, 40, 20, 42, 43, 21, - 0, 31, 62, 33, 63, 32, 1, 30, 61, 34, 3, 28, 2, 29, 60, 35, - 57, 38, 7, 24, 6, 25, 56, 39, 4, 27, 58, 37, 59, 36, 5, 26, - 49, 46, 15, 16, 14, 17, 48, 47, 12, 19, 50, 45, 51, 44, 13, 18, - 8, 23, 54, 41, 55, 40, 9, 22, 53, 42, 11, 20, 10, 21, 52, 43, - 0, 46, 31, 49, 62, 16, 33, 15, 63, 17, 32, 14, 1, 47, 30, 48, - 61, 19, 34, 12, 3, 45, 28, 50, 2, 44, 29, 51, 60, 18, 35, 13, - 57, 23, 38, 8, 7, 41, 24, 54, 6, 40, 25, 55, 56, 22, 39, 9, - 4, 42, 27, 53, 58, 20, 37, 11, 59, 21, 36, 10, 5, 43, 26, 52, - 0, 23, 46, 57, 31, 8, 49, 38, 62, 41, 16, 7, 33, 54, 15, 24, - 63, 40, 17, 6, 32, 55, 14, 25, 1, 22, 47, 56, 30, 9, 48, 39, - 61, 42, 19, 4, 34, 53, 12, 27, 3, 20, 45, 58, 28, 11, 50, 37, - 2, 21, 44, 59, 29, 10, 51, 36, 60, 43, 18, 5, 35, 52, 13, 26, - 0, 42, 23, 61, 46, 4, 57, 19, 31, 53, 8, 34, 49, 27, 38, 12, - 62, 20, 41, 3, 16, 58, 7, 45, 33, 11, 54, 28, 15, 37, 24, 50, - 63, 21, 40, 2, 17, 59, 6, 44, 32, 10, 55, 29, 14, 36, 25, 51, - 1, 43, 22, 60, 47, 5, 56, 18, 30, 52, 9, 35, 48, 26, 39, 13, - 0, 21, 42, 63, 23, 2, 61, 40, 46, 59, 4, 17, 57, 44, 19, 6, - 31, 10, 53, 32, 8, 29, 34, 55, 49, 36, 27, 14, 38, 51, 12, 25, - 62, 43, 20, 1, 41, 60, 3, 22, 16, 5, 58, 47, 7, 18, 45, 56, - 33, 52, 11, 30, 54, 35, 28, 9, 15, 26, 37, 48, 24, 13, 50, 39, - 0, 43, 21, 62, 42, 1, 63, 20, 23, 60, 2, 41, 61, 22, 40, 3, - 46, 5, 59, 16, 4, 47, 17, 58, 57, 18, 44, 7, 19, 56, 6, 45, - 31, 52, 10, 33, 53, 30, 32, 11, 8, 35, 29, 54, 34, 9, 55, 28, - 49, 26, 36, 15, 27, 48, 14, 37, 38, 13, 51, 24, 12, 39, 25, 50, - 0, 52, 43, 31, 21, 33, 62, 10, 42, 30, 1, 53, 63, 11, 20, 32, - 23, 35, 60, 8, 2, 54, 41, 29, 61, 9, 22, 34, 40, 28, 3, 55, - 46, 26, 5, 49, 59, 15, 16, 36, 4, 48, 47, 27, 17, 37, 58, 14, - 57, 13, 18, 38, 44, 24, 7, 51, 19, 39, 56, 12, 6, 50, 45, 25, - 0, 26, 52, 46, 43, 49, 31, 5, 21, 15, 33, 59, 62, 36, 10, 16, - 42, 48, 30, 4, 1, 27, 53, 47, 63, 37, 11, 17, 20, 14, 32, 58, - 23, 13, 35, 57, 60, 38, 8, 18, 2, 24, 54, 44, 41, 51, 29, 7, - 61, 39, 9, 19, 22, 12, 34, 56, 40, 50, 28, 6, 3, 25, 55, 45, - 0, 13, 26, 23, 52, 57, 46, 35, 43, 38, 49, 60, 31, 18, 5, 8, - 21, 24, 15, 2, 33, 44, 59, 54, 62, 51, 36, 41, 10, 7, 16, 29, - 42, 39, 48, 61, 30, 19, 4, 9, 1, 12, 27, 22, 53, 56, 47, 34, - 63, 50, 37, 40, 11, 6, 17, 28, 20, 25, 14, 3, 32, 45, 58, 55, - 0, 39, 13, 42, 26, 61, 23, 48, 52, 19, 57, 30, 46, 9, 35, 4, - 43, 12, 38, 1, 49, 22, 60, 27, 31, 56, 18, 53, 5, 34, 8, 47, - 21, 50, 24, 63, 15, 40, 2, 37, 33, 6, 44, 11, 59, 28, 54, 17, - 62, 25, 51, 20, 36, 3, 41, 14, 10, 45, 7, 32, 16, 55, 29, 58, - 0, 50, 39, 21, 13, 63, 42, 24, 26, 40, 61, 15, 23, 37, 48, 2, - 52, 6, 19, 33, 57, 11, 30, 44, 46, 28, 9, 59, 35, 17, 4, 54, - 43, 25, 12, 62, 38, 20, 1, 51, 49, 3, 22, 36, 60, 14, 27, 41, - 31, 45, 56, 10, 18, 32, 53, 7, 5, 55, 34, 16, 8, 58, 47, 29, - 0, 25, 50, 43, 39, 62, 21, 12, 13, 20, 63, 38, 42, 51, 24, 1, - 26, 3, 40, 49, 61, 36, 15, 22, 23, 14, 37, 60, 48, 41, 2, 27, - 52, 45, 6, 31, 19, 10, 33, 56, 57, 32, 11, 18, 30, 7, 44, 53, - 46, 55, 28, 5, 9, 16, 59, 34, 35, 58, 17, 8, 4, 29, 54, 47, - 0, 45, 25, 52, 50, 31, 43, 6, 39, 10, 62, 19, 21, 56, 12, 33, - 13, 32, 20, 57, 63, 18, 38, 11, 42, 7, 51, 30, 24, 53, 1, 44, - 26, 55, 3, 46, 40, 5, 49, 28, 61, 16, 36, 9, 15, 34, 22, 59, - 23, 58, 14, 35, 37, 8, 60, 17, 48, 29, 41, 4, 2, 47, 27, 54, - 0, 55, 45, 26, 25, 46, 52, 3, 50, 5, 31, 40, 43, 28, 6, 49, - 39, 16, 10, 61, 62, 9, 19, 36, 21, 34, 56, 15, 12, 59, 33, 22, - 13, 58, 32, 23, 20, 35, 57, 14, 63, 8, 18, 37, 38, 17, 11, 60, - 42, 29, 7, 48, 51, 4, 30, 41, 24, 47, 53, 2, 1, 54, 44, 27, - 0, 58, 55, 13, 45, 23, 26, 32, 25, 35, 46, 20, 52, 14, 3, 57, - 50, 8, 5, 63, 31, 37, 40, 18, 43, 17, 28, 38, 6, 60, 49, 11, - 39, 29, 16, 42, 10, 48, 61, 7, 62, 4, 9, 51, 19, 41, 36, 30, - 21, 47, 34, 24, 56, 2, 15, 53, 12, 54, 59, 1, 33, 27, 22, 44, - 0, 29, 58, 39, 55, 42, 13, 16, 45, 48, 23, 10, 26, 7, 32, 61, - 25, 4, 35, 62, 46, 51, 20, 9, 52, 41, 14, 19, 3, 30, 57, 36, - 50, 47, 8, 21, 5, 24, 63, 34, 31, 2, 37, 56, 40, 53, 18, 15, - 43, 54, 17, 12, 28, 1, 38, 59, 6, 27, 60, 33, 49, 44, 11, 22, - 0, 47, 29, 50, 58, 21, 39, 8, 55, 24, 42, 5, 13, 34, 16, 63, - 45, 2, 48, 31, 23, 56, 10, 37, 26, 53, 7, 40, 32, 15, 61, 18, - 25, 54, 4, 43, 35, 12, 62, 17, 46, 1, 51, 28, 20, 59, 9, 38, - 52, 27, 41, 6, 14, 33, 19, 60, 3, 44, 30, 49, 57, 22, 36, 11, - 0, 54, 47, 25, 29, 43, 50, 4, 58, 12, 21, 35, 39, 17, 8, 62, - 55, 1, 24, 46, 42, 28, 5, 51, 13, 59, 34, 20, 16, 38, 63, 9, - 45, 27, 2, 52, 48, 6, 31, 41, 23, 33, 56, 14, 10, 60, 37, 19, - 26, 44, 53, 3, 7, 49, 40, 30, 32, 22, 15, 57, 61, 11, 18, 36, - 0, 27, 54, 45, 47, 52, 25, 2, 29, 6, 43, 48, 50, 41, 4, 31, - 58, 33, 12, 23, 21, 14, 35, 56, 39, 60, 17, 10, 8, 19, 62, 37, - 55, 44, 1, 26, 24, 3, 46, 53, 42, 49, 28, 7, 5, 30, 51, 40, - 13, 22, 59, 32, 34, 57, 20, 15, 16, 11, 38, 61, 63, 36, 9, 18, - 0, 44, 27, 55, 54, 26, 45, 1, 47, 3, 52, 24, 25, 53, 2, 46, - 29, 49, 6, 42, 43, 7, 48, 28, 50, 30, 41, 5, 4, 40, 31, 51, - 58, 22, 33, 13, 12, 32, 23, 59, 21, 57, 14, 34, 35, 15, 56, 20, - 39, 11, 60, 16, 17, 61, 10, 38, 8, 36, 19, 63, 62, 18, 37, 9, - 0, 22, 44, 58, 27, 13, 55, 33, 54, 32, 26, 12, 45, 59, 1, 23, - 47, 57, 3, 21, 52, 34, 24, 14, 25, 15, 53, 35, 2, 20, 46, 56, - 29, 11, 49, 39, 6, 16, 42, 60, 43, 61, 7, 17, 48, 38, 28, 10, - 50, 36, 30, 8, 41, 63, 5, 19, 4, 18, 40, 62, 31, 9, 51, 37, - 0, 11, 22, 29, 44, 39, 58, 49, 27, 16, 13, 6, 55, 60, 33, 42, - 54, 61, 32, 43, 26, 17, 12, 7, 45, 38, 59, 48, 1, 10, 23, 28, - 47, 36, 57, 50, 3, 8, 21, 30, 52, 63, 34, 41, 24, 19, 14, 5, - 25, 18, 15, 4, 53, 62, 35, 40, 2, 9, 20, 31, 46, 37, 56, 51, - 0, 36, 11, 47, 22, 50, 29, 57, 44, 8, 39, 3, 58, 30, 49, 21, - 27, 63, 16, 52, 13, 41, 6, 34, 55, 19, 60, 24, 33, 5, 42, 14, - 54, 18, 61, 25, 32, 4, 43, 15, 26, 62, 17, 53, 12, 40, 7, 35, - 45, 9, 38, 2, 59, 31, 48, 20, 1, 37, 10, 46, 23, 51, 28, 56, - 0, 18, 36, 54, 11, 25, 47, 61, 22, 4, 50, 32, 29, 15, 57, 43, - 44, 62, 8, 26, 39, 53, 3, 17, 58, 40, 30, 12, 49, 35, 21, 7, - 27, 9, 63, 45, 16, 2, 52, 38, 13, 31, 41, 59, 6, 20, 34, 48, - 55, 37, 19, 1, 60, 46, 24, 10, 33, 51, 5, 23, 42, 56, 14, 28, - 0, 9, 18, 27, 36, 45, 54, 63, 11, 2, 25, 16, 47, 38, 61, 52, - 22, 31, 4, 13, 50, 59, 32, 41, 29, 20, 15, 6, 57, 48, 43, 34, - 44, 37, 62, 55, 8, 1, 26, 19, 39, 46, 53, 60, 3, 10, 17, 24, - 58, 51, 40, 33, 30, 23, 12, 5, 49, 56, 35, 42, 21, 28, 7, 14, - 0, 37, 9, 44, 18, 55, 27, 62, 36, 1, 45, 8, 54, 19, 63, 26, - 11, 46, 2, 39, 25, 60, 16, 53, 47, 10, 38, 3, 61, 24, 52, 17, - 22, 51, 31, 58, 4, 33, 13, 40, 50, 23, 59, 30, 32, 5, 41, 12, - 29, 56, 20, 49, 15, 42, 6, 35, 57, 28, 48, 21, 43, 14, 34, 7, - 0, 51, 37, 22, 9, 58, 44, 31, 18, 33, 55, 4, 27, 40, 62, 13, - 36, 23, 1, 50, 45, 30, 8, 59, 54, 5, 19, 32, 63, 12, 26, 41, - 11, 56, 46, 29, 2, 49, 39, 20, 25, 42, 60, 15, 16, 35, 53, 6, - 47, 28, 10, 57, 38, 21, 3, 48, 61, 14, 24, 43, 52, 7, 17, 34, - 0, 56, 51, 11, 37, 29, 22, 46, 9, 49, 58, 2, 44, 20, 31, 39, - 18, 42, 33, 25, 55, 15, 4, 60, 27, 35, 40, 16, 62, 6, 13, 53, - 36, 28, 23, 47, 1, 57, 50, 10, 45, 21, 30, 38, 8, 48, 59, 3, - 54, 14, 5, 61, 19, 43, 32, 24, 63, 7, 12, 52, 26, 34, 41, 17, - 0, 28, 56, 36, 51, 47, 11, 23, 37, 57, 29, 1, 22, 10, 46, 50, - 9, 21, 49, 45, 58, 38, 2, 30, 44, 48, 20, 8, 31, 3, 39, 59, - 18, 14, 42, 54, 33, 61, 25, 5, 55, 43, 15, 19, 4, 24, 60, 32, - 27, 7, 35, 63, 40, 52, 16, 12, 62, 34, 6, 26, 13, 17, 53, 41, - 0, 14, 28, 18, 56, 54, 36, 42, 51, 61, 47, 33, 11, 5, 23, 25, - 37, 43, 57, 55, 29, 19, 1, 15, 22, 24, 10, 4, 46, 32, 50, 60, - 9, 7, 21, 27, 49, 63, 45, 35, 58, 52, 38, 40, 2, 12, 30, 16, - 44, 34, 48, 62, 20, 26, 8, 6, 31, 17, 3, 13, 39, 41, 59, 53, - 0, 7, 14, 9, 28, 27, 18, 21, 56, 63, 54, 49, 36, 35, 42, 45, - 51, 52, 61, 58, 47, 40, 33, 38, 11, 12, 5, 2, 23, 16, 25, 30, - 37, 34, 43, 44, 57, 62, 55, 48, 29, 26, 19, 20, 1, 6, 15, 8, - 22, 17, 24, 31, 10, 13, 4, 3, 46, 41, 32, 39, 50, 53, 60, 59, - 0, 34, 7, 37, 14, 44, 9, 43, 28, 62, 27, 57, 18, 48, 21, 55, - 56, 26, 63, 29, 54, 20, 49, 19, 36, 6, 35, 1, 42, 8, 45, 15, - 51, 17, 52, 22, 61, 31, 58, 24, 47, 13, 40, 10, 33, 3, 38, 4, - 11, 41, 12, 46, 5, 39, 2, 32, 23, 53, 16, 50, 25, 59, 30, 60, - 0, 17, 34, 51, 7, 22, 37, 52, 14, 31, 44, 61, 9, 24, 43, 58, - 28, 13, 62, 47, 27, 10, 57, 40, 18, 3, 48, 33, 21, 4, 55, 38, - 56, 41, 26, 11, 63, 46, 29, 12, 54, 39, 20, 5, 49, 32, 19, 2, - 36, 53, 6, 23, 35, 50, 1, 16, 42, 59, 8, 25, 45, 60, 15, 30, - 0, 41, 17, 56, 34, 11, 51, 26, 7, 46, 22, 63, 37, 12, 52, 29, - 14, 39, 31, 54, 44, 5, 61, 20, 9, 32, 24, 49, 43, 2, 58, 19, - 28, 53, 13, 36, 62, 23, 47, 6, 27, 50, 10, 35, 57, 16, 40, 1, - 18, 59, 3, 42, 48, 25, 33, 8, 21, 60, 4, 45, 55, 30, 38, 15, - 0, 53, 41, 28, 17, 36, 56, 13, 34, 23, 11, 62, 51, 6, 26, 47, - 7, 50, 46, 27, 22, 35, 63, 10, 37, 16, 12, 57, 52, 1, 29, 40, - 14, 59, 39, 18, 31, 42, 54, 3, 44, 25, 5, 48, 61, 8, 20, 33, - 9, 60, 32, 21, 24, 45, 49, 4, 43, 30, 2, 55, 58, 15, 19, 38, - 0, 59, 53, 14, 41, 18, 28, 39, 17, 42, 36, 31, 56, 3, 13, 54, - 34, 25, 23, 44, 11, 48, 62, 5, 51, 8, 6, 61, 26, 33, 47, 20, - 7, 60, 50, 9, 46, 21, 27, 32, 22, 45, 35, 24, 63, 4, 10, 49, - 37, 30, 16, 43, 12, 55, 57, 2, 52, 15, 1, 58, 29, 38, 40, 19, - 0, 60, 59, 7, 53, 9, 14, 50, 41, 21, 18, 46, 28, 32, 39, 27, - 17, 45, 42, 22, 36, 24, 31, 35, 56, 4, 3, 63, 13, 49, 54, 10, - 34, 30, 25, 37, 23, 43, 44, 16, 11, 55, 48, 12, 62, 2, 5, 57, - 51, 15, 8, 52, 6, 58, 61, 1, 26, 38, 33, 29, 47, 19, 20, 40, - 0, 30, 60, 34, 59, 37, 7, 25, 53, 43, 9, 23, 14, 16, 50, 44, - 41, 55, 21, 11, 18, 12, 46, 48, 28, 2, 32, 62, 39, 57, 27, 5, - 17, 15, 45, 51, 42, 52, 22, 8, 36, 58, 24, 6, 31, 1, 35, 61, - 56, 38, 4, 26, 3, 29, 63, 33, 13, 19, 49, 47, 54, 40, 10, 20, - 0, 15, 30, 17, 60, 51, 34, 45, 59, 52, 37, 42, 7, 8, 25, 22, - 53, 58, 43, 36, 9, 6, 23, 24, 14, 1, 16, 31, 50, 61, 44, 35, - 41, 38, 55, 56, 21, 26, 11, 4, 18, 29, 12, 3, 46, 33, 48, 63, - 28, 19, 2, 13, 32, 47, 62, 49, 39, 40, 57, 54, 27, 20, 5, 10, - 0, 38, 15, 41, 30, 56, 17, 55, 60, 26, 51, 21, 34, 4, 45, 11, - 59, 29, 52, 18, 37, 3, 42, 12, 7, 33, 8, 46, 25, 63, 22, 48, - 53, 19, 58, 28, 43, 13, 36, 2, 9, 47, 6, 32, 23, 49, 24, 62, - 14, 40, 1, 39, 16, 54, 31, 57, 50, 20, 61, 27, 44, 10, 35, 5, - 0, 19, 38, 53, 15, 28, 41, 58, 30, 13, 56, 43, 17, 2, 55, 36, - 60, 47, 26, 9, 51, 32, 21, 6, 34, 49, 4, 23, 45, 62, 11, 24, - 59, 40, 29, 14, 52, 39, 18, 1, 37, 54, 3, 16, 42, 57, 12, 31, - 7, 20, 33, 50, 8, 27, 46, 61, 25, 10, 63, 44, 22, 5, 48, 35, - 0, 40, 19, 59, 38, 14, 53, 29, 15, 39, 28, 52, 41, 1, 58, 18, - 30, 54, 13, 37, 56, 16, 43, 3, 17, 57, 2, 42, 55, 31, 36, 12, - 60, 20, 47, 7, 26, 50, 9, 33, 51, 27, 32, 8, 21, 61, 6, 46, - 34, 10, 49, 25, 4, 44, 23, 63, 45, 5, 62, 22, 11, 35, 24, 48, - 0, 20, 40, 60, 19, 7, 59, 47, 38, 50, 14, 26, 53, 33, 29, 9, - 15, 27, 39, 51, 28, 8, 52, 32, 41, 61, 1, 21, 58, 46, 18, 6, - 30, 10, 54, 34, 13, 25, 37, 49, 56, 44, 16, 4, 43, 63, 3, 23, - 17, 5, 57, 45, 2, 22, 42, 62, 55, 35, 31, 11, 36, 48, 12, 24, - 0, 10, 20, 30, 40, 34, 60, 54, 19, 25, 7, 13, 59, 49, 47, 37, - 38, 44, 50, 56, 14, 4, 26, 16, 53, 63, 33, 43, 29, 23, 9, 3, - 15, 5, 27, 17, 39, 45, 51, 57, 28, 22, 8, 2, 52, 62, 32, 42, - 41, 35, 61, 55, 1, 11, 21, 31, 58, 48, 46, 36, 18, 24, 6, 12, - 0, 5, 10, 15, 20, 17, 30, 27, 40, 45, 34, 39, 60, 57, 54, 51, - 19, 22, 25, 28, 7, 2, 13, 8, 59, 62, 49, 52, 47, 42, 37, 32, - 38, 35, 44, 41, 50, 55, 56, 61, 14, 11, 4, 1, 26, 31, 16, 21, - 53, 48, 63, 58, 33, 36, 43, 46, 29, 24, 23, 18, 9, 12, 3, 6, - 0, 35, 5, 38, 10, 41, 15, 44, 20, 55, 17, 50, 30, 61, 27, 56, - 40, 11, 45, 14, 34, 1, 39, 4, 60, 31, 57, 26, 54, 21, 51, 16, - 19, 48, 22, 53, 25, 58, 28, 63, 7, 36, 2, 33, 13, 46, 8, 43, - 59, 24, 62, 29, 49, 18, 52, 23, 47, 12, 42, 9, 37, 6, 32, 3, - 0, 48, 35, 19, 5, 53, 38, 22, 10, 58, 41, 25, 15, 63, 44, 28, - 20, 36, 55, 7, 17, 33, 50, 2, 30, 46, 61, 13, 27, 43, 56, 8, - 40, 24, 11, 59, 45, 29, 14, 62, 34, 18, 1, 49, 39, 23, 4, 52, - 60, 12, 31, 47, 57, 9, 26, 42, 54, 6, 21, 37, 51, 3, 16, 32, - 0, 24, 48, 40, 35, 59, 19, 11, 5, 29, 53, 45, 38, 62, 22, 14, - 10, 18, 58, 34, 41, 49, 25, 1, 15, 23, 63, 39, 44, 52, 28, 4, - 20, 12, 36, 60, 55, 47, 7, 31, 17, 9, 33, 57, 50, 42, 2, 26, - 30, 6, 46, 54, 61, 37, 13, 21, 27, 3, 43, 51, 56, 32, 8, 16, - 0, 12, 24, 20, 48, 60, 40, 36, 35, 47, 59, 55, 19, 31, 11, 7, - 5, 9, 29, 17, 53, 57, 45, 33, 38, 42, 62, 50, 22, 26, 14, 2, - 10, 6, 18, 30, 58, 54, 34, 46, 41, 37, 49, 61, 25, 21, 1, 13, - 15, 3, 23, 27, 63, 51, 39, 43, 44, 32, 52, 56, 28, 16, 4, 8, - 0, 6, 12, 10, 24, 30, 20, 18, 48, 54, 60, 58, 40, 46, 36, 34, - 35, 37, 47, 41, 59, 61, 55, 49, 19, 21, 31, 25, 11, 13, 7, 1, - 5, 3, 9, 15, 29, 27, 17, 23, 53, 51, 57, 63, 45, 43, 33, 39, - 38, 32, 42, 44, 62, 56, 50, 52, 22, 16, 26, 28, 14, 8, 2, 4, - 0, 3, 6, 5, 12, 15, 10, 9, 24, 27, 30, 29, 20, 23, 18, 17, - 48, 51, 54, 53, 60, 63, 58, 57, 40, 43, 46, 45, 36, 39, 34, 33, - 35, 32, 37, 38, 47, 44, 41, 42, 59, 56, 61, 62, 55, 52, 49, 50, - 19, 16, 21, 22, 31, 28, 25, 26, 11, 8, 13, 14, 7, 4, 1, 2, - 0, 32, 3, 35, 6, 38, 5, 37, 12, 44, 15, 47, 10, 42, 9, 41, - 24, 56, 27, 59, 30, 62, 29, 61, 20, 52, 23, 55, 18, 50, 17, 49, - 48, 16, 51, 19, 54, 22, 53, 21, 60, 28, 63, 31, 58, 26, 57, 25, - 40, 8, 43, 11, 46, 14, 45, 13, 36, 4, 39, 7, 34, 2, 33, 1, - 0, 16, 32, 48, 3, 19, 35, 51, 6, 22, 38, 54, 5, 21, 37, 53, - 12, 28, 44, 60, 15, 31, 47, 63, 10, 26, 42, 58, 9, 25, 41, 57, - 24, 8, 56, 40, 27, 11, 59, 43, 30, 14, 62, 46, 29, 13, 61, 45, - 20, 4, 52, 36, 23, 7, 55, 39, 18, 2, 50, 34, 17, 1, 49, 33, - 0, 8, 16, 24, 32, 40, 48, 56, 3, 11, 19, 27, 35, 43, 51, 59, - 6, 14, 22, 30, 38, 46, 54, 62, 5, 13, 21, 29, 37, 45, 53, 61, - 12, 4, 28, 20, 44, 36, 60, 52, 15, 7, 31, 23, 47, 39, 63, 55, - 10, 2, 26, 18, 42, 34, 58, 50, 9, 1, 25, 17, 41, 33, 57, 49, - 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, - 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, - 6, 2, 14, 10, 22, 18, 30, 26, 38, 34, 46, 42, 54, 50, 62, 58, - 5, 1, 13, 9, 21, 17, 29, 25, 37, 33, 45, 41, 53, 49, 61, 57, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, - 3, 1, 7, 5, 11, 9, 15, 13, 19, 17, 23, 21, 27, 25, 31, 29, - 35, 33, 39, 37, 43, 41, 47, 45, 51, 49, 55, 53, 59, 57, 63, 61 -}; - -const qracode qra_12_63_64_irr_b = { - qra_K, - qra_N, - qra_m, - qra_M, - qra_a, - qra_NC, - qra_V, - qra_C, - qra_NMSG, - qra_MAXVDEG, - qra_MAXCDEG, - QRATYPE_NORMAL, - qra_R, - CODE_NAME, - qra_acc_input_idx, - qra_acc_input_wlog, - qra_log, - qra_exp, - qra_msgw, - qra_vdeg, - qra_cdeg, - qra_v2cmidx, - qra_c2vmidx, - qra_pmat -}; - -#undef qra_K -#undef qra_N -#undef qra_m -#undef qra_M -#undef qra_a -#undef qra_NC -#undef qra_V -#undef qra_C -#undef qra_NMSG -#undef qra_MAXVDEG -#undef qra_MAXCDEG -#undef qra_R -#undef CODE_NAME \ No newline at end of file diff --git a/lib/qra/qracodes/qra12_63_64_irr_b.h b/lib/qra/qracodes/qra12_63_64_irr_b.h deleted file mode 100644 index bf70b36..0000000 --- a/lib/qra/qracodes/qra12_63_64_irr_b.h +++ /dev/null @@ -1,39 +0,0 @@ -// qra12_63_64_irr_b.h -// Code tables and defines for Q-ary RA code (12,63) over GF(64) -// Code Name: qra12_63_64_irr_b -// (12,63) RA Code over GF(64) - RF=333344455567 - -// (c) 2016 - Nico Palermo - IV3NWV - Microtelecom Srl, Italy - -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#ifndef _qra12_63_64_irr_b_h -#define _qra12_63_64_irr_b_h - -#include "qracodes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern const qracode qra_12_63_64_irr_b; - -#ifdef __cplusplus -} -#endif - -#endif // _qra12_63_64_irr_b_h diff --git a/lib/qra/qracodes/qra13_64_64_irr_e.c b/lib/qra/qracodes/qra13_64_64_irr_e.c deleted file mode 100644 index 7adf22f..0000000 --- a/lib/qra/qracodes/qra13_64_64_irr_e.c +++ /dev/null @@ -1,534 +0,0 @@ -// qra13_64_64_irr_e.c -// Encoding/Decoding tables for Q-ary RA code (13,64) over GF(64) -// Code Name: qra13_64_64_irr_e -// (13,64) RA Code over GF(64) RF=[3x4 4x4 6x1 3x2 5x1 7x1]/18 - -// (c) 2016 - Nico Palermo - IV3NWV - Microtelecom Srl, Italy - -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#include "qra13_64_64_irr_e.h" - -#define qra_K 13 // number of information symbols -#define qra_N 64 // codeword length in symbols -#define qra_m 6 // bits/symbol -#define qra_M 64 // Symbol alphabet cardinality -#define qra_a 1 // grouping factor -#define qra_NC 51 // number of check symbols (N-K) - -// Defines used by the message passing decoder -------- - -#define qra_V 64 // number of variables in the code graph (N) -#define qra_C 116 // number of factors in the code graph (N +(N-K)+1) -#define qra_NMSG 218 // number of msgs in the code graph -#define qra_MAXVDEG 8 // maximum variable degree -#define qra_MAXCDEG 3 // maximum factor degree -#define qra_R 0.20313f // code rate (K/N) -#define CODE_NAME "qra_13_64_64_irr_e" - -// table of the systematic symbols indexes in the accumulator chain -static const int qra_acc_input_idx[qra_NC+1] = { - 12, 4, 3, 9, 0, 11, 6, 8, 12, 1, - 2, 7, 4, 11, 3, 5, 9, 8, 12, 7, - 2, 4, 10, 3, 5, 11, 12, 8, 9, 6, - 7, 2, 5, 4, 12, 8, 11, 1, 6, 7, - 0, 10, 12, 8, 11, 5, 6, 1, 0, 10, - 12, 8 -}; - -// table of the systematic symbols weight logarithms over GF(M) -static const int qra_acc_input_wlog[qra_NC+1] = { - 0, 27, 0, 0, 0, 31, 28, 61, 31, 0, - 0, 52, 22, 7, 19, 47, 44, 62, 32, 50, - 52, 42, 48, 56, 40, 50, 51, 37, 37, 0, - 5, 14, 0, 0, 18, 2, 0, 45, 21, 0, - 62, 8, 11, 60, 36, 32, 17, 9, 5, 0, - 53, 0 -}; - -// table of the logarithms of the elements of GF(M) (log(0) never used) -static const int qra_log[qra_M] = { - -1, 0, 1, 6, 2, 12, 7, 26, 3, 32, - 13, 35, 8, 48, 27, 18, 4, 24, 33, 16, - 14, 52, 36, 54, 9, 45, 49, 38, 28, 41, - 19, 56, 5, 62, 25, 11, 34, 31, 17, 47, - 15, 23, 53, 51, 37, 44, 55, 40, 10, 61, - 46, 30, 50, 22, 39, 43, 29, 60, 42, 21, - 20, 59, 57, 58 -}; - -// table of GF(M) elements given their logarithm -static const int qra_exp[qra_M-1] = { - 1, 2, 4, 8, 16, 32, 3, 6, 12, 24, - 48, 35, 5, 10, 20, 40, 19, 38, 15, 30, - 60, 59, 53, 41, 17, 34, 7, 14, 28, 56, - 51, 37, 9, 18, 36, 11, 22, 44, 27, 54, - 47, 29, 58, 55, 45, 25, 50, 39, 13, 26, - 52, 43, 21, 42, 23, 46, 31, 62, 63, 61, - 57, 49, 33 -}; - -// table of the messages weight logarithms over GF(M) -static const int qra_msgw[qra_NMSG] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 31, - 28, 61, 31, 0, 0, 52, 22, 7, 19, 47, - 44, 62, 32, 50, 52, 42, 48, 56, 40, 50, - 51, 37, 37, 0, 5, 14, 0, 0, 18, 2, - 0, 45, 21, 0, 62, 8, 11, 60, 36, 32, - 17, 9, 5, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - -// table of the degrees of the variable nodes -static const int qra_vdeg[qra_V] = { - 4, 4, 4, 4, 5, 5, 5, 5, 7, 4, - 4, 6, 8, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3 -}; - -// table of the degrees of the factor nodes -static const int qra_cdeg[qra_C] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 2 -}; - -// table (uncompressed) of the v->c message indexes (-1=unused entry) -static const int qra_v2cmidx[qra_V*qra_MAXVDEG] = { - 0, 68, 104, 112, -1, -1, -1, -1, - 1, 73, 101, 111, -1, -1, -1, -1, - 2, 74, 84, 95, -1, -1, -1, -1, - 3, 66, 78, 87, -1, -1, -1, -1, - 4, 65, 76, 85, 97, -1, -1, -1, - 5, 79, 88, 96, 109, -1, -1, -1, - 6, 70, 93, 102, 110, -1, -1, -1, - 7, 75, 83, 94, 103, -1, -1, -1, - 8, 71, 81, 91, 99, 107, 115, -1, - 9, 67, 80, 92, -1, -1, -1, -1, - 10, 86, 105, 113, -1, -1, -1, -1, - 11, 69, 77, 89, 100, 108, -1, -1, - 12, 64, 72, 82, 90, 98, 106, 114, - 13, 116, 117, -1, -1, -1, -1, -1, - 14, 118, 119, -1, -1, -1, -1, -1, - 15, 120, 121, -1, -1, -1, -1, -1, - 16, 122, 123, -1, -1, -1, -1, -1, - 17, 124, 125, -1, -1, -1, -1, -1, - 18, 126, 127, -1, -1, -1, -1, -1, - 19, 128, 129, -1, -1, -1, -1, -1, - 20, 130, 131, -1, -1, -1, -1, -1, - 21, 132, 133, -1, -1, -1, -1, -1, - 22, 134, 135, -1, -1, -1, -1, -1, - 23, 136, 137, -1, -1, -1, -1, -1, - 24, 138, 139, -1, -1, -1, -1, -1, - 25, 140, 141, -1, -1, -1, -1, -1, - 26, 142, 143, -1, -1, -1, -1, -1, - 27, 144, 145, -1, -1, -1, -1, -1, - 28, 146, 147, -1, -1, -1, -1, -1, - 29, 148, 149, -1, -1, -1, -1, -1, - 30, 150, 151, -1, -1, -1, -1, -1, - 31, 152, 153, -1, -1, -1, -1, -1, - 32, 154, 155, -1, -1, -1, -1, -1, - 33, 156, 157, -1, -1, -1, -1, -1, - 34, 158, 159, -1, -1, -1, -1, -1, - 35, 160, 161, -1, -1, -1, -1, -1, - 36, 162, 163, -1, -1, -1, -1, -1, - 37, 164, 165, -1, -1, -1, -1, -1, - 38, 166, 167, -1, -1, -1, -1, -1, - 39, 168, 169, -1, -1, -1, -1, -1, - 40, 170, 171, -1, -1, -1, -1, -1, - 41, 172, 173, -1, -1, -1, -1, -1, - 42, 174, 175, -1, -1, -1, -1, -1, - 43, 176, 177, -1, -1, -1, -1, -1, - 44, 178, 179, -1, -1, -1, -1, -1, - 45, 180, 181, -1, -1, -1, -1, -1, - 46, 182, 183, -1, -1, -1, -1, -1, - 47, 184, 185, -1, -1, -1, -1, -1, - 48, 186, 187, -1, -1, -1, -1, -1, - 49, 188, 189, -1, -1, -1, -1, -1, - 50, 190, 191, -1, -1, -1, -1, -1, - 51, 192, 193, -1, -1, -1, -1, -1, - 52, 194, 195, -1, -1, -1, -1, -1, - 53, 196, 197, -1, -1, -1, -1, -1, - 54, 198, 199, -1, -1, -1, -1, -1, - 55, 200, 201, -1, -1, -1, -1, -1, - 56, 202, 203, -1, -1, -1, -1, -1, - 57, 204, 205, -1, -1, -1, -1, -1, - 58, 206, 207, -1, -1, -1, -1, -1, - 59, 208, 209, -1, -1, -1, -1, -1, - 60, 210, 211, -1, -1, -1, -1, -1, - 61, 212, 213, -1, -1, -1, -1, -1, - 62, 214, 215, -1, -1, -1, -1, -1, - 63, 216, 217, -1, -1, -1, -1, -1 -}; - -// table (uncompressed) of the c->v message indexes (-1=unused entry) -static const int qra_c2vmidx[qra_C*qra_MAXCDEG] = { - 0, -1, -1, 1, -1, -1, 2, -1, -1, 3, -1, -1, - 4, -1, -1, 5, -1, -1, 6, -1, -1, 7, -1, -1, - 8, -1, -1, 9, -1, -1, 10, -1, -1, 11, -1, -1, - 12, -1, -1, 13, -1, -1, 14, -1, -1, 15, -1, -1, - 16, -1, -1, 17, -1, -1, 18, -1, -1, 19, -1, -1, - 20, -1, -1, 21, -1, -1, 22, -1, -1, 23, -1, -1, - 24, -1, -1, 25, -1, -1, 26, -1, -1, 27, -1, -1, - 28, -1, -1, 29, -1, -1, 30, -1, -1, 31, -1, -1, - 32, -1, -1, 33, -1, -1, 34, -1, -1, 35, -1, -1, - 36, -1, -1, 37, -1, -1, 38, -1, -1, 39, -1, -1, - 40, -1, -1, 41, -1, -1, 42, -1, -1, 43, -1, -1, - 44, -1, -1, 45, -1, -1, 46, -1, -1, 47, -1, -1, - 48, -1, -1, 49, -1, -1, 50, -1, -1, 51, -1, -1, - 52, -1, -1, 53, -1, -1, 54, -1, -1, 55, -1, -1, - 56, -1, -1, 57, -1, -1, 58, -1, -1, 59, -1, -1, - 60, -1, -1, 61, -1, -1, 62, -1, -1, 63, -1, -1, - 64, 116, -1, 65, 117, 118, 66, 119, 120, 67, 121, 122, - 68, 123, 124, 69, 125, 126, 70, 127, 128, 71, 129, 130, - 72, 131, 132, 73, 133, 134, 74, 135, 136, 75, 137, 138, - 76, 139, 140, 77, 141, 142, 78, 143, 144, 79, 145, 146, - 80, 147, 148, 81, 149, 150, 82, 151, 152, 83, 153, 154, - 84, 155, 156, 85, 157, 158, 86, 159, 160, 87, 161, 162, - 88, 163, 164, 89, 165, 166, 90, 167, 168, 91, 169, 170, - 92, 171, 172, 93, 173, 174, 94, 175, 176, 95, 177, 178, - 96, 179, 180, 97, 181, 182, 98, 183, 184, 99, 185, 186, -100, 187, 188, 101, 189, 190, 102, 191, 192, 103, 193, 194, -104, 195, 196, 105, 197, 198, 106, 199, 200, 107, 201, 202, -108, 203, 204, 109, 205, 206, 110, 207, 208, 111, 209, 210, -112, 211, 212, 113, 213, 214, 114, 215, 216, 115, 217, -1 -}; - -// permutation matrix to compute Prob(x*alfa^logw) -static const int qra_pmat[qra_M*qra_M] = { - 0, 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, 59, 60, 61, 62, 63, - 0, 33, 1, 32, 2, 35, 3, 34, 4, 37, 5, 36, 6, 39, 7, 38, - 8, 41, 9, 40, 10, 43, 11, 42, 12, 45, 13, 44, 14, 47, 15, 46, - 16, 49, 17, 48, 18, 51, 19, 50, 20, 53, 21, 52, 22, 55, 23, 54, - 24, 57, 25, 56, 26, 59, 27, 58, 28, 61, 29, 60, 30, 63, 31, 62, - 0, 49, 33, 16, 1, 48, 32, 17, 2, 51, 35, 18, 3, 50, 34, 19, - 4, 53, 37, 20, 5, 52, 36, 21, 6, 55, 39, 22, 7, 54, 38, 23, - 8, 57, 41, 24, 9, 56, 40, 25, 10, 59, 43, 26, 11, 58, 42, 27, - 12, 61, 45, 28, 13, 60, 44, 29, 14, 63, 47, 30, 15, 62, 46, 31, - 0, 57, 49, 8, 33, 24, 16, 41, 1, 56, 48, 9, 32, 25, 17, 40, - 2, 59, 51, 10, 35, 26, 18, 43, 3, 58, 50, 11, 34, 27, 19, 42, - 4, 61, 53, 12, 37, 28, 20, 45, 5, 60, 52, 13, 36, 29, 21, 44, - 6, 63, 55, 14, 39, 30, 22, 47, 7, 62, 54, 15, 38, 31, 23, 46, - 0, 61, 57, 4, 49, 12, 8, 53, 33, 28, 24, 37, 16, 45, 41, 20, - 1, 60, 56, 5, 48, 13, 9, 52, 32, 29, 25, 36, 17, 44, 40, 21, - 2, 63, 59, 6, 51, 14, 10, 55, 35, 30, 26, 39, 18, 47, 43, 22, - 3, 62, 58, 7, 50, 15, 11, 54, 34, 31, 27, 38, 19, 46, 42, 23, - 0, 63, 61, 2, 57, 6, 4, 59, 49, 14, 12, 51, 8, 55, 53, 10, - 33, 30, 28, 35, 24, 39, 37, 26, 16, 47, 45, 18, 41, 22, 20, 43, - 1, 62, 60, 3, 56, 7, 5, 58, 48, 15, 13, 50, 9, 54, 52, 11, - 32, 31, 29, 34, 25, 38, 36, 27, 17, 46, 44, 19, 40, 23, 21, 42, - 0, 62, 63, 1, 61, 3, 2, 60, 57, 7, 6, 56, 4, 58, 59, 5, - 49, 15, 14, 48, 12, 50, 51, 13, 8, 54, 55, 9, 53, 11, 10, 52, - 33, 31, 30, 32, 28, 34, 35, 29, 24, 38, 39, 25, 37, 27, 26, 36, - 16, 46, 47, 17, 45, 19, 18, 44, 41, 23, 22, 40, 20, 42, 43, 21, - 0, 31, 62, 33, 63, 32, 1, 30, 61, 34, 3, 28, 2, 29, 60, 35, - 57, 38, 7, 24, 6, 25, 56, 39, 4, 27, 58, 37, 59, 36, 5, 26, - 49, 46, 15, 16, 14, 17, 48, 47, 12, 19, 50, 45, 51, 44, 13, 18, - 8, 23, 54, 41, 55, 40, 9, 22, 53, 42, 11, 20, 10, 21, 52, 43, - 0, 46, 31, 49, 62, 16, 33, 15, 63, 17, 32, 14, 1, 47, 30, 48, - 61, 19, 34, 12, 3, 45, 28, 50, 2, 44, 29, 51, 60, 18, 35, 13, - 57, 23, 38, 8, 7, 41, 24, 54, 6, 40, 25, 55, 56, 22, 39, 9, - 4, 42, 27, 53, 58, 20, 37, 11, 59, 21, 36, 10, 5, 43, 26, 52, - 0, 23, 46, 57, 31, 8, 49, 38, 62, 41, 16, 7, 33, 54, 15, 24, - 63, 40, 17, 6, 32, 55, 14, 25, 1, 22, 47, 56, 30, 9, 48, 39, - 61, 42, 19, 4, 34, 53, 12, 27, 3, 20, 45, 58, 28, 11, 50, 37, - 2, 21, 44, 59, 29, 10, 51, 36, 60, 43, 18, 5, 35, 52, 13, 26, - 0, 42, 23, 61, 46, 4, 57, 19, 31, 53, 8, 34, 49, 27, 38, 12, - 62, 20, 41, 3, 16, 58, 7, 45, 33, 11, 54, 28, 15, 37, 24, 50, - 63, 21, 40, 2, 17, 59, 6, 44, 32, 10, 55, 29, 14, 36, 25, 51, - 1, 43, 22, 60, 47, 5, 56, 18, 30, 52, 9, 35, 48, 26, 39, 13, - 0, 21, 42, 63, 23, 2, 61, 40, 46, 59, 4, 17, 57, 44, 19, 6, - 31, 10, 53, 32, 8, 29, 34, 55, 49, 36, 27, 14, 38, 51, 12, 25, - 62, 43, 20, 1, 41, 60, 3, 22, 16, 5, 58, 47, 7, 18, 45, 56, - 33, 52, 11, 30, 54, 35, 28, 9, 15, 26, 37, 48, 24, 13, 50, 39, - 0, 43, 21, 62, 42, 1, 63, 20, 23, 60, 2, 41, 61, 22, 40, 3, - 46, 5, 59, 16, 4, 47, 17, 58, 57, 18, 44, 7, 19, 56, 6, 45, - 31, 52, 10, 33, 53, 30, 32, 11, 8, 35, 29, 54, 34, 9, 55, 28, - 49, 26, 36, 15, 27, 48, 14, 37, 38, 13, 51, 24, 12, 39, 25, 50, - 0, 52, 43, 31, 21, 33, 62, 10, 42, 30, 1, 53, 63, 11, 20, 32, - 23, 35, 60, 8, 2, 54, 41, 29, 61, 9, 22, 34, 40, 28, 3, 55, - 46, 26, 5, 49, 59, 15, 16, 36, 4, 48, 47, 27, 17, 37, 58, 14, - 57, 13, 18, 38, 44, 24, 7, 51, 19, 39, 56, 12, 6, 50, 45, 25, - 0, 26, 52, 46, 43, 49, 31, 5, 21, 15, 33, 59, 62, 36, 10, 16, - 42, 48, 30, 4, 1, 27, 53, 47, 63, 37, 11, 17, 20, 14, 32, 58, - 23, 13, 35, 57, 60, 38, 8, 18, 2, 24, 54, 44, 41, 51, 29, 7, - 61, 39, 9, 19, 22, 12, 34, 56, 40, 50, 28, 6, 3, 25, 55, 45, - 0, 13, 26, 23, 52, 57, 46, 35, 43, 38, 49, 60, 31, 18, 5, 8, - 21, 24, 15, 2, 33, 44, 59, 54, 62, 51, 36, 41, 10, 7, 16, 29, - 42, 39, 48, 61, 30, 19, 4, 9, 1, 12, 27, 22, 53, 56, 47, 34, - 63, 50, 37, 40, 11, 6, 17, 28, 20, 25, 14, 3, 32, 45, 58, 55, - 0, 39, 13, 42, 26, 61, 23, 48, 52, 19, 57, 30, 46, 9, 35, 4, - 43, 12, 38, 1, 49, 22, 60, 27, 31, 56, 18, 53, 5, 34, 8, 47, - 21, 50, 24, 63, 15, 40, 2, 37, 33, 6, 44, 11, 59, 28, 54, 17, - 62, 25, 51, 20, 36, 3, 41, 14, 10, 45, 7, 32, 16, 55, 29, 58, - 0, 50, 39, 21, 13, 63, 42, 24, 26, 40, 61, 15, 23, 37, 48, 2, - 52, 6, 19, 33, 57, 11, 30, 44, 46, 28, 9, 59, 35, 17, 4, 54, - 43, 25, 12, 62, 38, 20, 1, 51, 49, 3, 22, 36, 60, 14, 27, 41, - 31, 45, 56, 10, 18, 32, 53, 7, 5, 55, 34, 16, 8, 58, 47, 29, - 0, 25, 50, 43, 39, 62, 21, 12, 13, 20, 63, 38, 42, 51, 24, 1, - 26, 3, 40, 49, 61, 36, 15, 22, 23, 14, 37, 60, 48, 41, 2, 27, - 52, 45, 6, 31, 19, 10, 33, 56, 57, 32, 11, 18, 30, 7, 44, 53, - 46, 55, 28, 5, 9, 16, 59, 34, 35, 58, 17, 8, 4, 29, 54, 47, - 0, 45, 25, 52, 50, 31, 43, 6, 39, 10, 62, 19, 21, 56, 12, 33, - 13, 32, 20, 57, 63, 18, 38, 11, 42, 7, 51, 30, 24, 53, 1, 44, - 26, 55, 3, 46, 40, 5, 49, 28, 61, 16, 36, 9, 15, 34, 22, 59, - 23, 58, 14, 35, 37, 8, 60, 17, 48, 29, 41, 4, 2, 47, 27, 54, - 0, 55, 45, 26, 25, 46, 52, 3, 50, 5, 31, 40, 43, 28, 6, 49, - 39, 16, 10, 61, 62, 9, 19, 36, 21, 34, 56, 15, 12, 59, 33, 22, - 13, 58, 32, 23, 20, 35, 57, 14, 63, 8, 18, 37, 38, 17, 11, 60, - 42, 29, 7, 48, 51, 4, 30, 41, 24, 47, 53, 2, 1, 54, 44, 27, - 0, 58, 55, 13, 45, 23, 26, 32, 25, 35, 46, 20, 52, 14, 3, 57, - 50, 8, 5, 63, 31, 37, 40, 18, 43, 17, 28, 38, 6, 60, 49, 11, - 39, 29, 16, 42, 10, 48, 61, 7, 62, 4, 9, 51, 19, 41, 36, 30, - 21, 47, 34, 24, 56, 2, 15, 53, 12, 54, 59, 1, 33, 27, 22, 44, - 0, 29, 58, 39, 55, 42, 13, 16, 45, 48, 23, 10, 26, 7, 32, 61, - 25, 4, 35, 62, 46, 51, 20, 9, 52, 41, 14, 19, 3, 30, 57, 36, - 50, 47, 8, 21, 5, 24, 63, 34, 31, 2, 37, 56, 40, 53, 18, 15, - 43, 54, 17, 12, 28, 1, 38, 59, 6, 27, 60, 33, 49, 44, 11, 22, - 0, 47, 29, 50, 58, 21, 39, 8, 55, 24, 42, 5, 13, 34, 16, 63, - 45, 2, 48, 31, 23, 56, 10, 37, 26, 53, 7, 40, 32, 15, 61, 18, - 25, 54, 4, 43, 35, 12, 62, 17, 46, 1, 51, 28, 20, 59, 9, 38, - 52, 27, 41, 6, 14, 33, 19, 60, 3, 44, 30, 49, 57, 22, 36, 11, - 0, 54, 47, 25, 29, 43, 50, 4, 58, 12, 21, 35, 39, 17, 8, 62, - 55, 1, 24, 46, 42, 28, 5, 51, 13, 59, 34, 20, 16, 38, 63, 9, - 45, 27, 2, 52, 48, 6, 31, 41, 23, 33, 56, 14, 10, 60, 37, 19, - 26, 44, 53, 3, 7, 49, 40, 30, 32, 22, 15, 57, 61, 11, 18, 36, - 0, 27, 54, 45, 47, 52, 25, 2, 29, 6, 43, 48, 50, 41, 4, 31, - 58, 33, 12, 23, 21, 14, 35, 56, 39, 60, 17, 10, 8, 19, 62, 37, - 55, 44, 1, 26, 24, 3, 46, 53, 42, 49, 28, 7, 5, 30, 51, 40, - 13, 22, 59, 32, 34, 57, 20, 15, 16, 11, 38, 61, 63, 36, 9, 18, - 0, 44, 27, 55, 54, 26, 45, 1, 47, 3, 52, 24, 25, 53, 2, 46, - 29, 49, 6, 42, 43, 7, 48, 28, 50, 30, 41, 5, 4, 40, 31, 51, - 58, 22, 33, 13, 12, 32, 23, 59, 21, 57, 14, 34, 35, 15, 56, 20, - 39, 11, 60, 16, 17, 61, 10, 38, 8, 36, 19, 63, 62, 18, 37, 9, - 0, 22, 44, 58, 27, 13, 55, 33, 54, 32, 26, 12, 45, 59, 1, 23, - 47, 57, 3, 21, 52, 34, 24, 14, 25, 15, 53, 35, 2, 20, 46, 56, - 29, 11, 49, 39, 6, 16, 42, 60, 43, 61, 7, 17, 48, 38, 28, 10, - 50, 36, 30, 8, 41, 63, 5, 19, 4, 18, 40, 62, 31, 9, 51, 37, - 0, 11, 22, 29, 44, 39, 58, 49, 27, 16, 13, 6, 55, 60, 33, 42, - 54, 61, 32, 43, 26, 17, 12, 7, 45, 38, 59, 48, 1, 10, 23, 28, - 47, 36, 57, 50, 3, 8, 21, 30, 52, 63, 34, 41, 24, 19, 14, 5, - 25, 18, 15, 4, 53, 62, 35, 40, 2, 9, 20, 31, 46, 37, 56, 51, - 0, 36, 11, 47, 22, 50, 29, 57, 44, 8, 39, 3, 58, 30, 49, 21, - 27, 63, 16, 52, 13, 41, 6, 34, 55, 19, 60, 24, 33, 5, 42, 14, - 54, 18, 61, 25, 32, 4, 43, 15, 26, 62, 17, 53, 12, 40, 7, 35, - 45, 9, 38, 2, 59, 31, 48, 20, 1, 37, 10, 46, 23, 51, 28, 56, - 0, 18, 36, 54, 11, 25, 47, 61, 22, 4, 50, 32, 29, 15, 57, 43, - 44, 62, 8, 26, 39, 53, 3, 17, 58, 40, 30, 12, 49, 35, 21, 7, - 27, 9, 63, 45, 16, 2, 52, 38, 13, 31, 41, 59, 6, 20, 34, 48, - 55, 37, 19, 1, 60, 46, 24, 10, 33, 51, 5, 23, 42, 56, 14, 28, - 0, 9, 18, 27, 36, 45, 54, 63, 11, 2, 25, 16, 47, 38, 61, 52, - 22, 31, 4, 13, 50, 59, 32, 41, 29, 20, 15, 6, 57, 48, 43, 34, - 44, 37, 62, 55, 8, 1, 26, 19, 39, 46, 53, 60, 3, 10, 17, 24, - 58, 51, 40, 33, 30, 23, 12, 5, 49, 56, 35, 42, 21, 28, 7, 14, - 0, 37, 9, 44, 18, 55, 27, 62, 36, 1, 45, 8, 54, 19, 63, 26, - 11, 46, 2, 39, 25, 60, 16, 53, 47, 10, 38, 3, 61, 24, 52, 17, - 22, 51, 31, 58, 4, 33, 13, 40, 50, 23, 59, 30, 32, 5, 41, 12, - 29, 56, 20, 49, 15, 42, 6, 35, 57, 28, 48, 21, 43, 14, 34, 7, - 0, 51, 37, 22, 9, 58, 44, 31, 18, 33, 55, 4, 27, 40, 62, 13, - 36, 23, 1, 50, 45, 30, 8, 59, 54, 5, 19, 32, 63, 12, 26, 41, - 11, 56, 46, 29, 2, 49, 39, 20, 25, 42, 60, 15, 16, 35, 53, 6, - 47, 28, 10, 57, 38, 21, 3, 48, 61, 14, 24, 43, 52, 7, 17, 34, - 0, 56, 51, 11, 37, 29, 22, 46, 9, 49, 58, 2, 44, 20, 31, 39, - 18, 42, 33, 25, 55, 15, 4, 60, 27, 35, 40, 16, 62, 6, 13, 53, - 36, 28, 23, 47, 1, 57, 50, 10, 45, 21, 30, 38, 8, 48, 59, 3, - 54, 14, 5, 61, 19, 43, 32, 24, 63, 7, 12, 52, 26, 34, 41, 17, - 0, 28, 56, 36, 51, 47, 11, 23, 37, 57, 29, 1, 22, 10, 46, 50, - 9, 21, 49, 45, 58, 38, 2, 30, 44, 48, 20, 8, 31, 3, 39, 59, - 18, 14, 42, 54, 33, 61, 25, 5, 55, 43, 15, 19, 4, 24, 60, 32, - 27, 7, 35, 63, 40, 52, 16, 12, 62, 34, 6, 26, 13, 17, 53, 41, - 0, 14, 28, 18, 56, 54, 36, 42, 51, 61, 47, 33, 11, 5, 23, 25, - 37, 43, 57, 55, 29, 19, 1, 15, 22, 24, 10, 4, 46, 32, 50, 60, - 9, 7, 21, 27, 49, 63, 45, 35, 58, 52, 38, 40, 2, 12, 30, 16, - 44, 34, 48, 62, 20, 26, 8, 6, 31, 17, 3, 13, 39, 41, 59, 53, - 0, 7, 14, 9, 28, 27, 18, 21, 56, 63, 54, 49, 36, 35, 42, 45, - 51, 52, 61, 58, 47, 40, 33, 38, 11, 12, 5, 2, 23, 16, 25, 30, - 37, 34, 43, 44, 57, 62, 55, 48, 29, 26, 19, 20, 1, 6, 15, 8, - 22, 17, 24, 31, 10, 13, 4, 3, 46, 41, 32, 39, 50, 53, 60, 59, - 0, 34, 7, 37, 14, 44, 9, 43, 28, 62, 27, 57, 18, 48, 21, 55, - 56, 26, 63, 29, 54, 20, 49, 19, 36, 6, 35, 1, 42, 8, 45, 15, - 51, 17, 52, 22, 61, 31, 58, 24, 47, 13, 40, 10, 33, 3, 38, 4, - 11, 41, 12, 46, 5, 39, 2, 32, 23, 53, 16, 50, 25, 59, 30, 60, - 0, 17, 34, 51, 7, 22, 37, 52, 14, 31, 44, 61, 9, 24, 43, 58, - 28, 13, 62, 47, 27, 10, 57, 40, 18, 3, 48, 33, 21, 4, 55, 38, - 56, 41, 26, 11, 63, 46, 29, 12, 54, 39, 20, 5, 49, 32, 19, 2, - 36, 53, 6, 23, 35, 50, 1, 16, 42, 59, 8, 25, 45, 60, 15, 30, - 0, 41, 17, 56, 34, 11, 51, 26, 7, 46, 22, 63, 37, 12, 52, 29, - 14, 39, 31, 54, 44, 5, 61, 20, 9, 32, 24, 49, 43, 2, 58, 19, - 28, 53, 13, 36, 62, 23, 47, 6, 27, 50, 10, 35, 57, 16, 40, 1, - 18, 59, 3, 42, 48, 25, 33, 8, 21, 60, 4, 45, 55, 30, 38, 15, - 0, 53, 41, 28, 17, 36, 56, 13, 34, 23, 11, 62, 51, 6, 26, 47, - 7, 50, 46, 27, 22, 35, 63, 10, 37, 16, 12, 57, 52, 1, 29, 40, - 14, 59, 39, 18, 31, 42, 54, 3, 44, 25, 5, 48, 61, 8, 20, 33, - 9, 60, 32, 21, 24, 45, 49, 4, 43, 30, 2, 55, 58, 15, 19, 38, - 0, 59, 53, 14, 41, 18, 28, 39, 17, 42, 36, 31, 56, 3, 13, 54, - 34, 25, 23, 44, 11, 48, 62, 5, 51, 8, 6, 61, 26, 33, 47, 20, - 7, 60, 50, 9, 46, 21, 27, 32, 22, 45, 35, 24, 63, 4, 10, 49, - 37, 30, 16, 43, 12, 55, 57, 2, 52, 15, 1, 58, 29, 38, 40, 19, - 0, 60, 59, 7, 53, 9, 14, 50, 41, 21, 18, 46, 28, 32, 39, 27, - 17, 45, 42, 22, 36, 24, 31, 35, 56, 4, 3, 63, 13, 49, 54, 10, - 34, 30, 25, 37, 23, 43, 44, 16, 11, 55, 48, 12, 62, 2, 5, 57, - 51, 15, 8, 52, 6, 58, 61, 1, 26, 38, 33, 29, 47, 19, 20, 40, - 0, 30, 60, 34, 59, 37, 7, 25, 53, 43, 9, 23, 14, 16, 50, 44, - 41, 55, 21, 11, 18, 12, 46, 48, 28, 2, 32, 62, 39, 57, 27, 5, - 17, 15, 45, 51, 42, 52, 22, 8, 36, 58, 24, 6, 31, 1, 35, 61, - 56, 38, 4, 26, 3, 29, 63, 33, 13, 19, 49, 47, 54, 40, 10, 20, - 0, 15, 30, 17, 60, 51, 34, 45, 59, 52, 37, 42, 7, 8, 25, 22, - 53, 58, 43, 36, 9, 6, 23, 24, 14, 1, 16, 31, 50, 61, 44, 35, - 41, 38, 55, 56, 21, 26, 11, 4, 18, 29, 12, 3, 46, 33, 48, 63, - 28, 19, 2, 13, 32, 47, 62, 49, 39, 40, 57, 54, 27, 20, 5, 10, - 0, 38, 15, 41, 30, 56, 17, 55, 60, 26, 51, 21, 34, 4, 45, 11, - 59, 29, 52, 18, 37, 3, 42, 12, 7, 33, 8, 46, 25, 63, 22, 48, - 53, 19, 58, 28, 43, 13, 36, 2, 9, 47, 6, 32, 23, 49, 24, 62, - 14, 40, 1, 39, 16, 54, 31, 57, 50, 20, 61, 27, 44, 10, 35, 5, - 0, 19, 38, 53, 15, 28, 41, 58, 30, 13, 56, 43, 17, 2, 55, 36, - 60, 47, 26, 9, 51, 32, 21, 6, 34, 49, 4, 23, 45, 62, 11, 24, - 59, 40, 29, 14, 52, 39, 18, 1, 37, 54, 3, 16, 42, 57, 12, 31, - 7, 20, 33, 50, 8, 27, 46, 61, 25, 10, 63, 44, 22, 5, 48, 35, - 0, 40, 19, 59, 38, 14, 53, 29, 15, 39, 28, 52, 41, 1, 58, 18, - 30, 54, 13, 37, 56, 16, 43, 3, 17, 57, 2, 42, 55, 31, 36, 12, - 60, 20, 47, 7, 26, 50, 9, 33, 51, 27, 32, 8, 21, 61, 6, 46, - 34, 10, 49, 25, 4, 44, 23, 63, 45, 5, 62, 22, 11, 35, 24, 48, - 0, 20, 40, 60, 19, 7, 59, 47, 38, 50, 14, 26, 53, 33, 29, 9, - 15, 27, 39, 51, 28, 8, 52, 32, 41, 61, 1, 21, 58, 46, 18, 6, - 30, 10, 54, 34, 13, 25, 37, 49, 56, 44, 16, 4, 43, 63, 3, 23, - 17, 5, 57, 45, 2, 22, 42, 62, 55, 35, 31, 11, 36, 48, 12, 24, - 0, 10, 20, 30, 40, 34, 60, 54, 19, 25, 7, 13, 59, 49, 47, 37, - 38, 44, 50, 56, 14, 4, 26, 16, 53, 63, 33, 43, 29, 23, 9, 3, - 15, 5, 27, 17, 39, 45, 51, 57, 28, 22, 8, 2, 52, 62, 32, 42, - 41, 35, 61, 55, 1, 11, 21, 31, 58, 48, 46, 36, 18, 24, 6, 12, - 0, 5, 10, 15, 20, 17, 30, 27, 40, 45, 34, 39, 60, 57, 54, 51, - 19, 22, 25, 28, 7, 2, 13, 8, 59, 62, 49, 52, 47, 42, 37, 32, - 38, 35, 44, 41, 50, 55, 56, 61, 14, 11, 4, 1, 26, 31, 16, 21, - 53, 48, 63, 58, 33, 36, 43, 46, 29, 24, 23, 18, 9, 12, 3, 6, - 0, 35, 5, 38, 10, 41, 15, 44, 20, 55, 17, 50, 30, 61, 27, 56, - 40, 11, 45, 14, 34, 1, 39, 4, 60, 31, 57, 26, 54, 21, 51, 16, - 19, 48, 22, 53, 25, 58, 28, 63, 7, 36, 2, 33, 13, 46, 8, 43, - 59, 24, 62, 29, 49, 18, 52, 23, 47, 12, 42, 9, 37, 6, 32, 3, - 0, 48, 35, 19, 5, 53, 38, 22, 10, 58, 41, 25, 15, 63, 44, 28, - 20, 36, 55, 7, 17, 33, 50, 2, 30, 46, 61, 13, 27, 43, 56, 8, - 40, 24, 11, 59, 45, 29, 14, 62, 34, 18, 1, 49, 39, 23, 4, 52, - 60, 12, 31, 47, 57, 9, 26, 42, 54, 6, 21, 37, 51, 3, 16, 32, - 0, 24, 48, 40, 35, 59, 19, 11, 5, 29, 53, 45, 38, 62, 22, 14, - 10, 18, 58, 34, 41, 49, 25, 1, 15, 23, 63, 39, 44, 52, 28, 4, - 20, 12, 36, 60, 55, 47, 7, 31, 17, 9, 33, 57, 50, 42, 2, 26, - 30, 6, 46, 54, 61, 37, 13, 21, 27, 3, 43, 51, 56, 32, 8, 16, - 0, 12, 24, 20, 48, 60, 40, 36, 35, 47, 59, 55, 19, 31, 11, 7, - 5, 9, 29, 17, 53, 57, 45, 33, 38, 42, 62, 50, 22, 26, 14, 2, - 10, 6, 18, 30, 58, 54, 34, 46, 41, 37, 49, 61, 25, 21, 1, 13, - 15, 3, 23, 27, 63, 51, 39, 43, 44, 32, 52, 56, 28, 16, 4, 8, - 0, 6, 12, 10, 24, 30, 20, 18, 48, 54, 60, 58, 40, 46, 36, 34, - 35, 37, 47, 41, 59, 61, 55, 49, 19, 21, 31, 25, 11, 13, 7, 1, - 5, 3, 9, 15, 29, 27, 17, 23, 53, 51, 57, 63, 45, 43, 33, 39, - 38, 32, 42, 44, 62, 56, 50, 52, 22, 16, 26, 28, 14, 8, 2, 4, - 0, 3, 6, 5, 12, 15, 10, 9, 24, 27, 30, 29, 20, 23, 18, 17, - 48, 51, 54, 53, 60, 63, 58, 57, 40, 43, 46, 45, 36, 39, 34, 33, - 35, 32, 37, 38, 47, 44, 41, 42, 59, 56, 61, 62, 55, 52, 49, 50, - 19, 16, 21, 22, 31, 28, 25, 26, 11, 8, 13, 14, 7, 4, 1, 2, - 0, 32, 3, 35, 6, 38, 5, 37, 12, 44, 15, 47, 10, 42, 9, 41, - 24, 56, 27, 59, 30, 62, 29, 61, 20, 52, 23, 55, 18, 50, 17, 49, - 48, 16, 51, 19, 54, 22, 53, 21, 60, 28, 63, 31, 58, 26, 57, 25, - 40, 8, 43, 11, 46, 14, 45, 13, 36, 4, 39, 7, 34, 2, 33, 1, - 0, 16, 32, 48, 3, 19, 35, 51, 6, 22, 38, 54, 5, 21, 37, 53, - 12, 28, 44, 60, 15, 31, 47, 63, 10, 26, 42, 58, 9, 25, 41, 57, - 24, 8, 56, 40, 27, 11, 59, 43, 30, 14, 62, 46, 29, 13, 61, 45, - 20, 4, 52, 36, 23, 7, 55, 39, 18, 2, 50, 34, 17, 1, 49, 33, - 0, 8, 16, 24, 32, 40, 48, 56, 3, 11, 19, 27, 35, 43, 51, 59, - 6, 14, 22, 30, 38, 46, 54, 62, 5, 13, 21, 29, 37, 45, 53, 61, - 12, 4, 28, 20, 44, 36, 60, 52, 15, 7, 31, 23, 47, 39, 63, 55, - 10, 2, 26, 18, 42, 34, 58, 50, 9, 1, 25, 17, 41, 33, 57, 49, - 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, - 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, - 6, 2, 14, 10, 22, 18, 30, 26, 38, 34, 46, 42, 54, 50, 62, 58, - 5, 1, 13, 9, 21, 17, 29, 25, 37, 33, 45, 41, 53, 49, 61, 57, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, - 3, 1, 7, 5, 11, 9, 15, 13, 19, 17, 23, 21, 27, 25, 31, 29, - 35, 33, 39, 37, 43, 41, 47, 45, 51, 49, 55, 53, 59, 57, 63, 61 -}; - -const qracode qra_13_64_64_irr_e = { - qra_K, - qra_N, - qra_m, - qra_M, - qra_a, - qra_NC, - qra_V, - qra_C, - qra_NMSG, - qra_MAXVDEG, - qra_MAXCDEG, - QRATYPE_CRCPUNCTURED, - qra_R, - CODE_NAME, - qra_acc_input_idx, - qra_acc_input_wlog, - qra_log, - qra_exp, - qra_msgw, - qra_vdeg, - qra_cdeg, - qra_v2cmidx, - qra_c2vmidx, - qra_pmat -}; - -#undef qra_K -#undef qra_N -#undef qra_m -#undef qra_M -#undef qra_a -#undef qra_NC -#undef qra_V -#undef qra_C -#undef qra_NMSG -#undef qra_MAXVDEG -#undef qra_MAXCDEG -#undef qra_R -#undef CODE_NAME \ No newline at end of file diff --git a/lib/qra/qracodes/qra13_64_64_irr_e.h b/lib/qra/qracodes/qra13_64_64_irr_e.h deleted file mode 100644 index d24421d..0000000 --- a/lib/qra/qracodes/qra13_64_64_irr_e.h +++ /dev/null @@ -1,39 +0,0 @@ -// qra13_64_64_irr_e.h -// Code tables and defines for Q-ary RA code (13,64) over GF(64) -// Code Name: qra13_64_64_irr_e -// (13,64) RA Code over GF(64) RF=[3x4 4x4 6x1 3x2 5x1 7x1]/18 - -// (c) 2016 - Nico Palermo - IV3NWV - Microtelecom Srl, Italy - -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#ifndef _qra13_64_64_irr_e_h -#define _qra13_64_64_irr_e_h - -#include "qracodes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern const qracode qra_13_64_64_irr_e; - -#ifdef __cplusplus -} -#endif - -#endif // _qra13_64_64_irr_e_h diff --git a/lib/qra/qracodes/qracodes.c b/lib/qra/qracodes/qracodes.c deleted file mode 100644 index 748a9c9..0000000 --- a/lib/qra/qracodes/qracodes.c +++ /dev/null @@ -1,474 +0,0 @@ -// qracodes.c -// Q-ary RA codes encoding/decoding functions -// -// (c) 2016 - Nico Palermo, IV3NWV - Microtelecom Srl, Italy -// ------------------------------------------------------------------------------ -// This file is part of the qracodes project, a Forward Error Control -// encoding/decoding package based on Q-ary RA (Repeat and Accumulate) LDPC codes. -// -// qracodes is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// qracodes is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with qracodes source distribution. -// If not, see . - -#include -#include - -#include "npfwht.h" -#include "pdmath.h" - -#include "qracodes.h" - -int qra_encode(const qracode *pcode, int *y, const int *x) -{ - int k,j,kk,jj; - int t, chk = 0; - - const int K = pcode->K; - const int M = pcode->M; - const int NC= pcode->NC; - const int a = pcode->a; - const int *acc_input_idx = pcode->acc_input_idx; - const int *acc_input_wlog = pcode->acc_input_wlog; - const int *gflog = pcode->gflog; - const int *gfexp = pcode->gfexp; - - // copy the systematic symbols to destination - memcpy(y,x,K*sizeof(int)); - - y = y+K; // point to check symbols - - // compute the code check symbols as a weighted accumulation of a permutated - // sequence of the (repeated) systematic input symbols: - // chk(k+1) = x(idx(k))*alfa^(logw(k)) + chk(k) - // (all operations performed over GF(M)) - - if (a==1) { // grouping factor = 1 - for (k=0;k 1 - for (k=0;k80.f) // avoid floating point exp() overflows - v=80.f; - - src[nitems] = (float)exp(v); - } -} - - -float qra_mfskbesselmetric(float *pix, const float *rsq, const int m, const int N, float EsNoMetric) -{ - // Computes the codeword symbols intrinsic probabilities - // given the square of the received input amplitudes. - - // The input vector rqs must be a linear array of size M*N, where M=2^m, - // containing the squared amplitudes (rp*rp+rq*rq) of the input samples - - // First symbol amplitudes should be stored in the first M positions, - // second symbol amplitudes stored at positions [M ... 2*M-1], and so on. - - // Output vector is the intrinsic symbol metric (the probability distribution) - // assuming that symbols are transmitted using a M-FSK modulation - // and incoherent demodulation. - - // As the input Es/No is generally unknown (as it cannot be exstimated accurately - // when the codeword length is few tens symbols) but an exact metric requires it - // we simply fix it to a predefined EsNoMetric value so that the metric is what - // expected at that specific value. - // The metric computed in this way is optimal only at this predefined Es/No value, - // nevertheless it is usually better than a generic parameter-free metric which - // makes no assumptions on the input Es/No. - - // returns the estimated noise standard deviation - - int k; - float rsum = 0.f; - float sigmaest, cmetric; - - const int M = 1<M; - const int qra_m = pcode->m; - const int qra_V = pcode->V; - const int qra_MAXVDEG = pcode->MAXVDEG; - const int *qra_vdeg = pcode->vdeg; - const int qra_C = pcode->C; - const int qra_MAXCDEG = pcode->MAXCDEG; - const int *qra_cdeg = pcode->cdeg; - const int *qra_v2cmidx = pcode->v2cmidx; - const int *qra_c2vmidx = pcode->c2vmidx; - const int *qra_pmat = pcode->gfpmat; - const int *qra_msgw = pcode->msgw; - -// float msgout[qra_M]; // buffer to store temporary results - float msgout[QRACODE_MAX_M]; // we use a fixed size in order to avoid mallocs - - float totex; // total extrinsic information - int nit; // current iteration - int nv; // current variable - int nc; // current check - int k,kk; // loop indexes - - int ndeg; // current node degree - int msgbase; // current offset in the table of msg indexes - int imsg; // current message index - int wmsg; // current message weight - - int rc = -1; // rc>=0 extrinsic converged to 1 at iteration rc (rc=0..maxiter-1) - // rc=-1 no convergence in the given number of iterations - // rc=-2 error in the code tables (code checks degrees must be >1) - // rc=-3 M is larger than QRACODE_MAX_M - - - - if (qra_M>QRACODE_MAX_M) - return -3; - - // message initialization ------------------------------------------------------- - - // init c->v variable intrinsic msgs - pd_init(C2VMSG(0),pix,qra_M*qra_V); - - // init the v->c messages directed to code factors (k=1..ndeg) with the intrinsic info - for (nv=0;nvc - for (k=1;kv step ----------------------------------------------------- - // Computes messages from code checks to code variables. - // As the first qra_V checks are associated with intrinsic information - // (the code tables have been constructed in this way) - // we need to do this step only for code checks in the range [qra_V..qra_C) - - // The convolutions of probability distributions over the alphabet of a finite field GF(qra_M) - // are performed with a fast convolution algorithm over the given field. - // - // I.e. given the code check x1+x2+x3 = 0 (with x1,x2,x3 in GF(2^m)) - // and given Prob(x2) and Prob(x3), we have that: - // Prob(x1=X1) = Prob((x2+x3)=X1) = sum((Prob(x2=X2)*Prob(x3=(X1+X2))) for all the X2s in the field - // This translates to Prob(x1) = IWHT(WHT(Prob(x2))*WHT(Prob(x3))) - // where WHT and IWHT are the direct and inverse Walsh-Hadamard transforms of the argument. - // Note that the WHT and the IWHF differs only by a multiplicative coefficent and since in this step - // we don't need that the output distribution is normalized we use the relationship - // Prob(x1) =(proportional to) WH(WH(Prob(x2))*WH(Prob(x3))) - - // In general given the check code x1+x2+x3+..+xm = 0 - // the output distribution of a variable given the distributions of the other m-1 variables - // is the inverse WHT of the product of the WHTs of the distribution of the other m-1 variables - // The complexity of this algorithm scales with M*log2(M) instead of the M^2 complexity of - // the brute force approach (M=size of the alphabet) - - for (nc=qra_V;nc1) - return -2; // bad code tables - - msgbase = nc*qra_MAXCDEG; // base to msg index row for the current node - - // transforms inputs in the Walsh-Hadamard "frequency" domain - // v->c -> fwht(v->c) - for (k=0;kv = prod(fwht(v->c)) - // TODO: we assume that checks degrees are not larger than three but - // if they are larger the products can be computed more efficiently - for (kk=0;kkc steps when multipling - // small fp numbers - msgout[0]+=1E-7f; // TODO: define the bias accordingly to the field size - - np_fwht(qra_m,msgout,msgout); - - // inverse weight and output - imsg = qra_c2vmidx[msgbase+k]; // current output msg index - wmsg = qra_msgw[imsg]; // current msg weight - - if (wmsg==0) - pd_init(C2VMSG(imsg),msgout,qra_M); - else - // output p(alfa^(-w)*x) - pd_bwdperm(C2VMSG(imsg),msgout, MSGPERM(wmsg), qra_M); - - } // for (k=0;kc step ----------------------------------------------------- - for (nv=0;nvc msg = prod(c->v) - // TODO: factor factors to reduce the number of computations for high degree nodes - for (kk=0;kkc are null - // normalize output to a probability distribution - if (pd_norm(msgout,qra_m)<=0) { - // dump msgin; - printf("warning: v->c pd with invalid norm. nit=%d nv=%d k=%d\n",nit,nv,k); - for (kk=0;kk(1.*(qra_V)-0.01)) { - // the total maximum extrinsic information of each symbol in the codeword - // is very close to one. This means that we have reached the (1,1) point in the - // code EXIT chart(s) and we have successfully decoded the input. - rc = nit; - break; // remove the break to evaluate the decoder speed performance as a function of the max iterations number) - } - - } // for (nit=0;nitM; - const int qra_m = pcode->m; - const int qra_K = pcode->K; - - int k; - - for (k=0;k. - -#ifndef _qracodes_h_ -#define _qracodes_h_ - -// type of codes -#define QRATYPE_NORMAL 0x00 // normal code -#define QRATYPE_CRC 0x01 // code with crc - last information symbol is a CRC -#define QRATYPE_CRCPUNCTURED 0x02 // the CRC symbol is punctured (not sent along the channel) - - -typedef struct { - // code parameters - const int K; // number of information symbols - const int N; // codeword length in symbols - const int m; // bits/symbol - const int M; // Symbol alphabet cardinality (2^m) - const int a; // code grouping factor - const int NC; // number of check symbols (N-K) - const int V; // number of variables in the code graph (N) - const int C; // number of factors in the code graph (N +(N-K)+1) - const int NMSG; // number of msgs in the code graph - const int MAXVDEG; // maximum variable degree - const int MAXCDEG; // maximum factor degree - const int type; // see QRATYPE_xx defines - const float R; // code rate (K/N) - const char name[64]; // code name - // tables used by the encoder - const int *acc_input_idx; - const int *acc_input_wlog; - const int *gflog; - const int *gfexp; - // tables used by the decoder ------------------------- - const int *msgw; - const int *vdeg; - const int *cdeg; - const int *v2cmidx; - const int *c2vmidx; - const int *gfpmat; -} qracode; -// Uncomment the header file of the code which needs to be tested - -//#include "qra12_63_64_irr_b.h" // irregular code (12,63) over GF(64) -//#include "qra13_64_64_irr_e.h" // irregular code with good performance and best UER protection at AP56 -//#include "qra13_64_64_reg_a.h" // regular code with good UER but perf. inferior to that of code qra12_63_64_irr_b - -#ifdef __cplusplus -extern "C" { -#endif - -int qra_encode(const qracode *pcode, int *y, const int *x); -float qra_mfskbesselmetric(float *pix, const float *rsq, const int m, const int N, float EsNoMetric); -int qra_extrinsic(const qracode *pcode, float *pex, const float *pix, int maxiter,float *qra_v2cmsg,float *qra_c2vmsg); -void qra_mapdecode(const qracode *pcode, int *xdec, float *pex, const float *pix); - -#ifdef __cplusplus -} -#endif - -#endif // _qracodes_h_ diff --git a/lib/qso50/g0 b/lib/qso50/g0 deleted file mode 100644 index 02e2aeb..0000000 --- a/lib/qso50/g0 +++ /dev/null @@ -1,8 +0,0 @@ -gfortran -o twq -Wall -Wno-conversion -fbounds-check twq.f90 \ - ../packjt.f90 wqenc.f90 wqdec.f90 packprop.f90 \ - packname.f90 packtext2.f90 unpackprop.f90 unpackname.f90 \ - unpacktext2.f90 unpackpfx.f90 pack50.f90 unpack50.f90 \ - ../hash.f90 ../deg2grid.f90 ../grid2deg.f90 \ - ../fix_contest_msg.f90 ../to_contest_msg.f90 \ - ../fmtmsg.f90 ../azdist.f90 ../geodist.f90 ../wsprd/nhash.c - \ No newline at end of file diff --git a/lib/qso50/pack50.f90 b/lib/qso50/pack50.f90 deleted file mode 100644 index 12c230c..0000000 --- a/lib/qso50/pack50.f90 +++ /dev/null @@ -1,26 +0,0 @@ -subroutine pack50(n1,n2,dat) - - integer*1 dat(11),i1 - - i1=iand(ishft(n1,-20),255) !8 bits - dat(1)=i1 - i1=iand(ishft(n1,-12),255) !8 bits - dat(2)=i1 - i1=iand(ishft(n1, -4),255) !8 bits - dat(3)=i1 - i1=16*iand(n1,15)+iand(ishft(n2,-18),15) !4+4 bits - dat(4)=i1 - i1=iand(ishft(n2,-10),255) !8 bits - dat(5)=i1 - i1=iand(ishft(n2, -2),255) !8 bits - dat(6)=i1 - i1=64*iand(n2,3) !2 bits - dat(7)=i1 - dat(8)=0 - dat(9)=0 - dat(10)=0 - dat(11)=0 - - return -end subroutine pack50 - diff --git a/lib/qso50/packname.f90 b/lib/qso50/packname.f90 deleted file mode 100644 index 5b3936e..0000000 --- a/lib/qso50/packname.f90 +++ /dev/null @@ -1,23 +0,0 @@ -subroutine packname(name,len,n1,n2) - - character*9 name - real*8 dn - - dn=0 - do i=1,len - n=ichar(name(i:i)) - if(n.ge.97 .and. n.le.122) n=n-32 - dn=27*dn + n-64 - enddo - if(len.lt.9) then - do i=len+1,9 - dn=27*dn - enddo - endif - - n2=mod(dn,32768.d0) - dn=dn/32768.d0 - n1=dn - - return -end subroutine packname diff --git a/lib/qso50/packprop.f90 b/lib/qso50/packprop.f90 deleted file mode 100644 index 5d22a37..0000000 --- a/lib/qso50/packprop.f90 +++ /dev/null @@ -1,36 +0,0 @@ -subroutine packprop(k,muf,ccur,cxp,n1) - -! Pack propagation indicators into a 21-bit number. - -! k k-index, 0-9; 10="N/A" -! muf muf, 2-60 MHz; 0=N/A, 1="none", 61=">60 MHz" -! ccur up to two current events, each indicated by single -! or double letter. -! cxp zero or one expected event, indicated by single or -! double letter - - character ccur*4,cxp*2 - - j=ichar(ccur(1:1))-64 - if(j.lt.0) j=0 - n1=j - do i=2,4 - if(ccur(i:i).eq.' ') go to 10 - if(ccur(i:i).eq.ccur(i-1:i-1)) then - n1=n1+26 - else - j=ichar(ccur(i:i))-64 - if(j.lt.0) j=0 - n1=53*n1 + j - endif - enddo - -10 j=ichar(cxp(1:1))-64 - if(j.lt.0) j=0 - if(cxp(2:2).eq.cxp(1:1)) j=j+26 - n1=53*n1 + j - n1=11*n1 + k - n1=62*n1 + muf - - return -end subroutine packprop diff --git a/lib/qso50/packtext2.f90 b/lib/qso50/packtext2.f90 deleted file mode 100644 index d54b52f..0000000 --- a/lib/qso50/packtext2.f90 +++ /dev/null @@ -1,22 +0,0 @@ -subroutine packtext2(msg,n1,ng) - - character*8 msg - real*8 dn - character*41 c - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +./?'/ - - dn=0. - do i=1,8 - do j=1,41 - if(msg(i:i).eq.c(j:j)) go to 10 - enddo - j=37 -10 j=j-1 !Codes should start at zero - dn=41.d0*dn + j - enddo - - ng=mod(dn,32768.d0) - n1=(dn-ng)/32768.d0 - - return -end subroutine packtext2 diff --git a/lib/qso50/twq.f90 b/lib/qso50/twq.f90 deleted file mode 100644 index 9fdb263..0000000 --- a/lib/qso50/twq.f90 +++ /dev/null @@ -1,18 +0,0 @@ -program twq - - character*22 msg0,msg - integer*1 data0(11) - - open(10,file='wqmsg.txt',status='old') - write(*,1000) -1000 format(4x,'Encoded message',9x,'Decoded as',12x,'itype'/55('-')) - - do line=1,9999 - read(10,*,end=999) msg0 - call wqenc(msg0,itype,data0) - call wqdec(data0,msg,ntype) - write(*,1100) line,msg0,msg,ntype -1100 format(i2,'.',1x,a22,2x,a22,i3) - enddo - -999 end program twq diff --git a/lib/qso50/unpack50.f90 b/lib/qso50/unpack50.f90 deleted file mode 100644 index 101f1ab..0000000 --- a/lib/qso50/unpack50.f90 +++ /dev/null @@ -1,30 +0,0 @@ -subroutine unpack50(dat,n1,n2) - - integer*1 dat(11) - - i=dat(1) - i4=iand(i,255) - n1=ishft(i4,20) - i=dat(2) - i4=iand(i,255) - n1=n1 + ishft(i4,12) - i=dat(3) - i4=iand(i,255) - n1=n1 + ishft(i4,4) - i=dat(4) - i4=iand(i,255) - n1=n1 + iand(ishft(i4,-4),15) - n2=ishft(iand(i4,15),18) - i=dat(5) - i4=iand(i,255) - n2=n2 + ishft(i4,10) - i=dat(6) - i4=iand(i,255) - n2=n2 + ishft(i4,2) - i=dat(7) - i4=iand(i,255) - n2=n2 + iand(ishft(i4,-6),3) - - return -end subroutine unpack50 - diff --git a/lib/qso50/unpackname.f90 b/lib/qso50/unpackname.f90 deleted file mode 100644 index 3ae7c5c..0000000 --- a/lib/qso50/unpackname.f90 +++ /dev/null @@ -1,20 +0,0 @@ -subroutine unpackname(n1,n2,name,len) - - character*9 name - real*8 dn - - dn=32768.d0*n1 + n2 - len=0 - do i=9,1,-1 - j=mod(dn,27.d0) - if(j.ge.1) then - name(i:i)=char(64+j) - len=len+1 - else - name(i:i)=' ' - endif - dn=dn/27.d0 - enddo - - return -end subroutine unpackname diff --git a/lib/qso50/unpackpfx.f90 b/lib/qso50/unpackpfx.f90 deleted file mode 100644 index 4234e9e..0000000 --- a/lib/qso50/unpackpfx.f90 +++ /dev/null @@ -1,35 +0,0 @@ -subroutine unpackpfx(ng,call1) - - character*12 call1 - character*3 pfx - - if(ng.lt.60000) then -! Add-on prefix of 1 to 3 characters - n=ng - do i=3,1,-1 - nc=mod(n,37) - if(nc.ge.0 .and. nc.le.9) then - pfx(i:i)=char(nc+48) - else if(nc.ge.10 .and. nc.le.35) then - pfx(i:i)=char(nc+55) - else - pfx(i:i)=' ' - endif - n=n/37 - enddo - call1=pfx//'/'//call1 - if(call1(1:1).eq.' ') call1=call1(2:) - if(call1(1:1).eq.' ') call1=call1(2:) - else -! Add-on suffix, one character - i1=index(call1,' ') - nc=ng-60000 - if(nc.ge.0 .and. nc.le.9) then - call1=call1(:i1-1)//'/'//char(nc+48) - else if(nc.ge.10 .and. nc.le.35) then - call1=call1(:i1-1)//'/'//char(nc+55) - endif - endif - - return -end subroutine unpackpfx diff --git a/lib/qso50/unpackprop.f90 b/lib/qso50/unpackprop.f90 deleted file mode 100644 index 18cc1f5..0000000 --- a/lib/qso50/unpackprop.f90 +++ /dev/null @@ -1,28 +0,0 @@ -subroutine unpackprop(n1,k,muf,ccur,cxp) - - character ccur*4,cxp*2 - - muf=mod(n1,62) - n1=n1/62 - - k=mod(n1,11) - n1=n1/11 - - j=mod(n1,53) - n1=n1/53 - if(j.eq.0) cxp='*' - if(j.ge.1 .and. j.le.26) cxp=char(64+j) - if(j.gt.26) cxp=char(64+j-26)//char(64+j-26) - - j=mod(n1,53) - n1=n1/53 - if(j.eq.0) ccur(2:2)='*' - if(j.ge.1 .and. j.le.26) ccur(2:2)=char(64+j) - if(j.gt.26) ccur(2:3)=char(64+j-26)//char(64+j-26) - j=n1 - if(j.eq.0) ccur(1:1)='*' - if(j.ge.1 .and. j.le.26) ccur(1:1)=char(64+j) - if(j.gt.26) ccur=char(64+j-26)//char(64+j-26)//ccur(2:3) - - return -end subroutine unpackprop diff --git a/lib/qso50/unpacktext2.f90 b/lib/qso50/unpacktext2.f90 deleted file mode 100644 index 92dccce..0000000 --- a/lib/qso50/unpacktext2.f90 +++ /dev/null @@ -1,17 +0,0 @@ -subroutine unpacktext2(n1,ng,msg) - - character*22 msg - real*8 dn - character*41 c - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +./?'/ - - msg=' ' - dn=32768.d0*n1 + ng - do i=8,1,-1 - j=mod(dn,41.d0) - msg(i:i)=c(j+1:j+1) - dn=dn/41.d0 - enddo - - return -end subroutine unpacktext2 diff --git a/lib/qso50/wqdec.f90 b/lib/qso50/wqdec.f90 deleted file mode 100644 index 791c78c..0000000 --- a/lib/qso50/wqdec.f90 +++ /dev/null @@ -1,316 +0,0 @@ -subroutine wqdec(data0,message,ntype) - - use packjt - parameter (N15=32758) - integer*1 data0(11) - character*22 message - character*12 callsign - character*3 cdbm,cf - character*2 crpt - character*4 grid,psfx - character*9 name - character*36 fmt - character*6 cwx(4) - character*7 cwind(5) - character ccur*4,cxp*2 - logical first - character*12 dcall(0:N15-1) - data first/.true./ - data cwx/'CLEAR','CLOUDY','RAIN','SNOW'/ - data cwind/'CALM','BREEZES','WINDY','DRY','HUMID'/ - save first,dcall - - if(first) then - dcall=' ' - first=.false. - endif - - message=' ' - call unpack50(data0,n1,n2) - call unpackcall(n1,callsign,iv2,psfx) - i1=index(callsign,' ') - call unpackgrid(n2/128,grid) - ntype=iand(n2,127) -64 - -! Standard WSPR message (types 0 3 7 10 13 17 ... 60) - nu=mod(ntype,10) - if(ntype.ge.0 .and. ntype.le.60 .and. (nu.eq.0 .or. nu.eq.3 .or. & - nu.eq.7)) then - write(cdbm,'(i3)'),ntype - if(cdbm(1:1).eq.' ') cdbm=cdbm(2:) - if(cdbm(1:1).eq.' ') cdbm=cdbm(2:) - message=callsign(1:i1)//grid//' '//cdbm - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1) - -! "Best DX" WSPR response (type 1) - else if(ntype.eq.1) then - message=grid//' DE '//callsign - -! CQ (msg 3; types 2,4,5) - else if(ntype.eq.2) then - message='CQ '//callsign(:i1)//grid - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1) - else if(ntype.eq.4 .or. ntype.eq.5) then - ng=n2/128 + 32768*(ntype-4) - call unpackpfx(ng,callsign) - message='CQ '//callsign - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1) - -! Reply to CQ (msg #2; type 6) - else if(ntype.eq.6) then - ih=(n2-64-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message='<'//dcall(ih)(:i2-1)//'> '//callsign(:i1-1) - else - message='<...> '//callsign - endif - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Reply to CQ (msg #2; type 8) - else if(ntype.eq.8) then - message='DE '//callsign(:i1)//grid - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Reply to CQ, DE pfx/call (msg #2; types 9, 11) - else if(ntype.eq.9 .or. ntype.eq.11) then - ng=n2/128 + 32768*(ntype-9)/2 - call unpackpfx(ng,callsign) - message='DE '//callsign - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Calls and report (msg #3; types -1 to -9) - else if(ntype.le.-1 .and. ntype.ge.-9) then - write(crpt,1010) -ntype -1010 format('S',i1) - ih=(n2-62-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message=callsign(:i1)//'<'//dcall(ih)(:i2-1)//'> '//crpt - else - message=callsign(:i1)//'<...> '//crpt - endif - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! pfx/call and report (msg #3; types -10 to -27) - else if(ntype.le.-10 .and. ntype.ge.-27) then - ng=n2/128 - nrpt=-ntype-9 - if(ntype.le.-19) then - ng=ng + 32768 - nrpt=-ntype-18 - endif - write(crpt,1010) nrpt - call unpackpfx(ng,callsign) - message=callsign//' '//crpt - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Calls and R and report (msg #4; types -28 to -36) - else if(ntype.le.-28 .and. ntype.ge.-36) then - write(crpt,1010) -(ntype+27) - ih=(n2-64+28-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message=callsign(:i1)//'<'//dcall(ih)(:i2-1)//'> '//'R '//crpt - else - message=callsign(:i1)//'<...> '//'R '//crpt - endif - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! pfx/call R and report (msg #4; types -37 to -54) - else if(ntype.le.-37 .and. ntype.ge.-54) then - ng=n2/128 - nrpt=-ntype-36 - if(ntype.le.-46) then - ng=ng + 32768 - nrpt=-ntype-45 - endif - write(crpt,1010) nrpt - call unpackpfx(ng,callsign) - message=callsign//' R '//crpt - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Calls and RRR (msg#5; type 12) - else if(ntype.eq.12) then - ih=(n2-64+28-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message=callsign(:i1)//'<'//dcall(ih)(:i2-1)//'> RRR' - else - message=callsign(:i1)//'<...> RRR' - endif - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! Calls and RRR (msg#5; type 14) - else if(ntype.eq.14) then - ih=(n2-64+28-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message='<'//dcall(ih)(:i2-1)//'> '//callsign(:i1)//'RRR' - else - message='<...> '//callsign(:i1)//' RRR' - endif - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! DE pfx/call and RRR (msg#5; types 15, 16) - else if(ntype.eq.15 .or. ntype.eq.16) then - ng=n2/128 + 32768*(ntype-15) - call unpackpfx(ng,callsign) - message='DE '//callsign//' RRR' - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! TNX [name] 73 GL (msg #6; type 18) - else if(ntype.eq.18) then - ng=(n2-18-64)/128 - call unpackname(n1,ng,name,len) - message='TNX '//name(:len)//' 73 GL' - -! OP [name] 73 GL (msg #6; type 18) - else if(ntype.eq.-56) then - ng=(n2+56-64)/128 - call unpackname(n1,ng,name,len) - message='OP '//name(:len)//' 73 GL' - -! 73 DE [call] [grid] (msg #6; type 19) - else if(ntype.eq.19) then - ng=(n2-19-64)/128 - message='73 DE '//callsign(:i1)//grid - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! 73 DE pfx/call (msg #6; type 21, 22) - else if(ntype.eq.21 .or. ntype.eq.22) then - ng=n2/128 + (ntype-21)*32768 - call unpackpfx(ng,callsign) - i1=index(callsign,' ') - message='73 DE '//callsign - call hash(callsign,i1-1,ih) - dcall(ih)=callsign(:i1-1) - -! [power] W [gain] DBD 73 GL (msg#6; type 24, 25) - else if(ntype.eq.24 .or. ntype.eq.25) then - ng=(n2-24-64)/128 - 32 - i1=1 - if(n1.gt.0) i1=log10(float(n1)) + 1 - i2=1 - if(ng.ge.10) i2=2 - if(ng.lt.0) i2=i2+1 - if(n1.le.3000) then - if(ntype.eq.24) fmt="(i4,' W ',i2,' DBD 73 GL')" - if(ntype.eq.25) fmt="(i4,' W ',i2,' DBD ')" - fmt(3:3)=char(48+i1) - fmt(12:12)=char(48+i2) - if(ng.le.100) then - write(message,fmt) n1,ng - else - if(ng.eq.30000) fmt=fmt(1:8)//"DIPOLE')" - if(ng.eq.30001) fmt=fmt(1:8)//"VERTICAL')" - write(message,fmt) n1 - endif - else - mw=n1-3000 - if(ntype.eq.24) fmt="('0.',i3.3,' W ',i2,' DBD 73 GL')" - if(ntype.eq.25) fmt="('0.',i3.3,' W ',i2,' DBD ')" - fmt(19:19)=char(48+i2) - if(ng.le.100) then - write(message,fmt) mw,ng - else - if(ng.eq.30000) fmt=fmt(1:15)//"DIPOLE')" - if(ng.eq.30001) fmt=fmt(1:15)//"VERTICAL')" - write(message,fmt) n1 - endif - if(index(message,'***').gt.0) go to 700 - endif - -! QRZ call (msg #3; type 26) - else if(ntype.eq.26) then - ng=(n2-24-64)/128 - 32 - message='QRZ '//callsign - -! PSE QSY [nnn] KHZ (msg #6; type 28) - else if(ntype.eq.28) then - if(n1.gt.0) i1=log10(float(n1)) + 1 - fmt="('PSE QSY ',i2,' KHZ')" - fmt(14:14)=char(48+i1) - write(message,fmt) n1 - -! WX wx temp C/F wind (msg #6; type 29) - else if(ntype.eq.29) then - nwx=n1/10000 - ntemp=mod(n1,10000) - 100 - cf=' F ' - if(ntemp.gt.800) then - ntemp=ntemp-1000 - cf=' C ' - endif - n2a=n2/128 - if(nwx.ge.1 .and. nwx.le.4 .and. n2a.ge.1 .and. n2a.le.5) then - write(message,1020) cwx(nwx),ntemp,cf,cwind(n2/128) -1020 format('WX ',a6,i3,a3,a7) - else - message='WX'//' (BadMsg)' - endif - -! Hexadecimal data (type 62) - else if(ntype.eq.62) then - ng=n2/128 - write(message,'(z4.4,z7.7)') ng,n1 - -! Solar/geomagnetic/ionospheric data (type 63) - else if(ntype.eq.63) then - ih=(n2-64-ntype)/128 - if(dcall(ih)(1:1).ne.' ') then - i2=index(dcall(ih),' ') - message='<'//dcall(ih)(:i2-1)//'> ' - else - message='<...> ' - endif - call unpackprop(n1,k,muf,ccur,cxp) - i2=index(message,'>') - write(message(i2+1:),'(i3,i3)') k,muf - message=message(:i2+7)//ccur//' '//cxp - -! [plain text] (msg #6; type -57) - else if(ntype.eq.-57) then - ng=n2/128 - call unpacktext2(n1,ng,message) - else - go to 700 - endif - go to 750 - -! message='' -700 i1=index(callsign,' ') - if(i1.lt.1) i1=12 - message=callsign(:i1)//' (BadMsg)' - -750 do i=1,22 - if(ichar(message(i:i)).eq.0) message(i:i)=' ' - enddo - - do i=22,1,-1 - if(message(i:i).ne.' ') go to 800 - enddo -800 i2=i - do n=1,20 - i1=index(message(:i2),' ') - if(i1.le.0) go to 900 - message=message(1:i1)//message(i1+2:) - i2=i2-1 - enddo - -900 return -end subroutine wqdec diff --git a/lib/qso50/wqenc.f90 b/lib/qso50/wqenc.f90 deleted file mode 100644 index 0f61292..0000000 --- a/lib/qso50/wqenc.f90 +++ /dev/null @@ -1,346 +0,0 @@ -subroutine wqenc(msg,ntype,data0) - -! Parse and encode a WSPR message. - - use packjt - parameter (MASK15=32767) - character*22 msg - character*12 call1,call2 - character*4 grid - character*9 name - character ccur*4,cxp*2 - logical lbad1,lbad2 - integer*1 data0(11) - integer nu(0:9) - data nu/0,-1,1,0,-1,2,1,0,-1,1/ - - read(msg,1001,end=1,err=1) ng,n1 -1001 format(z4,z7) - ntype=62 - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) !Pack 8 bits per byte, add tail - go to 900 - -1 if(msg(1:6).eq.'73 DE ') go to 80 - if(index(msg,' W ').gt.0 .and. index(msg,' DBD ').gt.0) go to 90 - if(msg(1:4).eq.'QRZ ') go to 100 - if(msg(1:8).eq.'PSE QSY ') go to 110 - if(msg(1:3).eq.'WX ') go to 120 - -! Standard WSPR message (types 0 3 7 10 13 17 ... 60) - i1=index(msg,' ') - if(i1.lt.4 .or. i1.gt.7) go to 10 - call1=msg(:i1-1) - grid=msg(i1+1:i1+4) - call packcall(call1,n1,lbad1) - call packgrid(grid,ng,lbad2) - if(lbad1 .or. lbad2) go to 10 - ndbm=0 - read(msg(i1+5:),*,err=10,end=800) ndbm - if(ndbm.lt.0 .or. ndbm.gt.60) go to 800 - ndbm=ndbm+nu(mod(ndbm,10)) - n2=128*ng + (ndbm+64) - call pack50(n1,n2,data0) - ntype=ndbm - go to 900 - -! "BestDX" automated WSPR reply (type 1) -10 if(i1.ne.5 .or. msg(5:8).ne.' DE ') go to 20 - grid=msg(1:4) - call packgrid(grid,ng,lbad2) - if(lbad2) go to 800 - call1=msg(9:) - call packcall(call1,n1,lbad1) - if(lbad1) go to 800 - ntype=1 - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) !Pack 8 bits per byte, add tail - go to 900 - -! CQ (msg #1; types 2, 4, 5) -20 if(msg(1:3).ne.'CQ ') go to 30 - if(index(msg,'/').le.0) then - i2=index(msg(4:),' ') - call1=msg(4:i2+3) - grid=msg(i2+4:) - call packcall(call1,n1,lbad1) - if(lbad1) go to 30 - call packgrid(grid,ng,lbad2) - if(lbad2) go to 30 - ntype=2 - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - else - ntype=4 ! or 5 - call1=msg(4:) - call packpfx(call1,n1,ng,nadd) - ntype=ntype+nadd - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - endif - go to 900 - -! Reply to CQ (msg #2; types 6,8,9,11) -30 if(msg(1:1).ne.'<' .and. msg(1:3).ne.'DE ') go to 40 - if(index(msg,' RRR ').gt.0) go to 50 - if(msg(1:1).eq.'<') then - ntype=6 - i1=index(msg,'>') - call1=msg(2:i1-1) - read(msg(i1+1:),*,err=31,end=31) k,muf,ccur,cxp - go to 130 -31 call2=msg(i1+2:) - call hash(call1,i1-2,ih) - call packcall(call2,n1,lbad1) - n2=128*ih + (ntype+64) - call pack50(n1,n2,data0) - else - i1=index(msg(4:),' ') - call1=msg(4:i1+2) - if(index(msg,'/').le.0) then - ntype=8 - ih=0 - call packcall(call1,n1,lbad1) - grid=msg(i1+4:i1+7) - call packgrid(grid,ng,lbad2) - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - else - ntype=9 ! or 11 - call1=msg(4:) - call packpfx(call1,n1,ng,nadd) - ntype=ntype + 2*nadd - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - endif - endif - go to 900 - -! Call(s) + report (msg #3; types -1 to -27) -! Call(s) + R + report (msg #4; types -28 to -54) -40 if(index(msg,' RRR').gt.0) go to 50 - i1=index(msg,'<') - if(i1.gt.0 .and. (i1.lt.5 .or. i1.gt.8)) go to 50 - i2=index(msg,'/') - if(i2.gt.0 .and.i2.le.4) then - ntype=-10 ! -10 to -27 - i0=index(msg,' ') - call1=msg(:i0-1) - call packpfx(call1,n1,ng,nadd) - ntype=ntype - 9*nadd - i2=index(msg,' ') - i3=index(msg,' R ') - if(i3.gt.0) i2=i2+2 !-28 to -36 - read(msg(i2+2:i2+2),*,end=800,err=800) nrpt - ntype=ntype - (nrpt-1) - if(i3.gt.0) ntype=ntype-27 - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - go to 900 - else if(i1.eq.0) then - go to 50 - endif - call1=msg(:i1-2) !-1 to -9 - i2=index(msg,'>') - call2=msg(i1+1:i2-1) - call hash(call2,i2-i1-1,ih) - i3=index(msg,' R ') - if(i3.gt.0) i2=i2+2 !-28 to -36 - read(msg(i2+3:i2+3),*,end=42,err=42) nrpt - go to 43 -42 nrpt=1 -43 ntype=-nrpt - if(i3.gt.0) ntype=-(nrpt+27) - call packcall(call1,n1,lbad1) - n2=128*ih + (ntype+64) - call pack50(n1,n2,data0) - go to 900 - -50 i0=index(msg,'<') - if(i0.le.0 .and. msg(1:3).ne.'DE ') go to 60 - i3=index(msg,' RRR') - if(i3.le.0) go to 60 -! Call or calls and RRR (msg#5; type2 12,14,15,16) - i0=index(msg,'<') - if(i0.eq.1) then - if(index(msg,'/').le.0) then - ntype=14 - i1=index(msg,'>') - call1=msg(2:i1-1) - call2=msg(i1+2:) - i2=index(call2,' ') - call2=call2(:i2-1) - call packcall(call2,n1,lbad1) - call hash(call1,i1-2,ih) - n2=128*ih + (ntype+64) - call pack50(n1,n2,data0) - else - stop '0002' - endif - else if(i0.ge.5 .and. i0.le.8) then - if(index(msg,'/').le.0) then - ntype=12 - i1=index(msg,'>') - call1=msg(:i0-2) - call2=msg(i0+1:i1-1) - call packcall(call1,n1,lbad1) - call hash(call2,i1-i0-1,ih) - n2=128*ih + (ntype+64) - call pack50(n1,n2,data0) - else - stop '0002' - endif - else - i1=index(msg(4:),' ') - call1=msg(4:i1+2) - if(index(msg,'/').le.0) then - ntype=9 - grid=msg(i1+4:i1+7) - else - ntype=15 ! or 16 - call1=msg(4:) - i0=index(call1,' ') - call1=call1(:i0-1) - call packpfx(call1,n1,ng,nadd) - ntype=ntype+nadd - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - endif - endif - go to 900 - -! TNX 73 GL (msg #6; type 18 ...) -60 if(msg(1:4).ne.'TNX ') go to 70 - ntype=18 - n1=0 - i2=index(msg(5:),' ') - name=msg(5:i2+4) - call packname(name,i2-1,n1,ng) - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - go to 900 - -! TNX name 73 GL (msg #6; type -56 ...) -70 if(msg(1:3).ne.'OP ') go to 80 - ntype=-56 - n1=0 - i2=index(msg(4:),' ') - name=msg(4:i2+3) - call packname(name,i2-1,n1,ng) - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - go to 900 - -! 73 DE call grid (msg #6; type 19) -80 if(msg(1:6).ne.'73 DE ') go to 90 - ntype=19 - i1=index(msg(7:),' ') - call1=msg(7:) - if(index(call1,'/').le.0) then - i1=index(call1,' ') - grid=call1(i1+1:) - call1=call1(:i1-1) - call packcall(call1,n1,lbad1) - call packgrid(grid,ng,lbad2) - if(lbad1 .or. lbad2) go to 800 - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - go to 900 - else - ntype=21 ! or 22 - call packpfx(call1,n1,ng,nadd) - ntype=ntype + nadd - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - go to 900 - endif - -! [pwr] W [gain] DBD [73 GL] (msg #6; types 24, 25) -90 if(index(msg,' W ').le.0) go to 140 - ntype=25 - if(index(msg,' DBD 73 GL').gt.0) ntype=24 - i1=index(msg,' ') - read(msg(:i1-1),*,end=800,err=800) watts - if(watts.ge.1.0) nwatts=watts - if(watts.lt.1.0) nwatts=3000 + nint(1000.*watts) - if(index(msg,'DIPOLE').gt.0) then - ndbd=30000 - else if(index(msg,'VERTICAL').gt.0) then - ndbd=30001 - else - i2=index(msg(i1+3:),' ') - read(msg(i1+3:i1+i2+1),*,end=800,err=800) ndbd - endif - n1=nwatts - ng=ndbd + 32 - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - go to 900 - -! QRZ call (msg #3; type 26) -100 call1=msg(5:) - call packcall(call1,n1,lbad1) - if(lbad1) go to 800 - ntype=26 - n2=ntype+64 - call pack50(n1,n2,data0) - go to 900 - -! PSE QSY [nnn] KHZ (msg #6; type 28) -110 ntype=28 - read(msg(9:),*,end=800,err=800) n1 - n2=ntype+64 - call pack50(n1,n2,data0) - go to 900 - -! WX wx temp C|F wind (msg #6; type 29) -120 ntype=29 - if(index(msg,' CLEAR ').gt.0) then - i1=10 - n1=10000 - else if(index(msg,' CLOUDY ').gt.0) then - i1=11 - n1=20000 - else if(index(msg,' RAIN ').gt.0) then - i1=9 - n1=30000 - else if(index(msg,' SNOW ').gt.0) then - i1=9 - n1=40000 - endif - read(msg(i1:),*,err=800,end=800) ntemp - ntemp=ntemp+100 - i1=index(msg,' C ') - if(i1.gt.0) ntemp=ntemp+1000 - n1=n1+ntemp - if(index(msg,' CALM').gt.0) ng=1 - if(index(msg,' BREEZES').gt.0) ng=2 - if(index(msg,' WINDY').gt.0) ng=3 - if(index(msg,' DRY').gt.0) ng=4 - if(index(msg,' HUMID').gt.0) ng=5 - - n2=128*ng + (ntype+64) - call pack50(n1,n2,data0) - - go to 900 - -! Solar/geomagnetic/ionospheric data -130 ntype=63 - call packprop(k,muf,ccur,cxp,n1) - call hash(call1,i1-2,ih) - n2=128*ih + ntype + 64 - call pack50(n1,n2,data0) - go to 900 - -140 continue - -! Plain text -800 ntype=-57 - call packtext2(msg(:8),n1,ng) - n2=128*ng + ntype + 64 - call pack50(n1,n2,data0) - go to 900 - -900 continue - return -end subroutine wqenc diff --git a/lib/qso50/wqmsg.txt b/lib/qso50/wqmsg.txt deleted file mode 100644 index 9f509b3..0000000 --- a/lib/qso50/wqmsg.txt +++ /dev/null @@ -1,31 +0,0 @@ -"CQ K1JT FN20" -"CQ PJ4/K1JT" -" W6CQZ" -"DE W6CQZ CM87" -"DE PJ4/K1JT" -"W6CQZ S4" -"QRZ K1JT" -"PJ4/W6CQZ S4" -"K1JT R S3" -"PJ4/K1JT R S3" -" K1JT RRR" -"W6CQZ RRR" -"DE PJ4/K1JT RRR" -"73 DE W6CQZ CM87" -"73 DE PJ4/K1JT" -"TNX VICTORIA 73 GL" -"OP HARRY 73 GL" -"5 W DIPOLE" -"10 W VERTICAL" -"1 W 0 DBD" -"1500 W 21 DBD 73 GL" -"PSE QSY 1811 KHZ" -"WX SNOW -5 C CALM" -"CUL JACK" -"." -"CQ K1JT FN20" -" W6CQZ" -"W6CQZ S4" -"K1JT R S3" -" K1JT RRR" -"TNX JOE 73 GL" diff --git a/lib/wrapkarn.c b/lib/wrapkarn.c deleted file mode 100644 index 9e0a51c..0000000 --- a/lib/wrapkarn.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include -#include -#include -#include "rs.h" - -static void *rs; -static int first=1; - -void rs_encode_(int *dgen, int *sent) -// Encode JT65 data dgen[12], producing sent[63]. -{ - int dat1[12]; - int b[51]; - int i; - - if(first) { - // Initialize the JT65 codec - rs=init_rs_int(6,0x43,3,1,51,0); - first=0; - } - - // Reverse data order for the Karn codec. - for(i=0; i<12; i++) { - dat1[i]=dgen[11-i]; - } - // Compute the parity symbols - encode_rs_int(rs,dat1,b); - - // Move parity symbols and data into sent[] array, in reverse order. - for (i = 0; i < 51; i++) sent[50-i] = b[i]; - for (i = 0; i < 12; i++) sent[i+51] = dat1[11-i]; -} - -void rs_decode_(int *recd0, int *era0, int *numera0, int *decoded, int *nerr) -// Decode JT65 received data recd0[63], producing decoded[12]. -// Erasures are indicated in era0[numera]. The number of corrected -// errors is *nerr. If the data are uncorrectable, *nerr=-1 is returned. -{ - int numera; - int i; - int era_pos[50]; - int recd[63]; - - if(first) { - rs=init_rs_int(6,0x43,3,1,51,0); - first=0; - } - - numera=*numera0; - for(i=0; i<12; i++) recd[i]=recd0[62-i]; - for(i=0; i<51; i++) recd[12+i]=recd0[50-i]; - if(numera) - for(i=0; i::finished, this, &MainWindow::diskDat); - connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done())); // Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ()); Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered); @@ -1065,9 +1033,11 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, if(m_bFast9) m_bFastMode=true; ui->cbFast9->setChecked(m_bFast9 or m_bFastMode); - if(true || m_mode=="FT8") on_actionFT8_triggered(); + if(true || m_mode=="FT8") on_actionJS8_triggered(); + + // TODO: jsherer - is this needed? + //ui->sbSubmode->setValue (vhf ? m_nSubMode : 0); - ui->sbSubmode->setValue (vhf ? m_nSubMode : 0); if(m_mode=="MSK144") { Q_EMIT transmitFrequency (1000.0); } else { @@ -1133,7 +1103,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->cbMenus->setChecked(false); } - //UI Customizations + //UI Customizations & Tweaks m_wideGraph.data()->installEventFilter(new EscapeKeyPressEater()); ui->mdiArea->addSubWindow(m_wideGraph.data(), Qt::Dialog | Qt::FramelessWindowHint | Qt::CustomizeWindowHint | Qt::Tool)->showMaximized(); //ui->menuDecode->setEnabled(true); @@ -1148,15 +1118,39 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, } ui->dxCallEntry->clear(); ui->dxGridEntry->clear(); - auto f = findFreeFreqOffset(1000, 2000, 50); - setFreqOffsetForRestore(f, false); + + //auto f = findFreeFreqOffset(1000, 2000, 50); + //setFreqOffsetForRestore(f, false); + ui->cbVHFcontest->setChecked(false); // this needs to always be false ui->actionModeAutoreply->setChecked(m_config.autoreply_on_at_startup()); ui->spotButton->setChecked(m_config.spot_to_reporting_networks()); + QActionGroup * modeActionGroup = new QActionGroup(this); + ui->actionModeJS8Normal->setActionGroup(modeActionGroup); + ui->actionModeJS8Fast->setActionGroup(modeActionGroup); + ui->actionModeJS8Turbo->setActionGroup(modeActionGroup); + ui->actionModeJS8Ultra->setActionGroup(modeActionGroup); + + auto mbmp = new MousePressEater(); + connect(mbmp, &MousePressEater::mousePressed, this, [this](QObject *, QMouseEvent * e, bool *pProcessed){ + ui->menuModeJS8->popup(e->globalPos()); + if(pProcessed) *pProcessed = true; + }); + ui->modeButton->installEventFilter(mbmp); + if(!JS8_ENABLE_JS8B){ + ui->actionModeJS8Fast->setVisible(false); + } + if(!JS8_ENABLE_JS8C){ + ui->actionModeJS8Turbo->setVisible(false); + } + if(!JS8_ENABLE_JS8D){ + ui->actionModeJS8Ultra->setVisible(false); + } + // prep - prepareAutoreplyMode(ui->actionModeAutoreply->isChecked()); + prepareHeartbeatMode(ui->actionModeJS8HB->isChecked()); prepareSpotting(); auto enterFilter = new EnterKeyPressEater(); @@ -1350,6 +1344,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, auto qsyAction = menu->addAction(QString("Jump to %1Hz").arg(selectedOffset)); connect(qsyAction, &QAction::triggered, this, [this, selectedOffset](){ setFreqOffsetForRestore(selectedOffset, false); + // TODO: prompt mode switch? }); menu->addSeparator(); } @@ -1378,6 +1373,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->tableWidgetCalls->clearSelection(); }); + // savedMenu->setEnabled(savedMenu->isEnabled() && !ui->actionModeJS8HB->isChecked()); + // directedMenu->setEnabled(directedMenu->isEnabled() && !ui->actionModeJS8HB->isChecked()); + // relayAction->setEnabled(relayAction->isEnabled() && !ui->actionModeJS8HB->isChecked()); + menu->addSeparator(); removeActivity->setDisabled(selectedOffset == -1); @@ -1563,6 +1562,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, auto qsyAction = menu->addAction(QString("Jump to %1Hz").arg(selectedOffset)); connect(qsyAction, &QAction::triggered, this, [this, selectedOffset](){ setFreqOffsetForRestore(selectedOffset, false); + // TODO: prompt mode switch? }); menu->addSeparator(); } @@ -1598,6 +1598,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->tableWidgetCalls->clearSelection(); }); + // savedMenu->setEnabled(savedMenu->isEnabled() && !ui->actionModeJS8HB->isChecked()); + // directedMenu->setEnabled(directedMenu->isEnabled() && !ui->actionModeJS8HB->isChecked()); + // relayAction->setEnabled(relayAction->isEnabled() && !ui->actionModeJS8HB->isChecked()); + menu->addSeparator(); menu->addAction(addStation); @@ -1661,6 +1665,18 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, btns.append(b); } */ + foreach(auto child, ui->buttonGrid->children()){ + if(!child->isWidgetType()){ + continue; + } + + if(!child->objectName().contains("Button")){ + continue; + } + + auto b = qobject_cast(child); + b->setCursor(QCursor(Qt::PointingHandCursor)); + } auto buttonLayout = ui->buttonGrid->layout(); auto gridButtonLayout = qobject_cast(buttonLayout); gridButtonLayout->setColumnMinimumWidth(0, width); @@ -1783,6 +1799,125 @@ void MainWindow::initializeDummyData(){ return; } +#if 0 + auto t = new QTimer(this); + t->setInterval(150); + connect(t, &QTimer::timeout, this, [this](){ + if(!ui->extFreeTextMsgEdit->hasFocus()){ + return; + } + + auto c = ui->extFreeTextMsgEdit->textCursor(); + int pos = qMin(c.selectionStart(), c.selectionEnd()); + + if(pos <= 5 && c.selectionStart() != c.selectionEnd()){ + c.clearSelection(); + ui->extFreeTextMsgEdit->setTextCursor(c); + } + }); + t->start(); + + auto kpe = new KeyPressEater(); + connect(kpe, &KeyPressEater::keyPressed, this, [this](QObject *obj, QKeyEvent * e, bool *pProcessed){ + auto t = e->text(); + auto c = ui->extFreeTextMsgEdit->textCursor(); + int pos = qMin(c.selectionStart(), c.selectionEnd()); + + if(e->key() == Qt::Key_Escape){ + *pProcessed = false; + return; + } + + QTextCursor cc(c); + cc.setPosition(5); + cc.movePosition(QTextCursor::NextWord); + int cpos = qMax(cc.selectionStart(), cc.selectionEnd()); + if(e->key() == Qt::Key_Backspace && e->modifiers().testFlag(Qt::ControlModifier) && pos < cpos){ + *pProcessed = true; + return; + } + + if((e->key() == Qt::Key_Backspace && pos <= 5) || + (e->key() == Qt::Key_Delete && pos < 5)){ + *pProcessed = true; + return; + } + + if(e->key() == Qt::Key_V && e->modifiers().testFlag(Qt::ControlModifier) && pos <= 5){ + *pProcessed = true; + return; + } + + if(!t.isEmpty() && pos < 5){ + *pProcessed = true; + return; + } + }); + ui->extFreeTextMsgEdit->installEventFilter(kpe); + + connect(ui->extFreeTextMsgEdit, &QTextEdit::copyAvailable, this, [this](bool available){ + if(!available){ + return; + } + auto c = ui->extFreeTextMsgEdit->textCursor(); + + qDebug() << "select" << c.selectionStart() << c.selectionEnd(); + + int pos = qMin(c.selectionStart(), c.selectionEnd()); + if(pos <= 5){ + auto text = c.selectedText(); + if(!text.isEmpty()){ + c.clearSelection(); + ui->extFreeTextMsgEdit->setTextCursor(c); + } + } + }); + + /* + connect(ui->extFreeTextMsgEdit->document(), &QTextDocument::cursorPositionChanged, this, [this](const QTextCursor &){ + auto c = ui->extFreeTextMsgEdit->textCursor(); + int pos = qMin(c.selectionStart(), c.selectionEnd()); + if(pos <= 5){ + auto text = c.selectedText(); + if(!text.isEmpty()){ + c.clearSelection(); + ui->extFreeTextMsgEdit->setTextCursor(c); + } + } + }); + + connect(ui->extFreeTextMsgEdit, &QTextEdit::cursorPositionChanged, this, [this](){ + auto c = ui->extFreeTextMsgEdit->textCursor(); + int pos = qMin(c.selectionStart(), c.selectionEnd()); + + if(pos <= 5){ + auto text = c.selectedText(); + if(!text.isEmpty()){ + c.clearSelection(); + ui->extFreeTextMsgEdit->setTextCursor(c); + } + } + }); + */ + + /*connect(ui->extFreeTextMsgEdit->document(), &QTextDocument::contentsChange, this, [this](int from, int removed, int added){ + if(from < 5 && removed == 1){ + ui->extFreeTextMsgEdit->document()->blockSignals(true); + ui->extFreeTextMsgEdit->document()->undo(); + ui->extFreeTextMsgEdit->document()->clearUndoRedoStacks(QTextDocument::RedoStack); + ui->extFreeTextMsgEdit->document()->blockSignals(false); + } + });*/ + + ui->extFreeTextMsgEdit->setText("HELLO BRAVE NEW WORLD"); + auto c = ui->extFreeTextMsgEdit->textCursor(); + c.setPosition(0); + c.setPosition(5, QTextCursor::KeepAnchor); + auto f = c.charFormat(); + f.setFontStrikeOut(true); + c.setCharFormat(f); +#endif + logHeardGraph("KN4CRD", "OH8STN"); logHeardGraph("KN4CRD", "K0OG"); logHeardGraph("K0OG", "KN4CRD"); @@ -1809,11 +1944,8 @@ void MainWindow::initializeDummyData(){ } } - auto d = DecodedText("h+vWp6mRPprH", 6); - qDebug() << d.message() << buildMessageFrames(d.message()); - - d = DecodedText("bYG4CKYT0cKG", 7); - qDebug() << d.message(); + auto d = DecodedText("SN5-lUuJkby0", Varicode::JS8CallFirst, 1); + qDebug () << "KN4CRD: K0OG ===>" << d.message(); // qDebug() << Varicode::isValidCallsign("@GROUP1", nullptr); // qDebug() << Varicode::packAlphaNumeric50("VE7/KN4CRD"); @@ -1854,6 +1986,7 @@ void MainWindow::initializeDummyData(){ cd.utcTimestamp = dt; cd.grid = i == 5 ? "J042" : i == 6 ? " FN42FN42FN" : ""; cd.tdrift = 0.1*i; + cd.mode = currentMode(); logCallActivity(cd, false); ActivityDetail ad = {}; @@ -1862,6 +1995,7 @@ void MainWindow::initializeDummyData(){ ad.freq = 500 + 100*i; ad.text = QString("%1: %2 TEST MESSAGE").arg(call).arg(m_config.my_callsign()); ad.utcTimestamp = dt; + ad.mode = cd.mode; m_bandActivity[500+100*i] = { ad }; markOffsetDirected(500+100*i, false); @@ -2089,7 +2223,9 @@ void MainWindow::writeSettings() m_settings->setValue("RxFreq",ui->RxFreqSpinBox->value()); m_settings->setValue("TxFreq",ui->TxFreqSpinBox->value()); m_settings->setValue("WSPRfreq",ui->WSPRfreqSpinBox->value()); - m_settings->setValue("SubMode",ui->sbSubmode->value()); + m_settings->setValue("SubMode",m_nSubMode); + m_settings->setValue("SubModeHB", ui->actionModeJS8HB->isChecked()); + m_settings->setValue("SubModeHBAck", ui->actionHeartbeatAcknowledgements->isChecked()); m_settings->setValue("DTtol",m_DTtol); m_settings->setValue("Ftol", ui->sbFtol->value ()); m_settings->setValue("MinSync",m_minSync); @@ -2119,8 +2255,6 @@ void MainWindow::writeSettings() m_settings->setValue ("JT65AP", ui->actionEnable_AP_JT65->isChecked ()); m_settings->setValue("SortBy", QVariant(m_sortCache)); m_settings->setValue("ShowColumns", QVariant(m_showColumnsCache)); - m_settings->setValue("HBAutoAck", m_hbAutoAck); - m_settings->setValue("HBHidden", m_hbHidden); m_settings->setValue("HBInterval", m_hbInterval); m_settings->setValue("CQInterval", m_cqInterval); @@ -2163,6 +2297,7 @@ void MainWindow::writeSettings() {"snr", QVariant(cd.snr)}, {"grid", QVariant(cd.grid)}, {"freq", QVariant(cd.freq)}, + {"tdrift", QVariant(cd.tdrift)}, #if CACHE_CALL_DATETIME_AS_STRINGS {"ackTimestamp", QVariant(cd.ackTimestamp.toString("yyyy-MM-dd hh:mm:ss"))}, {"utcTimestamp", QVariant(cd.utcTimestamp.toString("yyyy-MM-dd hh:mm:ss"))}, @@ -2170,6 +2305,7 @@ void MainWindow::writeSettings() {"ackTimestamp", QVariant(cd.ackTimestamp)}, {"utcTimestamp", QVariant(cd.utcTimestamp)}, #endif + {"mode", QVariant(cd.mode)}, }); } m_settings->endGroup(); @@ -2243,6 +2379,12 @@ void MainWindow::readSettings() ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt()); m_nSubMode=m_settings->value("SubMode",0).toInt(); + ui->actionModeJS8HB->setChecked(m_nSubMode == Varicode::JS8CallNormal && m_settings->value("SubModeHB", false).toBool()); + ui->actionHeartbeatAcknowledgements->setChecked(m_settings->value("SubModeHBAck", false).toBool()); + ui->actionModeJS8Normal->setChecked(m_nSubMode == Varicode::JS8CallNormal); + ui->actionModeJS8Fast->setChecked(m_nSubMode == Varicode::JS8CallFast); + ui->actionModeJS8Turbo->setChecked(m_nSubMode == Varicode::JS8CallTurbo); + ui->actionModeJS8Ultra->setChecked(m_nSubMode == Varicode::JS8CallUltra); ui->sbFtol->setValue (m_settings->value("Ftol", 20).toInt()); m_minSync=m_settings->value("MinSync",0).toInt(); ui->syncSpinBox->setValue(m_minSync); @@ -2284,8 +2426,6 @@ void MainWindow::readSettings() m_sortCache = m_settings->value("SortBy").toMap(); m_showColumnsCache = m_settings->value("ShowColumns").toMap(); - m_hbAutoAck = m_settings->value("HBAutoAck", true).toBool(); - m_hbHidden = m_settings->value("HBHidden", true).toBool(); m_hbInterval = m_settings->value("HBInterval", 0).toInt(); m_cqInterval = m_settings->value("CQInterval", 0).toInt(); @@ -2331,6 +2471,8 @@ void MainWindow::readSettings() auto snr = values.value("snr", -64).toInt(); auto grid = values.value("grid", "").toString(); auto freq = values.value("freq", 0).toInt(); + auto tdrift = values.value("tdrift", 0).toFloat(); + #if CACHE_CALL_DATETIME_AS_STRINGS auto ackTimestampStr = values.value("ackTimestamp", "").toString(); @@ -2344,14 +2486,17 @@ void MainWindow::readSettings() auto ackTimestamp = values.value("ackTimestamp").toDateTime(); auto utcTimestamp = values.value("utcTimestamp").toDateTime(); #endif + auto mode = values.value("mode", "JS8").toString(); CallDetail cd = {}; cd.call = call; cd.snr = snr; cd.grid = grid; cd.freq = freq; + cd.tdrift = tdrift; cd.ackTimestamp = ackTimestamp; cd.utcTimestamp = utcTimestamp; + cd.mode = mode; logCallActivity(cd, false); } @@ -2393,30 +2538,11 @@ void MainWindow::setDecodedTextFont (QFont const& font) void MainWindow::fixStop() { - m_hsymStop=179; - if(m_mode=="WSPR") { - m_hsymStop=396; - } else if(m_mode=="WSPR-LF") { - m_hsymStop=813; - } else if(m_mode=="Echo") { - m_hsymStop=9; - } else if (m_mode=="JT4"){ - m_hsymStop=176; - if(m_config.decode_at_52s()) m_hsymStop=179; - } else if (m_mode=="JT9"){ - m_hsymStop=173; - if(m_config.decode_at_52s()) m_hsymStop=179; - } else if (m_mode=="JT65" or m_mode=="JT9+JT65"){ - m_hsymStop=174; - if(m_config.decode_at_52s()) m_hsymStop=179; - } else if (m_mode=="QRA64"){ - m_hsymStop=179; - if(m_config.decode_at_52s()) m_hsymStop=186; - } else if (m_mode=="FreqCal"){ - m_hsymStop=((int(m_TRperiod/0.288))/8)*8; - } else if (m_mode=="FT8") { - m_hsymStop=JS8_SYMBOL_STOP; - } + m_hsymStop=((int(m_TRperiod/0.288))/8)*8 - 1; // 0.288 because 6912/12000/2 = 0.288 + + if(m_nSubMode == Varicode::JS8CallUltra){ + m_hsymStop++; + } } //-------------------------------------------------------------- dataSink() @@ -2442,11 +2568,6 @@ void MainWindow::dataSink(qint64 frames) &m_bUseRef,c_fname,len); m_bClearRefSpec=false; - if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9) { - fastSink(frames); - if(m_bFastMode) return; - } - // Get power, spectrum, and ihsym int trmin=m_TRperiod/60; // int k (frames - 1); @@ -2465,36 +2586,6 @@ void MainWindow::dataSink(qint64 frames) if(m_mode=="MSK144") return; fixStop(); - if (m_mode == "FreqCal" - // only calculate after 1st chunk, also skip chunk where rig - // changed frequency - && !(m_ihsym % 8) && m_ihsym > 8 && m_ihsym <= m_hsymStop) { - int RxFreq=ui->RxFreqSpinBox->value (); - int nkhz=(m_freqNominal+RxFreq)/1000; - int ftol = ui->sbFtol->value (); - freqcal_(&dec_data.d2[0],&k,&nkhz,&RxFreq,&ftol,&line[0],80); - QString t=QString::fromLatin1(line); - DecodedText decodedtext {t, false, m_config.my_grid ()}; - ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(), - m_logBook,m_config.color_primary_highlight(),m_config.color_MyCall(),m_config.color_DXCC(), - m_config.color_NewCall(),m_config.ppfx()); - if (ui->measure_check_box->isChecked ()) { - // Append results text to file "fmt.all". - QFile f {m_config.writeable_data_dir ().absoluteFilePath ("fmt.all")}; - if (f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { - QTextStream out(&f); - out << t << endl; - f.close(); - } else { - MessageBox::warning_message (this, tr ("File Open Error") - , tr ("Cannot open \"%1\" for append: %2") - .arg (f.fileName ()).arg (f.errorString ())); - } - } - if(m_ihsym==m_hsymStop && ui->actionFrequency_calibration->isChecked()) { - freqCalStep(); - } - } if(m_ihsym==3*m_hsymStop/4) { m_dialFreqRxWSPR=m_freqNominal; @@ -2621,120 +2712,6 @@ QString MainWindow::save_wave_file (QString const& name, short const * data, int //-------------------------------------------------------------- fastSink() void MainWindow::fastSink(qint64 frames) { - int k (frames); - bool decodeNow=false; - - if(k < m_k0) { //New sequence ? - memcpy(fast_green2,fast_green,4*703); //Copy fast_green[] to fast_green2[] - memcpy(fast_s2,fast_s,4*703*64); //Copy fast_s[] into fast_s2[] - fast_jh2=fast_jh; - if(!m_diskData) memset(dec_data.d2,0,2*30*12000); //Zero the d2[] array - m_bFastDecodeCalled=false; - m_bDecoded=false; - } - - QDateTime tnow=DriftingDateTime::currentDateTimeUtc(); - int ihr=tnow.toString("hh").toInt(); - int imin=tnow.toString("mm").toInt(); - int isec=tnow.toString("ss").toInt(); - isec=isec - isec%m_TRperiod; - int nutc0=10000*ihr + 100*imin + isec; - if(m_diskData) nutc0=m_UTCdisk; - char line[80]; - bool bmsk144=((m_mode=="MSK144") and (m_monitoring or m_diskData)); - line[0]=0; - - int RxFreq=ui->RxFreqSpinBox->value (); - int nTRpDepth=m_TRperiod + 1000*(m_ndepth & 3); - qint64 ms0 = DriftingDateTime::currentMSecsSinceEpoch(); - strncpy(dec_data.params.mycall, (m_baseCall+" ").toLatin1(),12); - QString hisCall {ui->dxCallEntry->text ()}; - bool bshmsg=ui->cbShMsgs->isChecked(); - bool bcontest=ui->cbVHFcontest->isChecked(); - bool bswl=ui->cbSWL->isChecked(); - strncpy(dec_data.params.hiscall,(Radio::base_callsign (hisCall) + " ").toLatin1 ().constData (), 12); - strncpy(dec_data.params.mygrid, (m_config.my_grid()+" ").toLatin1(),6); - QString dataDir; - dataDir = m_config.writeable_data_dir ().absolutePath (); - char ddir[512]; - strncpy(ddir,dataDir.toLatin1(), sizeof (ddir) - 1); - float pxmax = 0; - float rmsNoGain = 0; - int ftol = ui->sbFtol->value (); - hspec_(dec_data.d2,&k,&nutc0,&nTRpDepth,&RxFreq,&ftol,&bmsk144,&bcontest, - &m_bTrain,m_phaseEqCoefficients.constData(),&m_inGain,&dec_data.params.mycall[0], - &dec_data.params.hiscall[0],&bshmsg,&bswl, - &ddir[0],fast_green,fast_s,&fast_jh,&pxmax,&rmsNoGain,&line[0],&dec_data.params.mygrid[0], - 12,12,512,80,6); - float px = fast_green[fast_jh]; - QString t; - t.sprintf(" Rx noise: %5.1f ",px); - ui->signal_meter_widget->setValue(rmsNoGain,pxmax); // Update thermometer - m_fastGraph->plotSpec(m_diskData,m_UTCdisk); - - if(bmsk144 and (line[0]!=0)) { - QString message {QString::fromLatin1 (line)}; - DecodedText decodedtext {message.replace (QChar::LineFeed, ""), bcontest, m_config.my_grid ()}; - ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(), - m_logBook,m_config.color_primary_highlight(),m_config.color_MyCall(),m_config.color_DXCC(), - m_config.color_NewCall(),m_config.ppfx()); - m_bDecoded=true; - if (m_mode != "ISCAT") postDecode (true, decodedtext.string ()); - writeAllTxt(message, decodedtext.bits()); - bool stdMsg = decodedtext.report(m_baseCall, - Radio::base_callsign(ui->dxCallEntry->text()),m_rptRcvd); - //if (stdMsg) pskPost (decodedtext); - } - - float fracTR=float(k)/(12000.0*m_TRperiod); - decodeNow=false; - if(fracTR>0.92) { - m_dataAvailable=true; - fast_decode_done(); - m_bFastDone=true; - } - - m_k0=k; - if(m_diskData and m_k0 >= dec_data.params.kin - 7 * 512) decodeNow=true; - if(!m_diskData and m_tRemaining<0.35 and !m_bFastDecodeCalled) decodeNow=true; - if(m_mode=="MSK144") decodeNow=false; - - if(decodeNow) { - m_dataAvailable=true; - m_t0=0.0; - m_t1=k/12000.0; - m_kdone=k; - dec_data.params.newdat=1; - if(!m_decoderBusy) { - m_bFastDecodeCalled=true; - decode(); - } - } - - if(decodeNow or m_bFastDone) { - if(!m_diskData) { - QDateTime now {DriftingDateTime::currentDateTimeUtc()}; - int n=now.time().second() % m_TRperiod; - if(n<(m_TRperiod/2)) n=n+m_TRperiod; - auto const& period_start = now.addSecs (-n); - m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss")); - m_fileToSave.clear (); - if(m_saveAll or m_bAltV or (m_bDecoded and m_saveDecoded) or (m_mode!="MSK144" and m_mode!="FT8")) { - m_bAltV=false; - // the following is potential a threading hazard - not a good - // idea to pass pointer to be processed in another thread - m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, - this, m_fnameWE, &dec_data.d2[0], m_TRperiod, m_config.my_callsign(), - m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); - } - if(m_mode!="MSK144") { - killFileTimer.start (3*1000*m_TRperiod/4); //Kill 3/4 period from now - } - } - m_bFastDone=false; - } - float tsec=0.001*(DriftingDateTime::currentMSecsSinceEpoch() - ms0); - m_fCPUmskrtd=0.9*m_fCPUmskrtd + 0.1*tsec; } void MainWindow::showSoundInError(const QString& errorMsg) @@ -2766,6 +2743,14 @@ void rebuildMacQAction(QMenu *menu, QAction *existingAction){ menu->removeAction(dummyAction); } +void MainWindow::on_menuModeJS8_aboutToShow(){ + bool canChangeMode = !m_transmitting && m_txFrameCount == 0 && m_txFrameQueue.isEmpty(); + ui->actionModeJS8Normal->setEnabled(canChangeMode); + ui->actionModeJS8Fast->setEnabled(canChangeMode); + ui->actionModeJS8Turbo->setEnabled(canChangeMode); + ui->actionModeJS8Ultra->setEnabled(canChangeMode); +} + void MainWindow::on_menuControl_aboutToShow(){ QMenu * freqMenu = new QMenu(this->menuBar()); buildFrequencyMenu(freqMenu); @@ -2848,7 +2833,7 @@ void MainWindow::on_menuWindow_aboutToShow(){ rebuildMacQAction(ui->menuWindow, ui->actionShow_Call_Activity_Columns); #endif - ui->actionShow_Band_Heartbeats_and_ACKs->setChecked(!m_hbHidden); + ui->actionShow_Band_Heartbeats_and_ACKs->setChecked(ui->actionModeJS8HB->isChecked()); ui->actionShow_Band_Heartbeats_and_ACKs->setEnabled(ui->actionShow_Band_Activity->isChecked()); } @@ -2937,7 +2922,6 @@ void MainWindow::on_actionShow_Band_Activity_triggered(bool checked){ } void MainWindow::on_actionShow_Band_Heartbeats_and_ACKs_triggered(bool checked){ - m_hbHidden = !checked; displayBandActivity(); } @@ -3071,7 +3055,7 @@ void MainWindow::openSettings(int tab){ bool b = vhf && (m_mode=="JT4" or m_mode=="JT65" or m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="MSK144" or m_mode=="QRA64"); if(b) VHF_features_enabled(b); - if(m_mode=="FT8") on_actionFT8_triggered(); + if(m_mode=="FT8") on_actionJS8_triggered(); if(b) VHF_features_enabled(b); m_config.transceiver_online (); @@ -3255,6 +3239,27 @@ Radio::Frequency MainWindow::dialFrequency() { m_rigState.tx_frequency () : m_rigState.frequency ()}; } +QString MainWindow::currentMode(){ + if(m_nSubMode == Varicode::JS8CallNormal){ + return "NORMAL"; + } + else if(m_nSubMode == Varicode::JS8CallFast){ + return "FAST"; + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + return "TURBO"; + } + else if(m_nSubMode == Varicode::JS8CallUltra){ +#ifdef JS8D_IS_ULTRA + return "ULTRA"; +#else + return "SLOW"; +#endif + } + + return "?"; +} + void MainWindow::updateCurrentBand(){ QVariant state = ui->readFreq->property("state"); if(!state.isValid()){ @@ -4056,89 +4061,10 @@ void MainWindow::decode() //decode() from += noffset; size -= noffset; } - if(m_mode=="ISCAT" or m_mode=="MSK144" or m_bFast9) { - float t0=m_t0; - float t1=m_t1; - qApp->processEvents(); //Update the waterfall - if(m_nPick > 0) { - t0=m_t0Pick; - t1=m_t1Pick; - } - static short int d2b[360000]; - narg[0]=dec_data.params.nutc; - if(m_kdone>12000*m_TRperiod) { - m_kdone=12000*m_TRperiod; - } - narg[1]=m_kdone; - narg[2]=m_nSubMode; - narg[3]=dec_data.params.newdat; - narg[4]=dec_data.params.minSync; - narg[5]=m_nPick; - narg[6]=1000.0*t0; - narg[7]=1000.0*t1; - narg[8]=2; //Max decode lines per decode attempt - if(dec_data.params.minSync<0) narg[8]=50; - if(m_mode=="ISCAT") narg[9]=101; //ISCAT - if(m_mode=="JT9") narg[9]=102; //Fast JT9 - if(m_mode=="MSK144") narg[9]=104; //MSK144 - narg[10]=ui->RxFreqSpinBox->value(); - narg[11]=ui->sbFtol->value (); - narg[12]=0; - narg[13]=-1; - narg[14]=m_config.aggressive(); - memcpy(d2b,dec_data.d2,2*360000); - watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_,&d2b[0], - &narg[0],&m_TRperiod,&m_msg[0][0], - dec_data.params.mycall,dec_data.params.hiscall,8000,12,12))); - } else { - memcpy(to, from, qMin(mem_js8->size(), size)); - QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove (); // Allow jt9 to start - decodeBusy(true); - } -} -void::MainWindow::fast_decode_done() -{ - float t,tmax=-99.0; - dec_data.params.nagain=false; - dec_data.params.ndiskdat=false; -// if(m_msg[0][0]==0) m_bDecoded=false; - for(int i=0; m_msg[i][0] && i<100; i++) { - QString message=QString::fromLatin1(m_msg[i]); - m_msg[i][0]=0; - if(message.length()>80) message=message.left (80); - if(narg[13]/8==narg[12]) message=message.trimmed().replace("<...>",m_calls); - -//Left (Band activity) window - DecodedText decodedtext {message.replace (QChar::LineFeed, ""), "FT8" == m_mode && - ui->cbVHFcontest->isChecked(), m_config.my_grid ()}; - if(!m_bFastDone) { - ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(), - m_logBook,m_config.color_primary_highlight(),m_config.color_MyCall(),m_config.color_DXCC(), - m_config.color_NewCall(),m_config.ppfx()); - } - - t=message.mid(10,5).toFloat(); - if(t>tmax) { - tmax=t; - m_bDecoded=true; - } - postDecode (true, decodedtext.string ()); - writeAllTxt(message, decodedtext.bits()); - - if(m_mode=="JT9" or m_mode=="MSK144") { - // find and extract any report for myCall - bool stdMsg = decodedtext.report(m_baseCall, - Radio::base_callsign(ui->dxCallEntry->text()), m_rptRcvd); - - // extract details and send to PSKreporter - //if (stdMsg) pskPost (decodedtext); - } - } - m_startAnother=m_loopall; - m_nPick=0; - ui->DecodeButton->setChecked (false); - m_bFastDone=false; + memcpy(to, from, qMin(mem_js8->size(), size)); + QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove (); // Allow jt9 to start + decodeBusy(true); } void MainWindow::writeAllTxt(QString message, int bits) @@ -4153,7 +4079,7 @@ void MainWindow::writeAllTxt(QString message, int bits) << "JS8" << endl; m_RxLog=0; } - auto dt = DecodedText(message, bits); + auto dt = DecodedText(message, bits, m_nSubMode); out << dt.message() << endl; f.close(); } else { @@ -4285,7 +4211,7 @@ void MainWindow::readFromStdout() //readFromStdout } int n=t.length(); auto logText = t.mid(0, n-2); - auto dt = DecodedText(logText, false, m_config.my_grid()); + auto dt = DecodedText(logText, false, m_config.my_grid(), m_nSubMode); out << logText << " " << dt.message() << endl; f.close(); } else { @@ -4295,7 +4221,7 @@ void MainWindow::readFromStdout() //readFromStdout } DecodedText decodedtext {QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"}), "FT8" == m_mode && - ui->cbVHFcontest->isChecked(), m_config.my_grid ()}; + ui->cbVHFcontest->isChecked(), m_config.my_grid (), m_nSubMode}; bool bValidFrame = decodedtext.snr() > -24; @@ -4342,6 +4268,7 @@ void MainWindow::readFromStdout() //readFromStdout d.snr = decodedtext.snr(); d.isBuffered = false; d.tdrift = decodedtext.dt(); + d.mode = currentMode(); // if we have any "first" frame, and a buffer is already established, clear it... int prevBufferOffset = -1; @@ -4378,6 +4305,7 @@ void MainWindow::readFromStdout() //readFromStdout cd.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); cd.bits = decodedtext.bits(); cd.tdrift = decodedtext.dt(); + cd.mode = currentMode(); // Only respond to HEARTBEATS...remember that CQ messages are "Alt" pings if(decodedtext.isHeartbeat()){ @@ -4401,6 +4329,7 @@ void MainWindow::readFromStdout() //readFromStdout cmd.freq = cd.freq; cmd.utcTimestamp = cd.utcTimestamp; cmd.tdrift = cd.tdrift; + cmd.mode = cd.mode; m_rxCommandQueue.append(cmd); } @@ -4429,6 +4358,7 @@ void MainWindow::readFromStdout() //readFromStdout cmd.bits = decodedtext.bits(); cmd.extra = parts.length() > 2 ? parts.mid(3).join(" ") : ""; cmd.tdrift = decodedtext.dt(); + cmd.mode = currentMode(); // if the command is a buffered command and its not the last frame OR we have from or to in a separate message (compound call) if((Varicode::isCommandBuffered(cmd.cmd) && (cmd.bits & Varicode::JS8CallLast) != Varicode::JS8CallLast) || cmd.from == "<....>" || cmd.to == "<....>"){ @@ -4444,6 +4374,7 @@ void MainWindow::readFromStdout() //readFromStdout cmdcd.utcTimestamp = cmd.utcTimestamp; cmdcd.ackTimestamp = cmd.to == m_config.my_callsign() ? cmd.utcTimestamp : QDateTime{}; cmdcd.tdrift = cmd.tdrift; + cmdcd.mode = currentMode(); logCallActivity(cmdcd, false); logHeardGraph(cmd.from, cmd.to); } @@ -4477,6 +4408,7 @@ void MainWindow::readFromStdout() //readFromStdout td.freq = cmd.freq; td.utcTimestamp = cmd.utcTimestamp; td.tdrift = cmd.tdrift; + td.mode = currentMode(); logCallActivity(td, true); logHeardGraph(cmd.from, cmd.to); } @@ -4867,7 +4799,17 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60; txDuration=0.0; - if(m_modeTx=="FT8") txDuration=1.0 + JS8_NUM_SYMBOLS * (double)JS8_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; // FT8 + if(m_modeTx=="FT8"){ + if(m_nSubMode == Varicode::JS8CallNormal){ + txDuration=JS8A_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8A_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; + } else if(m_nSubMode == Varicode::JS8CallFast){ + txDuration=JS8B_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8B_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; + } else if(m_nSubMode == Varicode::JS8CallTurbo){ + txDuration=JS8C_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8C_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; + } else if(m_nSubMode == Varicode::JS8CallUltra){ + txDuration=JS8D_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8D_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; + } + } double tx1=0.0; double tx2=txDuration; @@ -4941,7 +4883,21 @@ void MainWindow::guiUpdate() if(msgLength==0 and !m_tune) on_stopTxButton_clicked(); // 15.0 - 12.6 - if(fTR > 1.0-(2.4/15.0) && fTR < 1.0){ + double ratio = 1.0; + if(m_nSubMode == Varicode::JS8CallNormal){ + ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8A_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); + } + else if(m_nSubMode == Varicode::JS8CallFast){ + ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8B_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8C_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); + } + else if(m_nSubMode == Varicode::JS8CallUltra){ + ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8D_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); + } + + if(fTR > 1.0-ratio && fTR < 1.0){ if(!m_deadAirTone){ qDebug() << "should start dead air tone"; m_deadAirTone = true; @@ -4953,7 +4909,16 @@ void MainWindow::guiUpdate() } } - float lateThreshold=(2.5 - m_config.txDelay())/15.0; // 0.75; + // the late threshold is the dead air time minus the tx delay time + float lateThreshold = ratio - (m_config.txDelay() / m_TRperiod); + if(m_nSubMode == Varicode::JS8CallFast){ + // for the faster mode, only allow 3/4 late threshold + lateThreshold *= 0.75; + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + // for the turbo mode, only allow 1/2 late threshold + lateThreshold *= 0.5; + } if(g_iptt==0 and ((m_bTxTime and fTR0) or m_tune)) { //### Allow late starts icw[0]=m_ncw; @@ -4963,7 +4928,7 @@ void MainWindow::guiUpdate() emitPTT(true); m_tx_when_ready = true; - qDebug() << "start threshold" << fTR << lateThreshold; + qDebug() << "start threshold" << fTR << lateThreshold << ms; } // TODO: stop @@ -5010,10 +4975,18 @@ void MainWindow::guiUpdate() // 0: [000] <- this is standard set // 1: [001] <- this is fox/hound //m_i3bit=0; - qDebug() << "genft8" << message; + qDebug() << "gen tones" << message; char ft8msgbits[75 + 12]; //packed 75 bit ft8 message plus 12-bit CRC - genft8_(message, MyGrid, &bcontest, &m_i3bit, msgsent, const_cast (ft8msgbits), - const_cast (itone), 22, 6, 22); + + if(m_nSubMode == Varicode::JS8CallNormal){ + qDebug() << "gen ft8"; + genft8_(message, MyGrid, &bcontest, &m_i3bit, msgsent, const_cast (ft8msgbits), + const_cast (itone), 22, 6, 22); + } else if (m_nSubMode == Varicode::JS8CallFast || m_nSubMode == Varicode::JS8CallTurbo || m_nSubMode == Varicode::JS8CallUltra){ + qDebug() << "gen js8"; + genjs8_(message, MyGrid, &bcontest, &m_i3bit, msgsent, const_cast (ft8msgbits), + const_cast (itone), 22, 6, 22); + } msgibits = m_i3bit; msgsent[22]=0; @@ -5201,7 +5174,7 @@ void MainWindow::guiUpdate() if(m_transmitting) { char s[41]; - auto dt = DecodedText(msgsent, msgibits); + auto dt = DecodedText(msgsent, msgibits, m_nSubMode); sprintf(s,"Tx: %s", dt.message().toLocal8Bit().mid(0, 41).data()); m_nsendingsh=0; if(s[4]==64) m_nsendingsh=1; @@ -5387,7 +5360,7 @@ void MainWindow::startTx2() void MainWindow::stopTx() { Q_EMIT endTransmitMessage (); - auto dt = DecodedText(m_currentMessage.trimmed(), m_currentMessageBits); + auto dt = DecodedText(m_currentMessage.trimmed(), m_currentMessageBits, m_nSubMode); last_tx_label.setText("Last Tx: " + dt.message()); //m_currentMessage.trimmed()); m_btxok = false; @@ -5779,82 +5752,30 @@ void MainWindow::on_addButton_clicked() //Add button void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype() { - char message[29]; - char msgsent[29]; - int itone0[NUM_ISCAT_SYMBOLS]; //Dummy array, data not used - int len1=22; - QByteArray s=t.toUpper().toLocal8Bit(); - ba2msg(s,message); - int ichk=1,itype=0; - gen65_(message,&ichk,msgsent,itone0,&itype,len1,len1); - msgsent[22]=0; - bool text=false; - bool shortMsg=false; - if(itype==6) text=true; - if(itype==7 and m_config.enable_VHF_features() and - m_mode=="JT65") shortMsg=true; - if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false; - if((m_mode=="MSK144" or m_mode=="FT8") and ui->cbVHFcontest->isChecked()) { - int i0=t.trimmed().length()-7; - if(t.mid(i0,3)==" R ") text=false; - } - QPalette p(tx->palette()); - if(text) { - p.setColor(QPalette::Base,"#ffccff"); - } else { - if(shortMsg) { - p.setColor(QPalette::Base,"#66ffff"); - } else { - p.setColor(QPalette::Base,Qt::transparent); - if(m_mode=="MSK144" and t.mid(0,1)=="<") { - p.setColor(QPalette::Base,"#00ffff"); - } - } - } - tx->setPalette(p); - auto pos = tx->cursorPosition (); - tx->setText(t.toUpper()); - tx->setCursorPosition (pos); } void MainWindow::on_tx1_editingFinished() //tx1 edited { - QString t=ui->tx1->text(); - msgtype(t, ui->tx1); } void MainWindow::on_tx2_editingFinished() //tx2 edited { - QString t=ui->tx2->text(); - msgtype(t, ui->tx2); } void MainWindow::on_tx3_editingFinished() //tx3 edited { - QString t=ui->tx3->text(); - msgtype(t, ui->tx3); } void MainWindow::on_tx4_editingFinished() //tx4 edited { - QString t=ui->tx4->text(); - msgtype(t, ui->tx4); } void MainWindow::on_tx5_currentTextChanged (QString const& text) //tx5 edited { - msgtype(text, ui->tx5->lineEdit ()); } void MainWindow::on_tx6_editingFinished() //tx6 edited { - QString t=ui->tx6->text().toUpper(); - if(t.indexOf(" ")>0) { - QString t1=t.split(" ").at(1); - m_CQtype="CQ"; - if(t1.size()==2) m_CQtype="CQ " + t1; - } - msgtype(t, ui->tx6); } void MainWindow::cacheActivity(QString key){ @@ -6274,7 +6195,7 @@ QString MainWindow::createMessageTransmitQueue(QString const& text, bool reset){ QStringList lines; foreach(auto frame, frames){ - auto dt = DecodedText(frame.first, frame.second); + auto dt = DecodedText(frame.first, frame.second, m_nSubMode); lines.append(dt.message()); } @@ -6284,7 +6205,11 @@ QString MainWindow::createMessageTransmitQueue(QString const& text, bool reset){ displayTextForFreq(QString("%1 %2 ").arg(joined).arg(m_config.eot()), freq, DriftingDateTime::currentDateTimeUtc(), true, true, true); // if we're transmitting a message to be displayed, we should bump the repeat buttons... +#if JS8HB_RESET_HB_TIMER_ON_TX resetAutomaticIntervalTransmissions(false, false); +#else + resetCQTimer(false); +#endif // keep track of the last message text sent m_lastTxMessage = text; @@ -6338,7 +6263,6 @@ void MainWindow::on_textEditRX_mouseDoubleClicked(){ void MainWindow::on_nextFreeTextMsg_currentTextChanged (QString const& text) { - msgtype(text, ui->nextFreeTextMsg); } void MainWindow::on_extFreeTextMsgEdit_currentTextChanged (QString const& text) @@ -6399,7 +6323,8 @@ QList> MainWindow::buildMessageFrames(const QString &text){ mygrid, selectedCall, text, - forceIdentify); + forceIdentify, + m_nSubMode); #if 0 qDebug() << "frames:"; @@ -6917,26 +6842,119 @@ void MainWindow::displayWidgets(qint64 n) m_lastCallsign.clear (); // ensures Tx5 is updated for new modes } -void MainWindow::on_actionModeJS8_triggered(){ - // TODO: uncheck all other modes +void MainWindow::on_actionModeJS8HB_toggled(bool checked){ + // prep hb mode + prepareHeartbeatMode(checked); + displayActivity(true); + + on_actionJS8_triggered(); +} + +void MainWindow::on_actionHeartbeatAcknowledgements_toggled(bool checked){ + // prep hb ack mode + prepareHeartbeatMode(ui->actionModeJS8HB->isChecked()); + displayActivity(true); + + on_actionJS8_triggered(); +} + +void MainWindow::on_actionModeJS8Normal_triggered(){ + on_actionJS8_triggered(); +} + +void MainWindow::on_actionModeJS8Fast_triggered(){ + on_actionJS8_triggered(); +} + +void MainWindow::on_actionModeJS8Turbo_triggered(){ + on_actionJS8_triggered(); +} + +void MainWindow::on_actionModeJS8Ultra_triggered(){ + on_actionJS8_triggered(); } void MainWindow::on_actionModeAutoreply_toggled(bool checked){ - prepareAutoreplyMode(checked); + // update the HB ack option (needs autoreply on) + prepareHeartbeatMode(ui->actionModeJS8HB->isChecked()); + + // then update the js8 mode + on_actionJS8_triggered(); } -void MainWindow::prepareAutoreplyMode(bool enabled){ - // heartbeat is now only available in autoreply mode +void MainWindow::prepareHeartbeatMode(bool enabled){ + // heartbeat is only available in HB mode ui->hbMacroButton->setVisible(enabled); - ui->actionHeartbeat->setVisible(enabled); + if(!enabled){ + ui->hbMacroButton->setChecked(false); + } + ui->actionHeartbeat->setEnabled(enabled); + ui->actionModeJS8HB->setEnabled(m_nSubMode == Varicode::JS8CallNormal); + ui->actionHeartbeatAcknowledgements->setEnabled(ui->actionModeAutoreply->isChecked() && enabled); + + //ui->actionCQ->setEnabled(!enabled); + //ui->actionFocus_Message_Reply_Area->setEnabled(!enabled); + + // default to not displaying the other buttons + // ui->cqMacroButton->setVisible(!enabled); + // ui->replyMacroButton->setVisible(!enabled); + // ui->snrMacroButton->setVisible(!enabled); + // ui->infoMacroButton->setVisible(!enabled); + // ui->macrosMacroButton->setVisible(!enabled); + // ui->queryButton->setVisible(!enabled); + // ui->extFreeTextMsgEdit->setVisible(!enabled); + // if(enabled){ + // ui->extFreeTextMsgEdit->clear(); + // } + + // show heartbeat and acks in hb mode only + // ui->actionShow_Band_Heartbeats_and_ACKs->setChecked(enabled); + // ui->actionShow_Band_Heartbeats_and_ACKs->setVisible(true); + // ui->actionShow_Band_Heartbeats_and_ACKs->setEnabled(false); // update the HB button immediately updateRepeatButtonDisplay(); + updateButtonDisplay(); } -void MainWindow::on_actionFT8_triggered() +void MainWindow::on_actionJS8_triggered() { m_mode="FT8"; + m_nSubMode=0; + if(ui->actionModeJS8Normal->isChecked()){ + m_nSubMode=Varicode::JS8CallNormal; + } + else if(ui->actionModeJS8Fast->isChecked()){ + m_nSubMode=Varicode::JS8CallFast; + } + else if(ui->actionModeJS8Turbo->isChecked()){ + m_nSubMode=Varicode::JS8CallTurbo; + } + else if(ui->actionModeJS8Ultra->isChecked()){ + m_nSubMode=Varicode::JS8CallUltra; + } + + // Only enable heartbeat for normal mode + ui->actionModeJS8HB->setEnabled(m_nSubMode == Varicode::JS8CallNormal); + if(m_nSubMode != Varicode::JS8CallNormal){ + ui->actionModeJS8HB->setChecked(false); + } + + auto modeText = currentMode(); + if(ui->actionModeAutoreply->isChecked()){ + modeText += QString("+AUTO"); + } + if(ui->actionModeJS8HB->isChecked()){ + if(ui->actionHeartbeatAcknowledgements->isChecked()){ + modeText += QString("+HB+ACK"); + } else { + modeText += QString("+HB"); + } + } + + ui->modeButton->setText(modeText); + + m_wideGraph->setSubMode(m_nSubMode); bool bVHF=m_config.enable_VHF_features(); m_bFast9=false; m_bFastMode=false; @@ -6946,7 +6964,7 @@ void MainWindow::on_actionFT8_triggered() m_nsps=6912; m_FFTSize = m_nsps / 2; Q_EMIT FFTSize (m_FFTSize); - m_hsymStop=JS8_SYMBOL_STOP; + fixStop(); setup_status_bar (bVHF); m_toneSpacing=0.0; //??? ui->actionFT8->setChecked(true); //??? @@ -6954,7 +6972,19 @@ void MainWindow::on_actionFT8_triggered() m_wideGraph->setModeTx(m_modeTx); VHF_features_enabled(bVHF); ui->cbAutoSeq->setChecked(true); - m_TRperiod=JS8_TX_SECONDS; + m_TRperiod = 0; + if(m_nSubMode == Varicode::JS8CallNormal){ + m_TRperiod = JS8A_TX_SECONDS; + } + else if(m_nSubMode == Varicode::JS8CallFast){ + m_TRperiod = JS8B_TX_SECONDS; + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + m_TRperiod = JS8C_TX_SECONDS; + } + else if(m_nSubMode == Varicode::JS8CallUltra){ + m_TRperiod = JS8D_TX_SECONDS; + } m_fastGraph->hide(); m_wideGraph->show(); ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); @@ -6987,6 +7017,8 @@ void MainWindow::on_actionFT8_triggered() ui->txFirstCheckBox->setEnabled(true); ui->cbAutoSeq->setEnabled(true); + updateTextDisplay(); + refreshTextDisplay(); statusChanged(); } @@ -7426,25 +7458,6 @@ void MainWindow::buildFrequencyMenu(QMenu *menu){ } void MainWindow::buildHeartbeatMenu(QMenu *menu){ - auto selectedCallsign = callsignSelected(); - bool enabled = ui->actionModeAutoreply->isChecked() && selectedCallsign.isEmpty(); - auto text = "Send Heartbeat Acknowledgments (ACK)"; - if(!ui->actionModeAutoreply->isChecked()){ - text = "Send Heartbeat Acknowledgments (ACK) (Disabled: Autoreply is off)"; - } - if(!selectedCallsign.isEmpty()){ - text = "Send Heartbeat Acknowledgments (ACK) (Disabled: Currently in QSO)"; - } - auto autoAckHB = menu->addAction(text); - autoAckHB->setEnabled(enabled); - autoAckHB->setCheckable(true); - autoAckHB->setChecked(m_hbAutoAck); - connect(autoAckHB, &QAction::triggered, this, [this, autoAckHB](){ - m_hbAutoAck = autoAckHB->isChecked(); - updateRepeatButtonDisplay(); - }); - menu->addSeparator(); - if(m_hbInterval > 0){ auto startStop = menu->addAction(ui->hbMacroButton->isChecked() ? "Stop Heartbeat Timer" : "Start Heartbeat Timer"); connect(startStop, &QAction::triggered, this, [this](){ ui->hbMacroButton->toggle(); }); @@ -7718,9 +7731,11 @@ void MainWindow::buildShowColumnsMenu(QMenu *menu, QString tableKey){ {"Last heard timestamp", "timestamp"}, {"SNR", "snr"}, {"Time Delta", "tdrift"}, + {"Mode Speed", "mode"}, }; QMap defaultOverride = { + {"mode", false}, {"tdrift", false}, {"grid", false}, {"distance", false} @@ -8015,7 +8030,6 @@ void MainWindow::buildQueryMenu(QMenu * menu, QString call){ addMessageText(QString("%1 MSG [MESSAGE]").arg(selectedCall), true, true); }); - auto msgToAction = menu->addAction(QString("%1 MSG TO:[CALLSIGN] [MESSAGE] - Please store this message at your station for later retreival by [CALLSIGN]").arg(call).trimmed()); msgToAction->setDisabled(isAllCall); connect(msgToAction, &QAction::triggered, this, [this](){ @@ -8061,7 +8075,9 @@ void MainWindow::buildQueryMenu(QMenu * menu, QString call){ addMessageText(QString("%1 QUERY MSG [ID]").arg(selectedCall), true, true); }); - auto agnAction = menu->addAction(QString("%1 AGN? - Please automatically repeat your last transmission").arg(call).trimmed()); + menu->addSeparator(); + + auto agnAction = menu->addAction(QString("%1 AGN? - Please repeat your last transmission").arg(call).trimmed()); connect(agnAction, &QAction::triggered, this, [this](){ QString selectedCall = callsignSelected(); @@ -8074,8 +8090,6 @@ void MainWindow::buildQueryMenu(QMenu * menu, QString call){ if(m_config.transmit_directed()) toggleTx(true); }); - menu->addSeparator(); - auto qslQueryAction = menu->addAction(QString("%1 QSL? - Did you receive my last transmission?").arg(call).trimmed()); connect(qslQueryAction, &QAction::triggered, this, [this](){ @@ -8423,6 +8437,8 @@ void MainWindow::on_tableWidgetRXAll_cellDoubleClicked(int row, int col){ // switch to the offset of this row setFreqOffsetForRestore(offset, false); + // TODO: prompt mode switch? + // print the history in the main window... int activityAging = m_config.activity_aging(); QDateTime now = DriftingDateTime::currentDateTimeUtc(); @@ -8547,7 +8563,6 @@ void MainWindow::on_tableWidgetCalls_selectionChanged(const QItemSelection &sele void MainWindow::on_freeTextMsg_currentTextChanged (QString const& text) { - msgtype(text, ui->freeTextMsg->lineEdit ()); } void MainWindow::on_driftSpinBox_valueChanged(int n){ @@ -9041,25 +9056,32 @@ void MainWindow::rigFailure (QString const& reason) void MainWindow::transmit (double snr) { double toneSpacing=0.0; - if (m_modeTx == "JT65") { - if(m_nSubMode==0) toneSpacing=11025.0/4096.0; - if(m_nSubMode==1) toneSpacing=2*11025.0/4096.0; - if(m_nSubMode==2) toneSpacing=4*11025.0/4096.0; - Q_EMIT sendMessage (NUM_JT65_SYMBOLS, - 4096.0*12000.0/11025.0, ui->TxFreqSpinBox->value () - m_XIT, - toneSpacing, m_soundOutput, m_config.audio_output_channel (), - true, false, snr, m_TRperiod); - } if (m_modeTx == "FT8") { - toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8_SYMBOL_SAMPLES; - //if(m_config.x2ToneSpacing()) toneSpacing=2.0*(double)RX_SAMPLE_RATE/(double)JS8_SYMBOL_SAMPLES; - //if(m_config.x4ToneSpacing()) toneSpacing=4.0*(double)RX_SAMPLE_RATE/(double)JS8_SYMBOL_SAMPLES; + double symbolSamples = 0.0; + if(m_nSubMode == Varicode::JS8CallNormal){ + symbolSamples=(double)JS8A_SYMBOL_SAMPLES; + toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8A_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallFast){ + symbolSamples=(double)JS8B_SYMBOL_SAMPLES; + toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8B_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + symbolSamples=(double)JS8C_SYMBOL_SAMPLES; + toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8C_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallUltra){ + symbolSamples=(double)JS8D_SYMBOL_SAMPLES; + toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8D_SYMBOL_SAMPLES; + } + if(m_config.x2ToneSpacing()) toneSpacing*=2.0; + if(m_config.x4ToneSpacing()) toneSpacing*=4.0; if(m_config.bFox() and !m_tune) toneSpacing=-1; if(TEST_FOX_WAVE_GEN && ui->turboButton->isChecked() && !m_tune) toneSpacing=-1; Q_EMIT sendMessage (JS8_NUM_SYMBOLS, - (double)JS8_SYMBOL_SAMPLES, ui->TxFreqSpinBox->value () - m_XIT, + symbolSamples, ui->TxFreqSpinBox->value () - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel (), true, false, snr, m_TRperiod); } @@ -9424,7 +9446,7 @@ void MainWindow::updateButtonDisplay(){ void MainWindow::updateRepeatButtonDisplay(){ auto selectedCallsign = callsignSelected(); - auto hbBase = m_hbAutoAck && ui->actionModeAutoreply->isChecked() && selectedCallsign.isEmpty() ? "HB + ACK" : "HB"; + auto hbBase = ui->actionModeAutoreply->isChecked() && ui->actionHeartbeatAcknowledgements->isChecked() && selectedCallsign.isEmpty() ? "HB + ACK" : "HB"; if(ui->hbMacroButton->isChecked() && m_hbInterval > 0 && m_nextHeartbeat.isValid()){ auto secs = DriftingDateTime::currentDateTimeUtc().secsTo(m_nextHeartbeat); if(secs > 0){ @@ -9514,7 +9536,8 @@ void MainWindow::refreshTextDisplay(){ mygrid, selectedCall, text, - forceIdentify + forceIdentify, + m_nSubMode ); connect(t, &BuildMessageFramesThread::finished, t, &QObject::deleteLater); @@ -9547,7 +9570,7 @@ void MainWindow::updateTextWordCheckerDisplay(){ } void MainWindow::updateTextStatsDisplay(QString text, int count){ - const double fpm = 60.0/JS8_TX_SECONDS; + const double fpm = 60.0/m_TRperiod; if(count > 0){ auto words = text.split(" ", QString::SkipEmptyParts).length(); auto wpm = QString::number(words/(count/fpm), 'f', 1); @@ -9801,8 +9824,8 @@ void MainWindow::processActivity(bool force) { } void MainWindow::observeTimeDeltaForAverage(float delta){ - // delta can only be +/- 15 seconds - delta = qMax(-15.0F, qMin(delta, 15.0F)); + // delta can only be +/- the TR period + delta = qMax(-(float)m_TRperiod, qMin(delta, (float)m_TRperiod)); // compute average drift if(m_timeDeltaMsMMA_N == 0){ @@ -9814,7 +9837,7 @@ void MainWindow::observeTimeDeltaForAverage(float delta){ } // display average - if(m_timeDeltaMsMMA < -15.0F || m_timeDeltaMsMMA > 15.0F){ + if(m_timeDeltaMsMMA < -(float)m_TRperiod || m_timeDeltaMsMMA > (float)m_TRperiod){ resetTimeDeltaAverage(); } ui->driftAvgLabel->setText(QString("Avg Time Delta: %1 ms").arg((int)m_timeDeltaMsMMA)); @@ -9929,6 +9952,7 @@ void MainWindow::processRxActivity() { cd.bits = d.bits; cd.tdrift = d.tdrift; cd.utcTimestamp = d.utcTimestamp; + cd.mode = currentMode(); logCallActivity(cd, true); } } @@ -10025,7 +10049,7 @@ void MainWindow::processCompoundActivity() { bits == Varicode::JS8Call || ((bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst) || ((bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) || - ((bits & Varicode::JS8CallFlag) == Varicode::JS8CallFlag) + ((bits & Varicode::JS8CallData) == Varicode::JS8CallData) ); if (!validBits) { qDebug() << "-> buffer.cmd bits is invalid...skip"; @@ -10265,6 +10289,7 @@ void MainWindow::processCommandActivity() { cd.ackTimestamp = d.text.contains(": ACK") || toMe ? d.utcTimestamp : QDateTime{}; cd.utcTimestamp = d.utcTimestamp; cd.tdrift = d.tdrift; + cd.mode = currentMode(); logCallActivity(cd, true); logHeardGraph(d.from, d.to); @@ -10282,6 +10307,7 @@ void MainWindow::processCommandActivity() { cd.snr = d.snr; cd.utcTimestamp = d.utcTimestamp; cd.tdrift = d.tdrift; + cd.mode = currentMode(); m_aprsCallCache.remove(cd.call); m_aprsCallCache.remove(APRSISClient::replaceCallsignSuffixWithSSID(cd.call, Radio::base_callsign(cd.call))); @@ -10555,6 +10581,7 @@ void MainWindow::processCommandActivity() { cd.through = d.from; cd.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); cd.tdrift = d.tdrift; + cd.mode = currentMode(); logCallActivity(cd, false); } @@ -10668,11 +10695,12 @@ void MainWindow::processCommandActivity() { } // PROCESS ACTIVE HEARTBEAT - // if we have auto reply enabled and auto ack enabled and no callsign is selected - else if (d.cmd == " HB" && ui->actionModeAutoreply->isChecked() && m_hbAutoAck && selectedCallsign.isEmpty()){ + // if we have hb mode enabled and auto reply enabled and auto ack enabled and no callsign is selected update: if we're in HB mode, doesn't matter if a callsign is selected. + else if (d.cmd == " HB" && ui->actionModeJS8HB->isChecked() && ui->actionModeAutoreply->isChecked() && ui->actionHeartbeatAcknowledgements->isChecked() && selectedCallsign.isEmpty()){ // check to make sure this callsign isn't blacklisted if(m_config.hb_blacklist().contains(d.from) || m_config.hb_blacklist().contains(Radio::base_callsign(d.from))){ + qDebug() << "hb blacklist blocking" << d.from; continue; } @@ -10910,11 +10938,13 @@ void MainWindow::processCommandActivity() { continue; } +#if 0 // TODO: jsherer - HB issue here // do not queue a reply if it's a HB and HB is not active - if((!ui->hbMacroButton->isChecked() || m_hbInterval <= 0) && d.cmd.contains("HB")){ - continue; - } + // if((!ui->hbMacroButton->isChecked() || m_hbInterval <= 0) && d.cmd.contains("HB")){ + // continue; + // } +#endif // do not queue for reply if there's text in the window if(!ui->extFreeTextMsgEdit->toPlainText().isEmpty()){ @@ -10982,6 +11012,7 @@ void MainWindow::refreshInboxCounts(){ cd.utcTimestamp = QDateTime::fromString(utc, "yyyy-MM-dd hh:mm:ss"); cd.utcTimestamp.setUtcOffset(0); cd.ackTimestamp = cd.utcTimestamp; + cd.mode = currentMode(); logCallActivity(cd, false); } } @@ -11363,6 +11394,8 @@ void MainWindow::displayBandActivity() { QString age; int snr = 0; float tdrift = 0; + QString mode; + int activityAging = m_config.activity_aging(); // hide items that shouldn't appear @@ -11377,9 +11410,10 @@ void MainWindow::displayBandActivity() { } // hide heartbeat items - if (m_hbHidden){ + if (!ui->actionShow_Band_Heartbeats_and_ACKs->isChecked()){ // hide heartbeats and acks if we have heartbeating hidden if(item.text.contains(" HB ") || item.text.contains(" ACK ")){ + // TODO: if text contains MSG ID and previous frame was hidden, hide this one too shouldDisplay = false; } } @@ -11412,6 +11446,7 @@ void MainWindow::displayBandActivity() { age = since(item.utcTimestamp); timestamp = item.utcTimestamp; tdrift = item.tdrift; + mode = item.mode; } auto joined = Varicode::rstrip(text.join("")); @@ -11441,6 +11476,12 @@ void MainWindow::displayBandActivity() { tdriftItem->setData(Qt::UserRole, QVariant(tdrift)); ui->tableWidgetRXAll->setItem(row, col++, tdriftItem); + auto modeItem = new QTableWidgetItem(mode.left(1).replace("H", "N")); + modeItem->setToolTip(mode); + modeItem->setData(Qt::UserRole, QVariant(mode)); + modeItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidgetRXAll->setItem(row, col++, modeItem); + // align right if eliding... int colWidth = ui->tableWidgetRXAll->columnWidth(3); auto textItem = new QTableWidgetItem(joined); @@ -11531,12 +11572,14 @@ void MainWindow::displayBandActivity() { ui->tableWidgetRXAll->setColumnHidden(1, !showColumn("band", "timestamp")); ui->tableWidgetRXAll->setColumnHidden(2, !showColumn("band", "snr")); ui->tableWidgetRXAll->setColumnHidden(3, !showColumn("band", "tdrift", false)); + ui->tableWidgetRXAll->setColumnHidden(4, !showColumn("band", "mode", false)); // Resize the table columns ui->tableWidgetRXAll->resizeColumnToContents(0); ui->tableWidgetRXAll->resizeColumnToContents(1); ui->tableWidgetRXAll->resizeColumnToContents(2); ui->tableWidgetRXAll->resizeColumnToContents(3); + ui->tableWidgetRXAll->resizeColumnToContents(4); // Reset the scroll position ui->tableWidgetRXAll->verticalScrollBar()->setValue(currentScrollPos); @@ -11725,6 +11768,12 @@ void MainWindow::displayCallActivity() { ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1 ms").arg((int)(1000*d.tdrift)))); + auto modeItem = new QTableWidgetItem(d.mode.left(1).replace("H", "N")); + modeItem->setToolTip(d.mode); + modeItem->setData(Qt::UserRole, QVariant(d.mode)); + modeItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidgetCalls->setItem(row, col++, modeItem); + auto gridItem = new QTableWidgetItem(QString("%1").arg(d.grid.trimmed().left(4))); gridItem->setToolTip(d.grid.trimmed()); ui->tableWidgetCalls->setItem(row, col++, gridItem); @@ -11782,6 +11831,7 @@ void MainWindow::displayCallActivity() { ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // snr ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // freq ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // tdrift + ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // mode ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // grid ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // distance ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem("")); // worked before @@ -11851,11 +11901,12 @@ void MainWindow::displayCallActivity() { ui->tableWidgetCalls->setColumnHidden(3, !showColumn("call", "snr")); ui->tableWidgetCalls->setColumnHidden(4, !showColumn("call", "offset")); ui->tableWidgetCalls->setColumnHidden(5, !showColumn("call", "tdrift", false)); - ui->tableWidgetCalls->setColumnHidden(6, !showColumn("call", "grid", false)); - ui->tableWidgetCalls->setColumnHidden(7, !showColumn("call", "distance", false)); - ui->tableWidgetCalls->setColumnHidden(8, !showColumn("call", "log")); - ui->tableWidgetCalls->setColumnHidden(9, !showColumn("call", "logName")); - ui->tableWidgetCalls->setColumnHidden(10, !showColumn("call", "logComment")); + ui->tableWidgetCalls->setColumnHidden(6, !showColumn("call", "mode", false)); + ui->tableWidgetCalls->setColumnHidden(7, !showColumn("call", "grid", false)); + ui->tableWidgetCalls->setColumnHidden(8, !showColumn("call", "distance", false)); + ui->tableWidgetCalls->setColumnHidden(9, !showColumn("call", "log")); + ui->tableWidgetCalls->setColumnHidden(10, !showColumn("call", "logName")); + ui->tableWidgetCalls->setColumnHidden(11, !showColumn("call", "logComment")); // Resize the table columns ui->tableWidgetCalls->resizeColumnToContents(0); @@ -11868,6 +11919,7 @@ void MainWindow::displayCallActivity() { ui->tableWidgetCalls->resizeColumnToContents(7); ui->tableWidgetCalls->resizeColumnToContents(8); ui->tableWidgetCalls->resizeColumnToContents(9); + ui->tableWidgetCalls->resizeColumnToContents(10); // Reset the scroll position ui->tableWidgetCalls->verticalScrollBar()->setValue(currentScrollPos); @@ -11910,6 +11962,7 @@ void MainWindow::emitTones(){ // emit tone numbers to network QVariantList t; for(int i = 0; i < JS8_NUM_SYMBOLS; i++){ + //qDebug() << "tone" << i << "=" << itone[i]; t.append(QVariant((int)itone[i])); } @@ -12768,7 +12821,7 @@ void MainWindow::write_transmit_entry (QString const& file_name) QTextStream out(&f); auto time = DriftingDateTime::currentDateTimeUtc (); time = time.addSecs (-(time.time ().second () % m_TRperiod)); - auto dt = DecodedText(m_currentMessage, m_currentMessageBits); + auto dt = DecodedText(m_currentMessage, m_currentMessageBits, m_nSubMode); out << time.toString("yyyy-MM-dd hh:mm:ss") << " Transmitting " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " << "JS8" diff --git a/mainwindow.h b/mainwindow.h index 1ae4045..f2f040b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -177,6 +177,7 @@ private slots: void on_tx4_editingFinished(); void on_tx5_currentTextChanged (QString const&); void on_tx6_editingFinished(); + void on_menuModeJS8_aboutToShow(); void on_menuControl_aboutToShow(); void on_actionCheck_for_Updates_triggered(); void on_actionEnable_Spotting_toggled(bool checked); @@ -259,10 +260,15 @@ private slots: void on_dxCallEntry_returnPressed (); void on_genStdMsgsPushButton_clicked(); void on_logQSOButton_clicked(); - void on_actionModeJS8_triggered(); + void on_actionModeJS8HB_toggled(bool checked); + void on_actionModeJS8Normal_triggered(); + void on_actionModeJS8Fast_triggered(); + void on_actionModeJS8Turbo_triggered(); + void on_actionModeJS8Ultra_triggered(); + void on_actionHeartbeatAcknowledgements_toggled(bool checked); void on_actionModeAutoreply_toggled(bool checked); - void prepareAutoreplyMode(bool enabled); - void on_actionFT8_triggered(); + void prepareHeartbeatMode(bool enabled); + void on_actionJS8_triggered(); void on_TxFreqSpinBox_valueChanged(int arg1); void on_actionSave_decoded_triggered(); void on_actionQuickDecode_toggled (bool); @@ -409,7 +415,6 @@ private slots: void on_pbTxNext_clicked(bool b); void on_actionEcho_Graph_triggered(); void on_actionFast_Graph_triggered(); - void fast_decode_done(); void on_actionMeasure_reference_spectrum_triggered(); void on_actionErase_reference_spectrum_triggered(); void on_actionMeasure_phase_response_triggered(); @@ -729,6 +734,7 @@ private: int snr; int bits; float tdrift; + QString mode; }; struct CommandDetail @@ -746,6 +752,7 @@ private: QString text; QString extra; float tdrift; + QString mode; QString relayPath; }; @@ -763,6 +770,7 @@ private: int snr; bool shouldDisplay; float tdrift; + QString mode; }; struct MessageBuffer { @@ -872,8 +880,6 @@ private: QQueue m_foxQSOinProgress; //QSOs in progress: Fox has sent a report QQueue m_foxRateQueue; - bool m_hbAutoAck; - bool m_hbHidden; int m_hbInterval; int m_cqInterval; bool m_hbPaused; @@ -942,6 +948,7 @@ private: void pskLogReport(QString mode, int offset, int snr, QString callsign, QString grid); void aprsLogReport(int offset, int snr, QString callsign, QString grid); Radio::Frequency dialFrequency(); + QString currentMode(); void updateCurrentBand(); void displayDialFrequency (); void transmitDisplay (bool); diff --git a/mainwindow.ui b/mainwindow.ui index e0d60fb..fa25197 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -694,7 +694,7 @@ QPushButton:checked { - + true @@ -749,7 +749,7 @@ QPushButton:checked { - + true @@ -804,8 +804,8 @@ QPushButton:checked { - - + + true @@ -829,19 +829,20 @@ QPushButton:checked { - 9 + 75 + true - <html><head/><body><p><br/></p></body></html> + <html><head/><body><p>Set the JS8 mode settings</p></body></html> QPushButton { -background-color:lightgray; -padding:0.25em 0.25em; font-weight:normal; +padding:0.25em 0.25em; font-weight:bold; border-style:solid; border-width:0px; border-radius:2px; +background-color:#6699ff; } QPushButton:checked { @@ -849,7 +850,7 @@ background-color:#6699ff; } - ... + JS8 true @@ -888,7 +889,7 @@ background-color:#6699ff; - <html><head/><body><p>Transmit a tuning tone</p></body></html> + <html><head/><body><p>Spot to reporting networks</p></body></html> QPushButton { @@ -1079,6 +1080,11 @@ background-color:#6699ff; Time Delta + + + Speed + + Message(s) @@ -1268,6 +1274,11 @@ QTextEdit[transmitting="true"] { Time Delta + + + Speed + + Grid @@ -1331,24 +1342,8 @@ QTextEdit[transmitting="true"] { 0 - - - - - 75 - 30 - - - - <html><head/><body><p>Stop transmitting</p></body></html> - - - Halt - - - - - + + 0 @@ -1356,7 +1351,7 @@ QTextEdit[transmitting="true"] { - <html><head/><body><p>Send a CQ message</p></body></html> + <html><head/><body><p align="justify">Send a Heartbeat message</p></body></html> true @@ -1368,32 +1363,13 @@ QTextEdit[transmitting="true"] { } - CQ + HB true - - false - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 10 - - - - @@ -1429,8 +1405,8 @@ color:#222; - - + + 0 @@ -1438,10 +1414,25 @@ color:#222; - <html><head/><body><p>Send a directed message to another station</p></body></html> + <html><head/><body><p>Send a CQ message</p></body></html> + + + true + + + QPushButton:checked { + font-weight:bold; + color:black; +} - Directed + CQ + + + true + + + false @@ -1461,68 +1452,40 @@ color:#222; - - - + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + - 0 - 30 + 20 + 10 - - <html><head/><body><p>Send a saved message</p></body></html> - - - Saved - - - - - - - - 0 - 30 - - - - <html><head/><body><p>Reply to a CQ</p></body></html> - - - REPLY - - - - - - - - 0 - 30 - - - - <html><head/><body><p align="justify">Send a Heartbeat message</p></body></html> - - - true - - - QPushButton:checked { - font-weight:bold; - color:black; -} - - - HB - - - true - - + - + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 10 + + + + + + Qt::Horizontal @@ -1553,6 +1516,70 @@ color:#222; + + + + + 0 + 30 + + + + <html><head/><body><p>Reply to a CQ</p></body></html> + + + REPLY + + + + + + + + 75 + 30 + + + + <html><head/><body><p>Stop transmitting</p></body></html> + + + Halt + + + + + + + + 0 + 30 + + + + <html><head/><body><p>Send a saved message</p></body></html> + + + Saved + + + + + + + + 0 + 30 + + + + <html><head/><body><p>Send a directed message to another station</p></body></html> + + + Directed + + + @@ -1575,22 +1602,6 @@ color:#222; - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 10 - - - - @@ -4798,9 +4809,14 @@ list. The list can be maintained in Settings (F2). Mode - + + + + + + @@ -5725,23 +5741,15 @@ list. The list can be maintained in Settings (F2). Ctrl+Alt+A - + true true - - false - - JS8 - - - - - AUTO + JS8 (Normal, 15s, 50Hz, ~16 WPM) @@ -5749,23 +5757,47 @@ list. The list can be maintained in Settings (F2). true - Enable Networking && Autoreply + Enable Autoreply (AUTO) - + true - Messaging + JS8 (Fast, 10s, 80Hz, ~24 WPM) - + true - Heartbeat + JS8 (Turbo, 6s, 160Hz, ~40 WPM) + + + + + true + + + JS8 (Ultra, 4s, 250Hz, ~60WPM) + + + + + true + + + Enable Heartbeat Networking (HB) + + + + + true + + + Enable Heartbeat Acknowledgments (ACK) diff --git a/plotter.cpp b/plotter.cpp index 8309a04..de45141 100644 --- a/plotter.cpp +++ b/plotter.cpp @@ -7,6 +7,7 @@ #include #include "DriftingDateTime.h" +#include "varicode.h" #define MAX_SCREENSIZE 2048 @@ -411,7 +412,19 @@ void CPlotter::DrawOverlay() //DrawOverlay() } } - float bw=7.0*(double)RX_SAMPLE_RATE/(double)JS8_SYMBOL_SAMPLES; //JS8 + float bw = 0; + if(m_nSubMode == Varicode::JS8CallNormal){ + bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8A_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallFast){ + bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8B_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallTurbo){ + bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8C_SYMBOL_SAMPLES; + } + else if(m_nSubMode == Varicode::JS8CallUltra){ + bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8D_SYMBOL_SAMPLES; + } painter0.setPen(penGreen); diff --git a/varicode.cpp b/varicode.cpp index 76202e1..2e76048 100644 --- a/varicode.cpp +++ b/varicode.cpp @@ -499,7 +499,7 @@ QList>> Varicode::huffEncode(const QMap const &huff, QVector const& bitvec){ QString text; - QString bits = Varicode::bitsToStr(bitvec); //.mid(0, bitvec.length()-pad); + QString bits = Varicode::bitsToStr(bitvec); // TODO: jsherer - this is naive... while(bits.length() > 0){ @@ -1570,7 +1570,7 @@ QStringList Varicode::unpackDirectedMessage(const QString &text, quint8 *pType){ return unpacked; } -QString packHuffMessage(const QString &input, int *n){ +QString packHuffMessage(const QString &input, const QVector prefix, int *n){ static const int frameSize = 72; QString frame; @@ -1580,7 +1580,10 @@ QString packHuffMessage(const QString &input, int *n){ // but, since none of the other frame types start with a 0, we can drop the two zeros and use // them for encoding the first two bits of the actuall data sent. boom! // The second bit is a flag that indicates this is not compressed frame (huffman coding) - QVector frameBits = {true, false}; + QVector frameBits; + if(!prefix.isEmpty()){ + frameBits << prefix; + } int i = 0; @@ -1628,7 +1631,7 @@ QString packHuffMessage(const QString &input, int *n){ return frame; } -QString packCompressedMessage(const QString &input, int *n){ +QString packCompressedMessage(const QString &input, QVector prefix, int *n){ static const int frameSize = 72; QString frame; @@ -1638,7 +1641,11 @@ QString packCompressedMessage(const QString &input, int *n){ // but, since none of the other frame types start with a 1, we can drop the two zeros and use // them for encoding the first two bits of the actuall data sent. boom! // The second bit is a flag that indicates this is a compressed frame (dense coding) - QVector frameBits = {true, true}; + // For fast modes, we don't use the prefix since it is indicated by the JS8CallData flag. + QVector frameBits; + if(!prefix.isEmpty()){ + frameBits << prefix; + } int i = 0; foreach(auto pair, JSC::compress(input)){ @@ -1675,14 +1682,15 @@ QString packCompressedMessage(const QString &input, int *n){ return frame; } +// pack data message using 70 bits available flagged as data by the first 2 bits QString Varicode::packDataMessage(const QString &input, int *n){ QString huffFrame; int huffChars = 0; - huffFrame = packHuffMessage(input, &huffChars); + huffFrame = packHuffMessage(input, {true, false}, &huffChars); QString compressedFrame; int compressedChars = 0; - compressedFrame = packCompressedMessage(input, &compressedChars); + compressedFrame = packCompressedMessage(input, {true, true}, &compressedChars); if(huffChars > compressedChars){ if(n) *n = huffChars; @@ -1693,7 +1701,7 @@ QString Varicode::packDataMessage(const QString &input, int *n){ } } - +// unpack data message using 70 bits available flagged as data by the first 2 bits QString Varicode::unpackDataMessage(const QString &text){ QString unpacked; @@ -1713,8 +1721,9 @@ QString Varicode::unpackDataMessage(const QString &text){ bits = bits.mid(1); bool compressed = bits.at(0); - int n = bits.lastIndexOf(0); + + // trim off the pad bits bits = bits.mid(1, n-1); if(compressed){ @@ -1728,14 +1737,82 @@ QString Varicode::unpackDataMessage(const QString &text){ return unpacked; } +#define JS8_FAST_DATA_CAN_USE_HUFF 0 + +// pack data message using the full 72 bits available (with the data flag in the i3bit header) +QString Varicode::packFastDataMessage(const QString &input, int *n){ +#if JS8_FAST_DATA_CAN_USE_HUFF + QString huffFrame; + int huffChars = 0; + huffFrame = packHuffMessage(input, {false}, &huffChars); + + QString compressedFrame; + int compressedChars = 0; + compressedFrame = packCompressedMessage(input, {true}, &compressedChars); + + if(huffChars > compressedChars){ + if(n) *n = huffChars; + return huffFrame; + } else { + if(n) *n = compressedChars; + return compressedFrame; + } +#else + QString compressedFrame; + int compressedChars = 0; + compressedFrame = packCompressedMessage(input, {}, &compressedChars); + + if(n) *n = compressedChars; + return compressedFrame; +#endif +} + +// unpack data message using the full 72 bits available (with the data flag in the i3bit header) +QString Varicode::unpackFastDataMessage(const QString &text){ + QString unpacked; + + if(text.length() < 12 || text.contains(" ")){ + return unpacked; + } + + quint8 rem = 0; + quint64 value = Varicode::unpack72bits(text, &rem); + auto bits = Varicode::intToBits(value, 64) + Varicode::intToBits(rem, 8); + +#if JS8_FAST_DATA_CAN_USE_HUFF + bool compressed = bits.at(0); + int n = bits.lastIndexOf(0); + + // trim off the pad bits + bits = bits.mid(1, n-1); + + if(compressed){ + // partial word (s,c)-dense coding with code tables + unpacked = JSC::decompress(bits); + } else { + // huff decode the bits (without escapes) + unpacked = Varicode::huffDecode(Varicode::defaultHuffTable(), bits); + } +#else + int n = bits.lastIndexOf(0); + + // trim off the pad bits + bits = bits.mid(0, n); + + // partial word (s,c)-dense coding with code tables + unpacked = JSC::decompress(bits); +#endif + + return unpacked; +} + // TODO: remove the dependence on providing all this data? -QList> Varicode::buildMessageFrames( - QString const& mycall, +QList> Varicode::buildMessageFrames(QString const& mycall, QString const& mygrid, QString const& selectedCall, QString const& text, - bool forceIdentify -){ + bool forceIdentify, + int submode){ #define ALLOW_SEND_COMPOUND 1 #define ALLOW_SEND_COMPOUND_DIRECTED 1 #define AUTO_PREPEND_DIRECTED 1 @@ -1836,7 +1913,15 @@ QList> Varicode::buildMessageFrames( } #endif int m = 0; - QString datFrame = Varicode::packDataMessage(line, &m); + bool fastDataFrame = false; + QString datFrame; + if(submode == Varicode::JS8CallNormal){ + datFrame = Varicode::packDataMessage(line, &m); + fastDataFrame = false; + } else { + datFrame = Varicode::packFastDataMessage(line, &m); + fastDataFrame = true; + } // if this parses to a standard FT8 free text message // but it can be parsed as a directed message, then we @@ -1951,7 +2036,8 @@ QList> Varicode::buildMessageFrames( } if(useDat){ - lineFrames.append({ frame, Varicode::JS8Call }); + // use the standard data frame + lineFrames.append({ frame, fastDataFrame ? Varicode::JS8CallData : Varicode::JS8Call }); line = line.mid(m); } } @@ -1972,13 +2058,15 @@ BuildMessageFramesThread::BuildMessageFramesThread(const QString &mycall, const QString &selectedCall, const QString &text, bool forceIdentify, + int submode, QObject *parent): QThread(parent), m_mycall{mycall}, m_mygrid{mygrid}, m_selectedCall{selectedCall}, m_text{text}, - m_forceIdentify{forceIdentify} + m_forceIdentify{forceIdentify}, + m_submode{submode} { } @@ -1988,15 +2076,16 @@ void BuildMessageFramesThread::run(){ m_mygrid, m_selectedCall, m_text, - m_forceIdentify + m_forceIdentify, + m_submode ); // TODO: jsherer - we wouldn't normally use decodedtext.h here... but it's useful for computing the actual frames transmitted. QStringList textList; qDebug() << "frames:"; foreach(auto frame, results){ - auto dt = DecodedText(frame.first, frame.second); - qDebug() << "->" << frame << dt.message() << Varicode::frameTypeString(dt.frameType()); + auto dt = DecodedText(frame.first, frame.second, m_submode); + qDebug() << "->" << frame << dt.message() << Varicode::frameTypeString(dt.frameType()) << m_submode; textList.append(dt.message()); } diff --git a/varicode.h b/varicode.h index 685db4a..238db99 100644 --- a/varicode.h +++ b/varicode.h @@ -16,12 +16,20 @@ class Varicode { public: + // submode types + enum SubmodeType { + JS8CallNormal = 0, + JS8CallFast = 1, + JS8CallTurbo = 2, + JS8CallUltra = 3 + }; + // frame type transmitted via itype and decoded by the ft8 decoded enum TransmissionType { JS8Call = 0, // [000] <- any other frame of the message JS8CallFirst = 1, // [001] <- the first frame of a message JS8CallLast = 2, // [010] <- the last frame of a message - JS8CallFlag = 4, // [100] <- flagged frame (no frame type header) + JS8CallData = 4, // [100] <- flagged frame (no frame type header) }; /* @@ -156,11 +164,15 @@ public: static QString packDataMessage(QString const& text, int *n); static QString unpackDataMessage(QString const& text); + static QString packFastDataMessage(QString const& text, int *n); + static QString unpackFastDataMessage(QString const& text); + static QList> buildMessageFrames(QString const& mycall, QString const& mygrid, QString const& selectedCall, QString const& text, - bool forceIdentify); + bool forceIdentify, + int submode); }; @@ -173,6 +185,7 @@ public: QString const& selectedCall, QString const& text, bool forceIdentify, + int submode, QObject *parent=nullptr); void run() override; signals: @@ -184,6 +197,7 @@ private: QString m_selectedCall; QString m_text; bool m_forceIdentify; + int m_submode; }; #endif // VARICODE_H

WeMa-aq87k{YduDo>f2%SFVx~ow>YMxqp7nY(Ta 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ⅇ*1yoYws$tF(L@Lp*0tvwV1XWTMNamj%#r$iBI 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