1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-17 13:40:35 +00:00
Commit Graph

346 Commits

Author SHA1 Message Date
Damian Miralles
1b7d4edf51 bds_b31: Getting new changes from upstream 2019-02-05 17:25:16 -06:00
Carles Fernandez
708b288e61
Clean CMake scripts 2019-02-04 22:44:45 +01:00
Carles Fernandez
8ae72fe458
Update to modern CMake usage 2019-02-03 19:24:44 +01:00
Marc Majoral
ec80df40dc minor corrections 2019-01-31 15:36:11 +01:00
Marc Majoral
bb0fae98c7 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2019-01-30 10:28:52 +01:00
Carles Fernandez
c561d7e799
Applying code formatting rules 2019-01-28 02:29:43 +01:00
Carles Fernandez
fa19b2e6a4
Fix compilation in Mac OS and crosscompilation.
Formatting rules applied
2019-01-28 01:08:57 +01:00
Damian Miralles
e78ba653e6 bds b3i: Adding code to process BeiDou B3I signals
Adds code to perform acq and trk in BeiDou B3I signals. Stages of
telemetry decoding, observables computation and pvt use existing
code on the platform. Some further testing is required
2019-01-25 15:43:00 -06:00
Marc Majoral
f127729eb0 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2019-01-25 18:02:07 +01:00
Damian Miralles
42b506d0bb bds b1i: Merging latest changes from upstream/next 2018-12-18 15:55:36 -06:00
Marc Majoral
ae61646270 Solved two bugs:
- a minor bug in the E5A fpga acquisition adapter module: a config parameter was not correctly read.
- a bug in the tracking fpga multicorrelator module: if pilot tracking was enabled then the results of the pilot correlator were not correctly read when using the multicorrelator 3-1 HW Accelerator in the FPGA (used for GPS L5 and Galileo E5A).
2018-12-11 14:44:42 +01:00
Carles Fernandez
d920aa4d92
Apply fixes by clang-tidy 2018-12-11 01:56:25 +01:00
Carles Fernandez
3dce8934fd
Apply fixes by clang-tidy 2018-12-10 19:05:12 +01:00
Carles Fernandez
a7b780fddc
Apply fixes by clang-tidy 2018-12-10 18:39:14 +01:00
Carles Fernandez
d6f3cd6dd3
Revert "Apply fixes by clang-tidy"
This reverts commit ba23d698bc.
2018-12-10 18:20:45 +01:00
Carles Fernandez
ba23d698bc Apply fixes by clang-tidy 2018-12-10 15:15:35 +01:00
Carles Fernandez
5b79f8ac50 Merge branch 'next' into smart_acq_resampler 2018-12-10 14:24:42 +01:00
Carles Fernandez
5f79053d65
Sort includes automatically with clang-format
Order:
1.- Main header
2.- Local headers
3.- Third-party library headers
4.- System headers

