NucleoTNC/TNC/M17.cpp

96 wiersze
9.6 KiB
C++

// Copyright 2020 Rob Riggs <rob@mobilinkd.com>
// All rights reserved.
#include "M17.h"
namespace mobilinkd { namespace m17 {
const std::array<int16_t, FILTER_TAP_NUM> rrc_taps = {
-163, -130, -62, 29, 129, 215, 267, 269, 216, 114, -19, -158, -269, -321,
-293, -176, 16, 253, 485, 654, 698, 573, 253, -249, -886, -1569, -2176,
-2569, -2606, -2166, -1163, 427, 2569, 5155, 8014, 10930, 13661, 15966,
17634, 18510, 18510, 17634, 15966, 13661, 10930, 8014, 5155, 2569, 427,
-1163, -2166, -2606, -2569, -2176, -1569, -886, -249, 253, 573, 698, 654,
485, 253, 16, -176, -293, -321, -269, -158, -19, 114, 216, 269, 267, 215,
129, 29, -62, -130, -163
// -151, -100, -18, 80, 175, 246, 275, 249, 170, 49,
// -90, -219, -304, -318, -245, -88, 131, 373, 581, 695,
// 659, 437, 22, -556, -1229, -1890, -2409, -2641, -2452, -1738,
// -441, 1434, 3816, 6563, 9480, 12334, 14880, 16891, 18179, 18622,
// 18179, 16891, 14880, 12334, 9480, 6563, 3816, 1434, -441, -1738,
// -2452, -2641, -2409, -1890, -1229, -556, 22, 437, 659, 695,
// 581, 373, 131, -88, -245, -318, -304, -219, -90, 49,
// 170, 249, 275, 246, 175, 80, -18, -100, -151, 0
};
const std::array<int16_t, FILTER_TAP_NUM_9> rrc_taps_9 = {
33, -29, -93, -143, -165, -151, -100, -18, 80, 175, 246, 275,
249, 170, 49, -90, -219, -304, -318, -245, -88, 131, 373, 581,
695, 659, 437, 22, -556, -1229, -1890, -2409, -2641, -2452,
-1738, -441, 1434, 3816, 6563, 9480, 12334, 14880, 16891, 18179,
18622, 18179, 16891, 14880, 12334, 9480, 6563, 3816, 1434, -441,
-1738, -2452, -2641, -2409, -1890, -1229, -556, 22, 437, 659, 695,
581, 373, 131, -88, -245, -318, -304, -219, -90, 49, 170, 249,
275, 246, 175, 80, -18, -100, -151, -165, -143, -93, -29, 33, 0
};
const std::array<int16_t, FILTER_TAP_NUM_11> rrc_taps_11 = {
-92, -100, -87, -55, -10, 38, 81, 106, 107, 81,
33, -29, -93, -143, -165, -151, -100, -18, 80, 175,
246, 275, 249, 170, 49, -90, -219, -304, -318, -245,
-88, 131, 373, 581, 695, 659, 437, 22, -556, -1229,
-1890, -2409, -2641, -2452, -1738, -441, 1434, 3816, 6563, 9480,
12334, 14880, 16891, 18179, 18622, 18179, 16891, 14880, 12334, 9480,
6563, 3816, 1434, -441, -1738, -2452, -2641, -2409, -1890, -1229,
-556, 22, 437, 659, 695, 581, 373, 131, -88, -245,
-318, -304, -219, -90, 49, 170, 249, 275, 246, 175,
80, -18, -100, -151, -165, -143, -93, -29, 33, 81,
107, 106, 81, 38, -10, -55, -87, -100, -92, 0
};
const std::array<int16_t, FILTER_TAP_NUM_15> rrc_taps_15 = {
48, 51, 44, 27, 3, -21, -41, -53, -53, -40,
-16, 12, 41, 63, 72, 66, 43, 9, -30, -67,
-92, -100, -87, -55, -10, 38, 81, 106, 107, 81,
33, -29, -93, -143, -165, -151, -100, -18, 80, 175,
246, 275, 249, 170, 49, -90, -219, -304, -318, -245,
-88, 131, 373, 581, 695, 659, 437, 22, -556, -1229,
-1890, -2409, -2641, -2452, -1738, -441, 1434, 3816, 6563, 9480,
12334, 14880, 16891, 18179, 18622, 18179, 16891, 14880, 12334, 9480,
6563, 3816, 1434, -441, -1738, -2452, -2641, -2409, -1890, -1229,
-556, 22, 437, 659, 695, 581, 373, 131, -88, -245,
-318, -304, -219, -90, 49, 170, 249, 275, 246, 175,
80, -18, -100, -151, -165, -143, -93, -29, 33, 81,
107, 106, 81, 38, -10, -55, -87, -100, -92, -67,
-30, 9, 43, 66, 72, 63, 41, 12, -16, -40,
-53, -53, -41, -21, 3, 27, 44, 51, 48, 0
};
const std::array<int16_t, FILTER_TAP_NUM_21> rrc_taps_21 = {
-1, 1, 3, 5, 6, 5, 3, 0, -2, -5, -7, -7, -6, -4, 0, 3, 6, 8,
7, 6, 2, -1, -5, -8, -10, -9, -6, -1, 3, 8, 12, 12, 11, 6, 0,
-5, -10, -13, -13, -10, -4, 3, 10, 15, 18, 16, 10, 2, -7, -16,
-23, -25, -21, -13, -2, 9, 20, 26, 26, 20, 8, -7, -23, -35, -41,
-37, -25, -4, 20, 43, 61, 68, 62, 42, 12, -22, -54, -76, -79,
-61, -22, 32, 93, 145, 173, 164, 109, 5, -139, -307, -472, -602,
-660, -613, -434, -110, 358, 954, 1640, 2370, 3083, 3720, 4222,
4544, 4655, 4544, 4222, 3720, 3083, 2370, 1640, 954, 358, -110,
-434, -613, -660, -602, -472, -307, -139, 5, 109, 164, 173, 145,
93, 32, -22, -61, -79, -76, -54, -22, 12, 42, 62, 68, 61, 43, 20,
-4, -25, -37, -41, -35, -23, -7, 8, 20, 26, 26, 20, 9, -2, -13,
-21, -25, -23, -16, -7, 2, 10, 16, 18, 15, 10, 3, -4, -10, -13,
-13, -10, -5, 0, 6, 11, 12, 12, 8, 3, -1, -6, -9, -10, -8, -5,
-1, 2, 6, 7, 8, 6, 3, 0, -4, -6, -7, -7, -5, -2, 0, 3, 5, 6, 5,
3, 1, -1, 0
};
const std::array<float, FILTER_TAP_NUM_9> rrc_taps_f9 = {
0.002017321931508163, -0.0018256054303579805, -0.00571615173291049, -0.008746639552588416, -0.010105075751866371, -0.009265784007800534, -0.006136551625729697, -0.001125978562075172, 0.004891777252042491, 0.01071805138282269, 0.01505751553351295, 0.01679337935001369, 0.015256245142156299, 0.01042830577908502, 0.003031522725559901, -0.0055333532968188165, -0.013403099825723372, -0.018598682349642525, -0.01944761739590459, -0.015005271935951746, -0.0053887880354343935, 0.008056525910253532, 0.022816244158307273, 0.035513467692208076, 0.04244131815783876, 0.04025481153629372, 0.02671818654865632, 0.0013810216516704976, -0.03394615682795165, -0.07502635967975885, -0.11540977897637611, -0.14703962203941534, -0.16119995609538576, -0.14969512896336504, -0.10610329539459686, -0.026921412469634916, 0.08757875030779196, 0.23293327870303457, 0.4006012210123992, 0.5786324696325503, 0.7528286479934068, 0.908262741447522, 1.0309661131633199, 1.1095611856548013, 1.1366197723675815, 1.1095611856548013, 1.0309661131633199, 0.908262741447522, 0.7528286479934068, 0.5786324696325503, 0.4006012210123992, 0.23293327870303457, 0.08757875030779196, -0.026921412469634916, -0.10610329539459686, -0.14969512896336504, -0.16119995609538576, -0.14703962203941534, -0.11540977897637611, -0.07502635967975885, -0.03394615682795165, 0.0013810216516704976, 0.02671818654865632, 0.04025481153629372, 0.04244131815783876, 0.035513467692208076, 0.022816244158307273, 0.008056525910253532, -0.0053887880354343935, -0.015005271935951746, -0.01944761739590459, -0.018598682349642525, -0.013403099825723372, -0.0055333532968188165, 0.003031522725559901, 0.01042830577908502, 0.015256245142156299, 0.01679337935001369, 0.01505751553351295, 0.01071805138282269, 0.004891777252042491, -0.001125978562075172, -0.006136551625729697, -0.009265784007800534, -0.010105075751866371, -0.008746639552588416, -0.00571615173291049, -0.0018256054303579805, 0.002017321931508163, 0.0
};
const std::array<float, FILTER_TAP_NUM_15> rrc_taps_f15 = {
0.0029364388513841593, 0.0031468394550958484, 0.002699564567597445, 0.001661182944400927, 0.00023319405581230247, -0.0012851320781224025, -0.0025577136087664687, -0.0032843366522956313, -0.0032697038088887226, -0.0024733964729590865, -0.0010285696910973807, 0.0007766690889758685, 0.002553421969211845, 0.0038920145144327816, 0.004451886520053017, 0.00404219185231544, 0.002674727068399207, 0.0005756567993179152, -0.0018493784971116507, -0.004092346891623224, -0.005648131453822014, -0.006126925416243605, -0.005349511529163396, -0.003403189203405097, -0.0006430502751187517, 0.002365929161655135, 0.004957956568090113, 0.006506845894531803, 0.006569574194782443, 0.0050017573119839134, 0.002017321931508163, -0.0018256054303579805, -0.00571615173291049, -0.008746639552588416, -0.010105075751866371, -0.009265784007800534, -0.006136551625729697, -0.001125978562075172, 0.004891777252042491, 0.01071805138282269, 0.01505751553351295, 0.01679337935001369, 0.015256245142156299, 0.01042830577908502, 0.003031522725559901, -0.0055333532968188165, -0.013403099825723372, -0.018598682349642525, -0.01944761739590459, -0.015005271935951746, -0.0053887880354343935, 0.008056525910253532, 0.022816244158307273, 0.035513467692208076, 0.04244131815783876, 0.04025481153629372, 0.02671818654865632, 0.0013810216516704976, -0.03394615682795165, -0.07502635967975885, -0.11540977897637611, -0.14703962203941534, -0.16119995609538576, -0.14969512896336504, -0.10610329539459686, -0.026921412469634916, 0.08757875030779196, 0.23293327870303457, 0.4006012210123992, 0.5786324696325503, 0.7528286479934068, 0.908262741447522, 1.0309661131633199, 1.1095611856548013, 1.1366197723675815, 1.1095611856548013, 1.0309661131633199, 0.908262741447522, 0.7528286479934068, 0.5786324696325503, 0.4006012210123992, 0.23293327870303457, 0.08757875030779196, -0.026921412469634916, -0.10610329539459686, -0.14969512896336504, -0.16119995609538576, -0.14703962203941534, -0.11540977897637611, -0.07502635967975885, -0.03394615682795165, 0.0013810216516704976, 0.02671818654865632, 0.04025481153629372, 0.04244131815783876, 0.035513467692208076, 0.022816244158307273, 0.008056525910253532, -0.0053887880354343935, -0.015005271935951746, -0.01944761739590459, -0.018598682349642525, -0.013403099825723372, -0.0055333532968188165, 0.003031522725559901, 0.01042830577908502, 0.015256245142156299, 0.01679337935001369, 0.01505751553351295, 0.01071805138282269, 0.004891777252042491, -0.001125978562075172, -0.006136551625729697, -0.009265784007800534, -0.010105075751866371, -0.008746639552588416, -0.00571615173291049, -0.0018256054303579805, 0.002017321931508163, 0.0050017573119839134, 0.006569574194782443, 0.006506845894531803, 0.004957956568090113, 0.002365929161655135, -0.0006430502751187517, -0.003403189203405097, -0.005349511529163396, -0.006126925416243605, -0.005648131453822014, -0.004092346891623224, -0.0018493784971116507, 0.0005756567993179152, 0.002674727068399207, 0.00404219185231544, 0.004451886520053017, 0.0038920145144327816, 0.002553421969211845, 0.0007766690889758685, -0.0010285696910973807, -0.0024733964729590865, -0.0032697038088887226, -0.0032843366522956313, -0.0025577136087664687, -0.0012851320781224025, 0.00023319405581230247, 0.001661182944400927, 0.002699564567597445, 0.0031468394550958484, 0.0029364388513841593, 0.0
};
}} // mobilinkd::m17