diff options
| author | drowe67 <[email protected]> | 2024-05-11 08:13:44 +0930 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-11 08:13:44 +0930 |
| commit | 3d69c8d0639059851e60c0ddf882f86bf2fba380 (patch) | |
| tree | 56372a673925be032aaaa8670b684a678c1ac22a /octave/gp_interleaver.m | |
| parent | 6930e3c26a9d8f4f2baf5f2b8145a7216ab71d02 (diff) | |
| parent | f004b51451fe78b8f289c8a553acad06f2768d9e (diff) | |
Merge pull request #46 from drowe67/dr-freedata-001
FreeDATA Feature Request 001 - FreeDV API support for custom OFDM raw data modes
Diffstat (limited to 'octave/gp_interleaver.m')
| -rw-r--r-- | octave/gp_interleaver.m | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/octave/gp_interleaver.m b/octave/gp_interleaver.m index 1ee0ee3..c97af0f 100644 --- a/octave/gp_interleaver.m +++ b/octave/gp_interleaver.m @@ -7,18 +7,31 @@ 1; +% return 1 if prime +function ret = is_prime(x) + for i=2:x-1 + if mod(x,i) == 0 + ret = 0; + return; + end + end + ret = 1; +end + +function x = next_prime(x) + x++; + while is_prime(x) == 0 + x++; + end +end + % Choose b for Golden Prime Interleaver. b is chosen to be the % closest integer, which is relatively prime to N, to the Golden % section of N. function b = choose_interleaver_b(Nbits) - - p = primes(Nbits); - i = 1; - while(p(i) < Nbits/1.62) - i++; - end - b = p(i); + b = floor(Nbits/1.62); + b = next_prime(b); assert(gcd(b,Nbits) == 1, "b and Nbits must be co-prime"); end @@ -36,7 +49,7 @@ endfunction function frame = gp_deinterleave(interleaved_frame) Nbits = length(interleaved_frame); - b = choose_interleaver_b(Nbits); + b = choose_interleaver_b(Nbits); frame = zeros(1,Nbits); for i=1:Nbits j = mod((b*(i-1)), Nbits); |
