Sylvain Munaut | 1a4ea5b | 2010-10-08 15:09:16 +0200 | [diff] [blame] | 1 | /* GSM 06.10 - GSM FR codec */ |
| 2 | |
| 3 | /* |
| 4 | * (C) 2010 Sylvain Munaut <tnt@246tNt.com> |
| 5 | * |
| 6 | * All Rights Reserved |
| 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by |
| 10 | * the Free Software Foundation; either version 2 of the License, or |
| 11 | * (at your option) any later version. |
| 12 | * |
| 13 | * This program is distributed in the hope that it will be useful, |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 16 | * GNU General Public License for more details. |
| 17 | * |
| 18 | * You should have received a copy of the GNU General Public License along |
| 19 | * with this program; if not, write to the Free Software Foundation, Inc., |
| 20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 21 | * |
| 22 | */ |
| 23 | |
| 24 | #include <stdint.h> |
| 25 | |
| 26 | /* GSM FR - subjective importance bit ordering */ |
| 27 | /* This array encodes GSM 05.03 Table 2. |
| 28 | * It's also GSM 06.10 Table A.2.1a |
| 29 | * |
| 30 | * It converts between serial parameter output by the encoder and the |
| 31 | * order needed before channel encoding. |
| 32 | */ |
Diego Elio Pettenò | 23431c7 | 2012-06-29 13:01:27 -0700 | [diff] [blame] | 33 | const uint16_t gsm610_bitorder[260] = { |
Sylvain Munaut | 1a4ea5b | 2010-10-08 15:09:16 +0200 | [diff] [blame] | 34 | 0, /* LARc0:5 */ |
| 35 | 47, /* Xmaxc0:5 */ |
| 36 | 103, /* Xmaxc1:5 */ |
| 37 | 159, /* Xmaxc2:5 */ |
| 38 | 215, /* Xmaxc3:5 */ |
| 39 | 1, /* LARc0:4 */ |
| 40 | 6, /* LARc1:5 */ |
| 41 | 12, /* LARc2:4 */ |
| 42 | 2, /* LARc0:3 */ |
| 43 | 7, /* LARc1:4 */ |
| 44 | 13, /* LARc2:3 */ |
| 45 | 17, /* LARc3:4 */ |
| 46 | 36, /* Nc0:6 */ |
| 47 | 92, /* Nc1:6 */ |
| 48 | 148, /* Nc2:6 */ |
| 49 | 204, /* Nc3:6 */ |
| 50 | 48, /* Xmaxc0:4 */ |
| 51 | 104, /* Xmaxc1:4 */ |
| 52 | 160, /* Xmaxc2:4 */ |
| 53 | 216, /* Xmaxc3:4 */ |
| 54 | 8, /* LARc1:3 */ |
| 55 | 22, /* LARc4:3 */ |
| 56 | 26, /* LARc5:3 */ |
| 57 | 37, /* Nc0:5 */ |
| 58 | 93, /* Nc1:5 */ |
| 59 | 149, /* Nc2:5 */ |
| 60 | 205, /* Nc3:5 */ |
| 61 | 38, /* Nc0:4 */ |
| 62 | 94, /* Nc1:4 */ |
| 63 | 150, /* Nc2:4 */ |
| 64 | 206, /* Nc3:4 */ |
| 65 | 39, /* Nc0:3 */ |
| 66 | 95, /* Nc1:3 */ |
| 67 | 151, /* Nc2:3 */ |
| 68 | 207, /* Nc3:3 */ |
| 69 | 40, /* Nc0:2 */ |
| 70 | 96, /* Nc1:2 */ |
| 71 | 152, /* Nc2:2 */ |
| 72 | 208, /* Nc3:2 */ |
| 73 | 49, /* Xmaxc0:3 */ |
| 74 | 105, /* Xmaxc1:3 */ |
| 75 | 161, /* Xmaxc2:3 */ |
| 76 | 217, /* Xmaxc3:3 */ |
| 77 | 3, /* LARc0:2 */ |
| 78 | 18, /* LARc3:3 */ |
| 79 | 30, /* LARc6:2 */ |
| 80 | 41, /* Nc0:1 */ |
| 81 | 97, /* Nc1:1 */ |
| 82 | 153, /* Nc2:1 */ |
| 83 | 209, /* Nc3:1 */ |
| 84 | 23, /* LARc4:2 */ |
| 85 | 27, /* LARc5:2 */ |
| 86 | 43, /* bc0:1 */ |
| 87 | 99, /* bc1:1 */ |
| 88 | 155, /* bc2:1 */ |
| 89 | 211, /* bc3:1 */ |
| 90 | 42, /* Nc0:0 */ |
| 91 | 98, /* Nc1:0 */ |
| 92 | 154, /* Nc2:0 */ |
| 93 | 210, /* Nc3:0 */ |
| 94 | 45, /* Mc0:1 */ |
| 95 | 101, /* Mc1:1 */ |
| 96 | 157, /* Mc2:1 */ |
| 97 | 213, /* Mc3:1 */ |
| 98 | 4, /* LARc0:1 */ |
| 99 | 9, /* LARc1:2 */ |
| 100 | 14, /* LARc2:2 */ |
| 101 | 33, /* LARc7:2 */ |
| 102 | 19, /* LARc3:2 */ |
| 103 | 24, /* LARc4:1 */ |
| 104 | 31, /* LARc6:1 */ |
| 105 | 44, /* bc0:0 */ |
| 106 | 100, /* bc1:0 */ |
| 107 | 156, /* bc2:0 */ |
| 108 | 212, /* bc3:0 */ |
| 109 | 50, /* Xmaxc0:2 */ |
| 110 | 106, /* Xmaxc1:2 */ |
| 111 | 162, /* Xmaxc2:2 */ |
| 112 | 218, /* Xmaxc3:2 */ |
| 113 | 53, /* xmc0_0:2 */ |
| 114 | 56, /* xmc0_1:2 */ |
| 115 | 59, /* xmc0_2:2 */ |
| 116 | 62, /* xmc0_3:2 */ |
| 117 | 65, /* xmc0_4:2 */ |
| 118 | 68, /* xmc0_5:2 */ |
| 119 | 71, /* xmc0_6:2 */ |
| 120 | 74, /* xmc0_7:2 */ |
| 121 | 77, /* xmc0_8:2 */ |
| 122 | 80, /* xmc0_9:2 */ |
| 123 | 83, /* xmc0_10:2 */ |
| 124 | 86, /* xmc0_11:2 */ |
| 125 | 89, /* xmc0_12:2 */ |
| 126 | 109, /* xmc1_0:2 */ |
| 127 | 112, /* xmc1_1:2 */ |
| 128 | 115, /* xmc1_2:2 */ |
| 129 | 118, /* xmc1_3:2 */ |
| 130 | 121, /* xmc1_4:2 */ |
| 131 | 124, /* xmc1_5:2 */ |
| 132 | 127, /* xmc1_6:2 */ |
| 133 | 130, /* xmc1_7:2 */ |
| 134 | 133, /* xmc1_8:2 */ |
| 135 | 136, /* xmc1_9:2 */ |
| 136 | 139, /* xmc1_10:2 */ |
| 137 | 142, /* xmc1_11:2 */ |
| 138 | 145, /* xmc1_12:2 */ |
| 139 | 165, /* xmc2_0:2 */ |
| 140 | 168, /* xmc2_1:2 */ |
| 141 | 171, /* xmc2_2:2 */ |
| 142 | 174, /* xmc2_3:2 */ |
| 143 | 177, /* xmc2_4:2 */ |
| 144 | 180, /* xmc2_5:2 */ |
| 145 | 183, /* xmc2_6:2 */ |
| 146 | 186, /* xmc2_7:2 */ |
| 147 | 189, /* xmc2_8:2 */ |
| 148 | 192, /* xmc2_9:2 */ |
| 149 | 195, /* xmc2_10:2 */ |
| 150 | 198, /* xmc2_11:2 */ |
| 151 | 201, /* xmc2_12:2 */ |
| 152 | 221, /* xmc3_0:2 */ |
| 153 | 224, /* xmc3_1:2 */ |
| 154 | 227, /* xmc3_2:2 */ |
| 155 | 230, /* xmc3_3:2 */ |
| 156 | 233, /* xmc3_4:2 */ |
| 157 | 236, /* xmc3_5:2 */ |
| 158 | 239, /* xmc3_6:2 */ |
| 159 | 242, /* xmc3_7:2 */ |
| 160 | 245, /* xmc3_8:2 */ |
| 161 | 248, /* xmc3_9:2 */ |
| 162 | 251, /* xmc3_10:2 */ |
| 163 | 254, /* xmc3_11:2 */ |
| 164 | 257, /* xmc3_12:2 */ |
| 165 | 46, /* Mc0:0 */ |
| 166 | 102, /* Mc1:0 */ |
| 167 | 158, /* Mc2:0 */ |
| 168 | 214, /* Mc3:0 */ |
| 169 | 51, /* Xmaxc0:1 */ |
| 170 | 107, /* Xmaxc1:1 */ |
| 171 | 163, /* Xmaxc2:1 */ |
| 172 | 219, /* Xmaxc3:1 */ |
| 173 | 54, /* xmc0_0:1 */ |
| 174 | 57, /* xmc0_1:1 */ |
| 175 | 60, /* xmc0_2:1 */ |
| 176 | 63, /* xmc0_3:1 */ |
| 177 | 66, /* xmc0_4:1 */ |
| 178 | 69, /* xmc0_5:1 */ |
| 179 | 72, /* xmc0_6:1 */ |
| 180 | 75, /* xmc0_7:1 */ |
| 181 | 78, /* xmc0_8:1 */ |
| 182 | 81, /* xmc0_9:1 */ |
| 183 | 84, /* xmc0_10:1 */ |
| 184 | 87, /* xmc0_11:1 */ |
| 185 | 90, /* xmc0_12:1 */ |
| 186 | 110, /* xmc1_0:1 */ |
| 187 | 113, /* xmc1_1:1 */ |
| 188 | 116, /* xmc1_2:1 */ |
| 189 | 119, /* xmc1_3:1 */ |
| 190 | 122, /* xmc1_4:1 */ |
| 191 | 125, /* xmc1_5:1 */ |
| 192 | 128, /* xmc1_6:1 */ |
| 193 | 131, /* xmc1_7:1 */ |
| 194 | 134, /* xmc1_8:1 */ |
| 195 | 137, /* xmc1_9:1 */ |
| 196 | 140, /* xmc1_10:1 */ |
| 197 | 143, /* xmc1_11:1 */ |
| 198 | 146, /* xmc1_12:1 */ |
| 199 | 166, /* xmc2_0:1 */ |
| 200 | 169, /* xmc2_1:1 */ |
| 201 | 172, /* xmc2_2:1 */ |
| 202 | 175, /* xmc2_3:1 */ |
| 203 | 178, /* xmc2_4:1 */ |
| 204 | 181, /* xmc2_5:1 */ |
| 205 | 184, /* xmc2_6:1 */ |
| 206 | 187, /* xmc2_7:1 */ |
| 207 | 190, /* xmc2_8:1 */ |
| 208 | 193, /* xmc2_9:1 */ |
| 209 | 196, /* xmc2_10:1 */ |
| 210 | 199, /* xmc2_11:1 */ |
| 211 | 202, /* xmc2_12:1 */ |
| 212 | 222, /* xmc3_0:1 */ |
| 213 | 225, /* xmc3_1:1 */ |
| 214 | 228, /* xmc3_2:1 */ |
| 215 | 231, /* xmc3_3:1 */ |
| 216 | 234, /* xmc3_4:1 */ |
| 217 | 237, /* xmc3_5:1 */ |
| 218 | 240, /* xmc3_6:1 */ |
| 219 | 243, /* xmc3_7:1 */ |
| 220 | 246, /* xmc3_8:1 */ |
| 221 | 249, /* xmc3_9:1 */ |
| 222 | 252, /* xmc3_10:1 */ |
| 223 | 255, /* xmc3_11:1 */ |
| 224 | 258, /* xmc3_12:1 */ |
| 225 | 5, /* LARc0:0 */ |
| 226 | 10, /* LARc1:1 */ |
| 227 | 15, /* LARc2:1 */ |
| 228 | 28, /* LARc5:1 */ |
| 229 | 32, /* LARc6:0 */ |
| 230 | 34, /* LARc7:1 */ |
| 231 | 35, /* LARc7:0 */ |
| 232 | 16, /* LARc2:0 */ |
| 233 | 20, /* LARc3:1 */ |
| 234 | 21, /* LARc3:0 */ |
| 235 | 25, /* LARc4:0 */ |
| 236 | 52, /* Xmaxc0:0 */ |
| 237 | 108, /* Xmaxc1:0 */ |
| 238 | 164, /* Xmaxc2:0 */ |
| 239 | 220, /* Xmaxc3:0 */ |
| 240 | 55, /* xmc0_0:0 */ |
| 241 | 58, /* xmc0_1:0 */ |
| 242 | 61, /* xmc0_2:0 */ |
| 243 | 64, /* xmc0_3:0 */ |
| 244 | 67, /* xmc0_4:0 */ |
| 245 | 70, /* xmc0_5:0 */ |
| 246 | 73, /* xmc0_6:0 */ |
| 247 | 76, /* xmc0_7:0 */ |
| 248 | 79, /* xmc0_8:0 */ |
| 249 | 82, /* xmc0_9:0 */ |
| 250 | 85, /* xmc0_10:0 */ |
| 251 | 88, /* xmc0_11:0 */ |
| 252 | 91, /* xmc0_12:0 */ |
| 253 | 111, /* xmc1_0:0 */ |
| 254 | 114, /* xmc1_1:0 */ |
| 255 | 117, /* xmc1_2:0 */ |
| 256 | 120, /* xmc1_3:0 */ |
| 257 | 123, /* xmc1_4:0 */ |
| 258 | 126, /* xmc1_5:0 */ |
| 259 | 129, /* xmc1_6:0 */ |
| 260 | 132, /* xmc1_7:0 */ |
| 261 | 135, /* xmc1_8:0 */ |
| 262 | 138, /* xmc1_9:0 */ |
| 263 | 141, /* xmc1_10:0 */ |
| 264 | 144, /* xmc1_11:0 */ |
| 265 | 147, /* xmc1_12:0 */ |
| 266 | 167, /* xmc2_0:0 */ |
| 267 | 170, /* xmc2_1:0 */ |
| 268 | 173, /* xmc2_2:0 */ |
| 269 | 176, /* xmc2_3:0 */ |
| 270 | 179, /* xmc2_4:0 */ |
| 271 | 182, /* xmc2_5:0 */ |
| 272 | 185, /* xmc2_6:0 */ |
| 273 | 188, /* xmc2_7:0 */ |
| 274 | 191, /* xmc2_8:0 */ |
| 275 | 194, /* xmc2_9:0 */ |
| 276 | 197, /* xmc2_10:0 */ |
| 277 | 200, /* xmc2_11:0 */ |
| 278 | 203, /* xmc2_12:0 */ |
| 279 | 223, /* xmc3_0:0 */ |
| 280 | 226, /* xmc3_1:0 */ |
| 281 | 229, /* xmc3_2:0 */ |
| 282 | 232, /* xmc3_3:0 */ |
| 283 | 235, /* xmc3_4:0 */ |
| 284 | 238, /* xmc3_5:0 */ |
| 285 | 241, /* xmc3_6:0 */ |
| 286 | 244, /* xmc3_7:0 */ |
| 287 | 247, /* xmc3_8:0 */ |
| 288 | 250, /* xmc3_9:0 */ |
| 289 | 253, /* xmc3_10:0 */ |
| 290 | 256, /* xmc3_11:0 */ |
| 291 | 259, /* xmc3_12:0 */ |
| 292 | 11, /* LARc1:0 */ |
| 293 | 29, /* LARc5:0 */ |
| 294 | }; |