Commit graph

203 commits

Author SHA1 Message Date
Ahmet Inan
ed4fe54ee9 experimenting with ordered reliability message bits
wanted to see if this can be exploited for graceful degradation but the
effect is minimal. order of reliability does not matter, but order of
decoding of message bits gives a very marginal effect.
This means that the probability of an errornous decode of a message bit
at the beginning is less likely than at the end, as a single error will
produce a cascade effect that breaks all later decoded bits.
2023-07-07 15:12:29 +02:00
Ahmet Inan
55ddae0c6f do not rely on long double
see this project if more precision is needed:

https://github.com/xdsopl/TwoInt/blob/main/polar.cc
2023-07-07 10:29:58 +02:00
Ahmet Inan
cb7271c85f added polar code reliability sequence constructor 2023-07-07 10:24:32 +02:00
Ahmet Inan
b9d074adcf set frozen bits from a reliability sequence 2023-06-18 09:41:46 +02:00
Ahmet Inan
c810d3fc84 hopefully these names are less confusing 2023-06-09 10:06:34 +02:00
Ahmet Inan
272440d749 better not to be clever here 2023-06-07 12:27:01 +02:00
Ahmet Inan
60b9dbf2c0 we have the - operator now 2023-06-06 23:06:12 +02:00
Ahmet Inan
fe25fb2a69 flatten hot functions 2023-06-05 12:18:27 +02:00
Ahmet Inan
6ec9fcba1a compute constant terms for same row only once 2023-06-05 10:56:41 +02:00
Ahmet Inan
ebb989ce50 wait for more errors to get a better estimation 2023-06-01 07:28:17 +02:00
Ahmet Inan
7ec6a47c89 added code that might be faster on smaller CPUs 2023-05-18 15:55:11 +02:00
Ahmet Inan
e96e4abe0e oops 2023-05-11 13:41:19 +02:00
Ahmet Inan
9e32042df8 removed block shuffle 2023-05-11 09:01:08 +02:00
Ahmet Inan
8a055ac2b2 split reversible Fisher Yates shuffle into two 2023-05-11 09:00:27 +02:00
Ahmet Inan
8370e6a51c added SIMD acceleration for GF(2^8) and GF(2^16) 2023-05-09 16:04:32 +02:00
Ahmet Inan
5805246088 added multiply accumulate method 2023-05-08 08:49:14 +02:00
Ahmet Inan
078ae40d83 merged encoder and decoder 2023-05-08 08:12:17 +02:00
Ahmet Inan
26e83f13d6 optimize for Raspberry Pi 4 2023-05-05 14:20:00 +02:00
Ahmet Inan
2b7645ced3 use faster vqtbl1q_u8 on ARM64 2023-05-05 08:53:56 +02:00
Ahmet Inan
986059694e added support for aarch64
__ARM_NEON__ is not defined on gcc anymore ..
2023-05-05 08:06:59 +02:00
Ahmet Inan
f2ebaf4504 allow user to decode block by block 2023-04-28 10:55:46 +02:00
Ahmet Inan
43a0f7a5ec less is more 2023-04-25 09:48:34 +02:00
Ahmet Inan
daa622d1eb show some numbers 2023-04-24 15:44:19 +02:00
Ahmet Inan
bb527dd888 better not to bind here 2023-04-24 14:54:22 +02:00
Ahmet Inan
eb6e002d52 added Cauchy Reed Solomon erasure coding
Read more about the Cauchy matrix:

https://en.wikipedia.org/wiki/Cauchy_matrix

The Art of Computer Programming
Volume 1: Fundamental Algorithms
Donald E. Knuth - 1997
Paragraph 1.2.3: Sums and Products

Page 37, Cauchy's matrix:
$a_{ij} = \frac{1}{x_i + y_j}$

Page 38, Exercise 41:
$b_{ij} = \frac{\prod_{k=1}^{n}{(x_j + y_k)(x_k + y_i)}}{(x_j + y_i)\prod_{k \ne j}^{n}{(x_j - x_k)}\prod_{k \ne i}^{n}{(y_i - y_k)}}$
2023-04-24 13:35:30 +02:00
Ahmet Inan
3fa6dde2a8 make gnu compiler happy 2023-04-21 17:06:49 +02:00
Ahmet Inan
41fa2c7f40 use much faster __builtin_clz 2023-04-21 12:00:40 +02:00
Ahmet Inan
9f07a27eaf don't need to recompute degree of r 2023-04-21 09:37:36 +02:00
Ahmet Inan
4a24450351 we can now use TYPE, as degree is always smaller 2023-04-21 09:18:49 +02:00
Ahmet Inan
595cf80cc5 degree of poly is always larger than of the element 2023-04-21 09:17:09 +02:00
Ahmet Inan
9570346a59 experimenting with 3 times faster EEA
https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm#Simple_algebraic_field_extensions
2023-04-21 09:11:11 +02:00
Ahmet Inan
9774948cd3 added reference implementation and exhaustive testing 2023-04-20 14:04:32 +02:00
Ahmet Inan
39f135f8e0 added - operators 2023-04-16 13:10:37 +02:00
Ahmet Inan
03ac76c7d8 added reciprocal from index to index type 2023-04-15 20:17:31 +02:00
Ahmet Inan
e55c2bc083 added a simple reversible block wise shuffle 2023-03-28 11:44:15 +02:00
Ahmet Inan
346245c4cc added simple interleavers 2023-03-27 11:07:04 +02:00
Ahmet Inan
3a860b9c73 use compile time constant for size 2023-03-27 10:09:18 +02:00
Ahmet Inan
f6170cc923 added bit-reversal permutation 2023-03-25 10:52:39 +01:00
Ahmet Inan
e0857552bb added reversible Fisher-Yates shuffle 2023-03-25 09:56:27 +01:00
Ahmet Inan
476a346295 use -O2 with -ffast-math and -ftree-vectorize 2022-04-07 21:36:38 +02:00
Ahmet Inan
0e1a5a45e4 the 2/3 LDPC code uses T=10 BCH code in DVB v1.0 2021-07-22 09:24:45 +02:00
Ahmet Inan
d9b98653dd use short code and a larger list with fixed-point 2021-07-13 13:45:06 +02:00
Ahmet Inan
a1764d4d83 added CRC aided SCL example 2021-07-13 12:15:57 +02:00
Ahmet Inan
9662bf9609 simplified branches with only information bits 2021-07-13 10:50:06 +02:00
Ahmet Inan
d87ce6e81e simplified branches with only frozen bits 2021-07-13 10:50:06 +02:00
Ahmet Inan
631ec8beef use uint32_t for the frozen bits 2021-07-13 10:50:06 +02:00
Ahmet Inan
687ae706d7 double needs __m128d 2021-07-13 10:50:06 +02:00
Ahmet Inan
cc1f412f5d added polar bit freezers, encoders and decoders 2021-07-11 10:30:22 +02:00
Ahmet Inan
024ffa1d25 use C++17 for new alignment support 2021-07-10 23:34:09 +02:00
Ahmet Inan
6cddcef660 added vcopysign() 2021-07-10 23:34:09 +02:00