each category sorted lexicographically
2018-12-09 22:00:09 +01:00
Carles Fernandez
17260bbcea
Miscelaneous code improvements by clang-tidy 2018-12-08 18:49:31 +01:00
Javier Arribas
63b19692e7 Completing the smart acquisition resampler 2018-12-05 16:50:32 +01:00
Marc Majoral
e436aadfd9 minor modifications to the Galileo E5a and GPS L5 acquisition adapters. Now the acquisition opens and closes the acquisition HW device every time an acquisition is done, to prevent the acquisition interrupt from interrupting all the acquisition processes at the same time. 2018-12-05 11:23:30 +01:00
Carles Fernandez
7261bec2ad
Miscelaneous code improvements 2018-12-04 13:20:49 +01:00
Carles Fernandez
b2659aa076
Merge branch 'next' into smart_acq_resampler 2018-12-04 00:05:04 +01:00
Carles Fernandez
327fec627c clang-tidy: apply readability-else-after-return fix (see https://clang.llvm.org/extra/clang-tidy/checks/readability-else-after-return.html) 2018-12-03 22:08:19 +01:00
Javier Arribas
4b80451630 Adding initial functional changes for the smart acquisition resampler 2018-12-03 17:58:18 +01:00
Carles Fernandez
0d408a6024 clang-tidy: apply modernize-use-auto fix (see https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-auto.html) 2018-12-03 16:25:11 +01:00
Carles Fernandez
8eec75c8ae clang-tidy: apply readability-string-compare fix (see https://clang.llvm.org/extra/clang-tidy/checks/readability-string-compare.html) 2018-12-03 12:52:17 +01:00
Carles Fernandez
3bb47ff755
Improve const correctness, fix string comparisons 2018-12-02 05:29:11 +01:00
Marc Majoral
bd90563925 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-11-30 11:10:38 +01:00
Marc Majoral
f48a91c413 Galileo E5a is now debugged and working. Acquisition is using interrupts again. Each acquisition process opens and closes the acquisition device when an acquisition is done instead of having the device opened all the time. In this way the acquisition interrupt should only be received by the process that is using the interrupt at that time. 2018-11-30 11:07:01 +01:00
Damian Miralles
8db3f21070 bds b11: Get latest changes and add bds functions in rtk module
Merge branch 'next' into bds_b1i. Also fixes multiple bugs with the
addition of bds b1i signals into code. Major changes where fixed and
code to support RINEX and RTCM is needed
2018-11-29 09:56:54 -06:00
Carles Fernandez
87d1413447
Make cmakelint happier 2018-11-24 18:40:34 +01:00
Carles Fernandez
b0ba246934
Apply some style rules to CMake scripts 2018-11-22 00:35:21 +01:00
Carles Fernandez
e94b2f8990
Remove blanks 2018-11-18 21:24:54 +01:00
Marc Majoral
7023e879db adapted the software to a bit size for the local copy of the FFT of the GNSS code to 10 bits per sample.
worked on the observables tests.
2018-11-13 19:51:12 +01:00
Marc Majoral
37c7576e12 removed some unused test functions.
updated FPGA observables test
2018-11-13 17:22:08 +01:00
Marc Majoral
f150fe02c7 solved a bug which caused the tracking pull-in test not to work correctly with Galileo E1 when using the downsampling filter in the acquisition. 2018-11-09 20:50:32 +01:00
Marc Majoral
1c80eaa50c corrected a bug in the fpga tracking pull-in test where a parameter was rewritten with an incorrect value
modified the fpga tracking pull-in test to take into account the downsampling factor in the L1/E1 queue
2018-11-07 20:21:05 +01:00
Marc Majoral
0d9b08df70 updated the tracking pull-in test for the FPGA. To be tested. 2018-11-05 19:50:40 +01:00
Marc Majoral
41faa311f7 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-11-05 18:29:35 +01:00
Marc Majoral
392f92839f updated L5 and E5a adapters for debugging
corrected minor issues
2018-11-05 17:01:29 +01:00
Marc Majoral
b5409f0860 updated the SW to run the new Acquisition HW accelerator, which compensates the scaling factors of the FFT and the IFFT, and computes the test statistics out of the peak value and the second peak value resulting from the correlation performed by the acquisition process. Updated the GPS L1 and Galileo E1 acquisition adapters. 2018-10-31 18:48:08 +01:00
Carles Fernandez
29b0212c40
Uniformize Acqusition dump basename to ./acquisition_XXX.mat 2018-10-30 21:09:34 +01:00
Javier
5b3eb12998 Implementation of new receiver telecommands standby and coldstart 2018-10-28 11:09:01 +01:00
Damian Miralles
e22f8e57c1 beidou b1i: renaming objects of nav decoding 2018-10-22 15:12:50 -05:00
Damian Miralles
8c16d945f8 beidou b1i: Merging new changes and adding bug fixes to code 2018-10-22 14:16:38 -05:00
Marc Majoral
8e6370e133 changed the downsampling factor of the L1 and E1 acquisition from /2 to /4 2018-10-17 15:45:08 +02:00
Marc Majoral
8710ba1cf7 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-10-08 19:47:39 +02:00
Carles Fernandez
78c0b76cb9
Avoid use of GLOB for source and header files 2018-10-04 22:35:44 +02:00
Marc Majoral
2826dd21d3 use of the :2 decimator in the GPS L1/Galileo E1 frequency band
added methods to the L1 and E1 FPGA acquisition classes for the unit tests to be able to control the doppler sweep from the SW instead of the HW. In this way we can produce more detailed results.
2018-10-04 17:49:09 +02:00
Marc Majoral
f333c05305 saving temporary changes before merging with usptream next branch
added functions that allow the tests to read the scaling factor used by the FFT and the IFFT during acquisition
2018-09-18 11:36:12 +02:00
Marc Majoral
5b9b63cc77 implemented tracking pull-in tests for the FPGA
solved a bug in which the SW was using the doppler shift index reported by the HW acquisition accelerator plus one, instead of using the doppler shift index as such.
2018-09-12 16:02:23 +02:00
Marc Majoral
57c358d1b1 removed unnecessary printed messages 2018-08-29 18:23:34 +02:00
Marc Majoral
2b15343a6a started tracking pull-in test implementation for the FPGA 2018-08-29 18:20:41 +02:00
Sergi Segura
fc98fa6afe cleaning code for gsoc 2018-08-12 23:58:16 +02:00
Carles Fernandez
05a1806c8f
Merge branch 'fpga' of https://github.com/mmajoral/gnss-sdr into merge-marc 2018-08-11 12:56:52 +02:00
Javier Arribas
2517e7bb31 Replacing software sample counter with hardware sample counter if FPGA is enabled. Fix a compilation bug when ENABLE_FPGA is selected 2018-08-10 11:53:40 +02:00
Marc Majoral
557d25d3ea Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-08-08 18:23:38 +02:00
Carles Fernandez
18173bcbff
Fix warning 2018-08-08 18:20:30 +02:00
Carles Fernandez
69803b55da
Remove stream_to_vector in generic acquisition block 2018-08-08 15:02:29 +02:00
Marc Majoral
ee132f445f Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-08-08 14:25:12 +02:00
Javier Arribas
37834c2029 GPS acquisition adapter fix to be coherent with the stream to vector size of acquisition engine 2018-08-07 20:17:54 +02:00
Marc Majoral
b1a7031e52 solved some bugs in GPS L5
removed check for sign in multicorrelator results: this is not necessary anymore
did some other minor maintenances
2018-08-07 18:56:54 +02:00
Marc Majoral
daedfc3e01 adapted the FPGA tracking class according to the latest changes in the next branch 2018-08-02 17:32:59 +02:00
Marc Majoral
7e246dea29 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga 2018-08-01 18:59:40 +02:00
Marc Majoral
bb33faea21 improved existing code
started the GPS L2 FPGA class implementation (not finished yet)
implemented the GPS L5 FPGA class (not tested yet)
implemented the Galileo E5 FPGA class (not tested yet)

The code is still "dirty": it is yet to be cleaned of debug comments/code and any possible redundant code and not used variables.
2018-08-01 15:55:40 +02:00
Javier Arribas
f9e4bdfa59 Fix stream_to_vector incoherence in pcps acquisition and add support for GPS L2C, L5I, Galileo E1 and E5a in tracking pull-in test 2018-07-19 16:26:51 +02:00
Carles Fernandez
ee90b739b5
Add coherent integration for GPS L2C, L5 and Galileo E1 2018-07-15 04:12:20 +02:00
Carles Fernandez
994a4b32d8
Fix Glonass acquisition test 2018-07-13 15:16:48 +02:00
Carles Fernandez
0352108a79
Accept non-integer number of samples per code period 2018-07-13 14:23:14 +02:00
Javier Arribas
b779f5cb3d Fix incoherence between the number of samples per code in GPS L2 acquisition 2018-07-13 10:32:24 +02:00
Carles Fernandez
9881857fa5 Fix Acquisition for L2C and E1B 2018-07-11 14:51:34 +02:00
Carles Fernandez
0bc894a91f
Header fix 2018-07-10 18:41:24 +02:00
Carles Fernandez
6b67037fed Add first-to-second peak statistic 2018-07-09 17:56:47 +02:00
Carles Fernandez
bad8b25ce7 Fix warning of unused parameter 2018-07-05 21:30:33 +02:00
Carles Fernandez
e07578bdb4 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next 2018-07-04 18:12:00 +02:00
Javier Arribas
adcc04c3b6 Fix GPS L1 CA fine Doppler acquisition implementation and migrate the configuration interface 2018-07-04 16:56:47 +02:00
Carles Fernandez
3f0a7ef4fa Extend acquisition performance test to other implementations. set_state(int state) is now amandatory member for acquisition adapters 2018-07-04 13:05:44 +02:00
Carles Fernandez
895f8dc75a
Expose the blocking_on_standby parameter to the documentation. Useful for unit testing 2018-06-29 13:39:17 +02:00
Carles Fernandez
559a9a7c43
Fix problem caused by hdf5 when saving concurrently
Only one acquisition channel info is stored in dump file if dump is activated. New configuration parameter dump_channel, set to 0 by default.
Name of Matlab variable changed from gird to acq_grid to not overlap Matlab command.
2018-06-24 11:05:58 +02:00
Carles Fernandez
423176de7b Replace acq configuration struct by a class 2018-06-19 12:59:54 +02:00
Sergi Segura
cd149895f0 first evaluation beidou b1I 2018-06-15 04:19:32 +02:00
Carles Fernandez
ebd8b46e51 Remove if parameter from Acquisition and Tracking blocks 2018-06-06 17:25:03 +02:00
Carles Fernandez
424f812790
Fix clang warnings about unused private member 2018-06-03 19:11:16 +02:00
mmajoral
75cbc3fcdd Added Galileo E1 acquisition + tracking classes that use the generic acquisition and tracking classes for the FPGA HW accelerators (still to be tested). Did some minor code cleaning to the GPS files that use the FPGA HW accelerator. 2018-05-22 12:25:14 +02:00
Carles Fernandez
0d60d97c24
Use https instead of http in links when available
Update copyright year in headers
2018-05-13 22:49:11 +02:00
Carles Fernandez
7754fc66a6 Code cleaning 2018-05-09 13:09:26 +02:00
mmajoral
0b9b9f4c39 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga.
Use a generic tracking radio block class for the tracking code that uses the FPGA HW accelerators.
2018-05-09 11:11:12 +02:00
mmajoral
4fa5648aa4 Currently creating a generic tracking class for the FPGA in the same way as it is done in the SW. 2018-05-03 10:38:21 +02:00
Carles Fernandez
0494d9b5a8
Avoid claah between volk and volk_gnsssdr defines 2018-04-30 20:58:53 +02:00
Carles Fernandez
faf27fff22
Apply code formatting 2018-04-30 20:15:00 +02:00
mmajoral
4433c0c6be Minor code cleaning. 2018-04-30 11:59:56 +02:00
mmajoral
512bf3f4cf Created a generic gnuradio block acquisition class for the FPGA. 2018-04-27 20:00:50 +02:00
Javier Arribas
8e59a42ae2 Merge Next with FPGA. Adding software-defined emulation of the sample counter 2018-04-06 17:03:20 +02:00
Carles Fernandez
c9925e07db Initialize missing parameter 2018-04-05 21:04:01 +02:00
Antonio Ramos
e42149c9e5 Add number of doppler bins and doppler step in two step acquisition 2018-04-05 12:42:28 +02:00
Carles Fernandez
97e5d88623 Minor fixes: typos, includes 2018-03-26 15:06:14 +02:00
Damian Miralles
287d38dea2 GLONASS L2 CA Signal Addition
Adds GLONASS L2 C/A signal processing to GNSS-SDR based on previous
work developed for the L1 signal. All code have been added in a single
commit with the idea to illustrate the process of signal addition for
future work
2018-03-24 12:44:26 -06:00
Javier Arribas
7c406bb6eb Merging fpga with next 2018-03-05 11:03:59 +01:00
Carles Fernandez
34f24562cf Apply automated code formatting
Documented at .clang-format
See http://clang.llvm.org/docs/ClangFormat.html and http://clang.llvm.org/docs/ClangFormatStyleOptions.html
2018-03-03 02:03:39 +01:00
Javier Arribas
288dd481e7 Updating FPGA acquisition modules 2018-03-02 12:23:10 +01:00
Carles Fernandez
658e677fc3 Reorder includes: local headers first, then 3rd-party library headers, and finally standard headers 2018-02-26 03:15:53 +01:00
Carles Fernandez
4c408f5239 Fix building in ArchLinux 2018-02-23 17:57:53 +01:00
Carles Fernandez
22654d6c1a Add -doppler_max commandline flag 2018-02-18 18:37:38 +01:00
Antonio Ramos
e8efffc265 Add acquire pilot and data functionality 2018-02-08 11:05:20 +01:00
Antonio Ramos
452dd24c90 Add Gal. E5a Pcps acquisition adapter 2018-02-07 18:36:42 +01:00
Carles Fernandez
413ab8c8cf Rename pcps_acquisition_cc to pcps_acquisition 2018-02-07 08:43:44 +01:00
Antonio Ramos
25634963cc Remove pcps_acq_sc
Integrate cshort into pcps_acq_cc
2018-02-06 16:55:09 +01:00
Carles Fernandez
dfe8dbbea4 Remove unrequired include and other minor fixes 2018-01-29 19:22:49 +01:00
Carles Fernandez
5c78778a93 Add header 2018-01-24 18:32:11 +01:00
Carles Fernandez
b301ed19c6 Merge remote-tracking branch 'upstream/next' into glonass 2018-01-24 00:52:09 +01:00
Carles Fernandez
1b5a3b6fa4 Apply coding style 2018-01-17 17:55:46 +01:00
Javier Arribas
c463456924 Adding pilot signal acquisition option for Galileo E1 2018-01-10 11:30:16 +01:00
Carles Fernandez
13ef34ed81 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into glonass 2017-12-04 18:16:41 +01:00
Javier Arribas
59c2261316 Adding GPS L5i acquisition and tracking modules 2017-12-04 17:07:54 +01:00
Damian Miralles
d75857db91 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into glonass_dec 2017-11-20 08:31:32 -07:00
Unknown
7076bebf30 Remove unused include 2017-11-16 16:33:24 +01:00
Unknown
9ff4d8d880 Fix Galileo E5a deadlock 2017-11-16 16:33:24 +01:00
Carles Fernandez
90533189d3 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into glonass 2017-10-31 07:34:13 +01:00
Carles Fernandez
4267150445 Add Galileo acquisition grid
and other fixes in tests
2017-10-28 20:17:51 +02:00
Carles Fernandez
0532017857 Add blocking parameter to Glonass acquisition 2017-10-04 01:38:00 +02:00
Carles Fernandez
35620b8c57 Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into glonass 2017-10-04 01:27:03 +02:00
Carles Fernandez
e352978777 Implement the non-blocking option for complex shorts
Apply GNU-style indentation
Add Cillian to files copyright
Delete multithread_acquisition block
2017-10-03 13:47:55 +02:00
Cillian O'Driscoll
ba3d7bfcd8 Added 'blocking' option to pcps_acquisition_cc
Using C++ 11 threading routines to create a worker thread that can
perform the FFT for acquisition in a non-blocking manner. By default
'blocking' is set to true, which is identical to the previous behaviour
(with the added overhead of an extra thread). When 'blocking' is set to
false, then the main thread does not wait for the worker, thereby
letting the receiver continue even when the FFT thread is working. This
is very useful for using FFT acquisition at higher sampling rates, where
the FFT cannot be performed in real-time.

The aim is to replace the separate pcps_multithread_acquisition_cc.

TODO: implement the same thing for the pcps_acquisition_sc
2017-09-11 16:37:14 +01:00
Carles Fernandez
047d9af6a3 Merge branch 'glonass_dec' of https://github.com/dmiralles2009/gnss-sdr into dmiralles2009-glonass_dec 2017-09-10 10:51:17 +02:00
Carles Fernandez
0ac2f7bd74 The global parameter name GNSS-SDR.internal_fs_hz has been replaced by
GNSS-SDR.internal_fs_sps
2017-09-02 11:36:19 +02:00
Carles Fernandez
c474ea31d5 Merge branch 'next' of https://github.com/carlesfernandez/gnss-sdr into glonass 2017-09-02 11:27:18 +02:00
Carles Fernandez
dc18980194 The global parameter name GNSS-SDR.internal_fs_hz has been replaced by
GNSS-SDR.internal_fs_sps

The old name was misleading, since the units are samples per second and
not Hertz. 

Backward compatibility is kept, so this change does not break any
existing configuration.
2017-09-02 11:24:44 +02:00
Damian Miralles
19f4da0aa6 merging: Starts merge procedure for glonass branch from upstream
Starts merging process of the acquisition and tracking code for GLONASS
processing developed by Gabriel Araujo. Fixes compile warnings and
errors introduced during rebase operation
2017-08-31 09:55:35 -06:00
Carles Fernandez
12aaa25d50 Do not use LOG(FATAL) since the glog library could have been stripped
off
2017-08-31 09:55:35 -06:00
Carles Fernandez
ed021f043f Merge Gabriel's glonass-sdr branch 2017-08-31 09:55:35 -06:00
Carles Fernandez
fc9740b4dc Do not use LOG(FATAL) since the glog library could have been stripped
off
2017-08-25 19:17:12 +02:00
Carles Fernandez
2c71ebf479 Merge Gabriel's glonass-sdr branch 2017-08-23 22:35:22 +02:00
Gastd
4a74e30890 Add FDMA protocol to pcps algorithm 2017-08-23 13:05:33 -03:00
Gastd
5ad65ab0e1 Add pcps acquisition adapter for glonass l1 ca signal 2017-08-23 13:00:54 -03:00
Carles Fernandez
122ec19626 Make use of the inline keyword where appropriate 2017-08-21 11:45:12 +02:00
Carles Fernandez
0a42fe8ab5 Replace some C-style casts by C++ casts 2017-08-19 09:16:10 +02:00
Carles Fernandez
a8c5ca81fd Remove blank line 2017-08-18 14:24:42 +02:00
Carles Fernandez
61f8df3586 Replace some C-style cast by static_cast<>()
See https://stackoverflow.com/questions/1609163/what-is-the-difference-between-static-cast-and-c-style-casting
2017-08-18 12:45:47 +02:00
Carles Fernandez
07113fd89d Use the override special identifier when overriding a virtual function 2017-08-16 00:58:10 +02:00
Carles Fernandez
9bfef0e05a Fix CMake scripts to use Ninja https://ninja-build.org/
cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -GNinja .. && ninja
2017-06-21 08:54:47 +02:00
Carles Fernandez
7b4f65476c Remove/add blank lines 2017-06-13 11:25:37 +02:00
mmajoral
9a7bd7ffb4 adopted code style + did some code refactoring 2017-06-08 17:29:45 +02:00
mmajoral
cc40f5c25c bug fix: removed call to set_local_code() from the init() function. This prevents the function set_local_code() from being called twice, with an invalid PRN during the first call 2017-05-30 14:57:33 +02:00
mmajoral
cbe20c0920 refactoring code 2017-05-18 17:10:28 +02:00
mmajoral
de2043ca00 cleaned the acquisition code that runs in the Zynq SoC, cleaned some tracking files that run in the Zynq SoC as well. 2017-05-08 17:03:27 +02:00
Javier Arribas
2ee29af3bd Adding FPGA accelerators support in gnss-sdr configuration options 2017-05-05 16:37:29 +02:00
mmajoral
eccbd0f97a acquisition gps unit test for the FPGA. The code is currently being cleaned 2017-05-05 16:15:27 +02:00
mmajoral
9195740d8a acquisition gps unit test for the FPGA. The code is currently being cleaned 2017-05-05 16:14:27 +02:00
Carles Fernandez
2a2344d501 Add maximum number of dwells in the Tong algorithm 2016-08-11 13:13:30 +02:00