Перейти к содержанию
    

stealth-coder

Участник
  • Постов

    127
  • Зарегистрирован

  • Посещение

Репутация

2 Обычный

Информация о stealth-coder

  • Звание
    Частый гость
    Частый гость

Посетители профиля

2 884 просмотра профиля
  1. CDMA - Code Division Multiple Access. Из этого следует, что его нужно использовать только в случае организации множественного доступа и в этом и есть его "выигрыш". Если нужно повысить помехоустойчивость или, что по сути то же самое с технической точки зрения, скрыть сигнал в шумах, то нужно использовать обычный DSSS. Пик-фактор CDMA всегда в районе 10 дБ, в DSSS можно получить 6 дБ, это еще одна причина не использовать CDMA если не требуется множественный доступ. Т.е. классика жанра - забить гвоздь микроскопом можно, но молоток удобнее и на несколько порядков дешевле.
  2. Сделано это следующим образом - БС фактически является опорным сигналом, по которому подстраивается низкостабильный VCTCXO трубки, поэтому разбег тактовой практически исчезает и отдельной компенсации не требует, а остаток доплера убирается петлей ФАПЧ, т.к. длина Уолша в CDMA2000 всего 64 чипа. Петля ФАПЧ опирается на пилот-сигнал. Фаза на передающей стороне не подстраивается, это бессмысленно, восстанавливается по пилот-сигналам, в сигнале каждой трубки он присутствует. В сигнале БС пилот один для всех трубок. Сигналы трубок друг другу не ортогональны, т.е. мешают друг другу, поэтому ключевой проблемой является проблема ближний-дальний, когда сигналы близких трубок давят сигналы далеких трубок, эту проблему решают высокоскоростным регулированием мощности трубок по командам БС. Ортогональны кодовые каналы в сигнале каждой отдельной трубки и ортогональны кодовые каналы в сигнале БС.
  3. Вы не поняли. Там все "кишки" доступны. БС это просто пример. Я же написал, что видел реализацию на их базе раций, БС сотовой связи не требуются. Готовый стек идёт "бонусом", можно своё наворотить.
  4. Телефоны на чипсете TI Calypso (Motorola c113, c118, c123, ...) Вот пример базовой станции GSM https://habr.com/ru/company/pentestit/blog/331406/ На них делали и другие поделки, например, рации, используя готовый L1/L2 GSM. 8 слотов по 13 кбит/с чистой инф. скорости в каждом дают 104 кбит/с. Опуститься в диапазон 70 см, наверное, возможно при доработке паяльником.
  5. BER 5% в случае BPSK соответствует Eb/N0 = 1 дБ, скорость кодирования 1300 / 2400 > 1/2. Сверточный код (561, 753) при 1 дБ даёт BER=3%, 5G LDPC BP-20 при 1 дБ даёт BER=0.1% (при длине блока 16000 бит). Надо, конечно, моделировать, но в такой постановке задача вряд ли решаемая, не хватает как минимум 1 дБ, при 2 дБ 5G LDPC BP-20 при длине блока 2000 бит уходит ниже 1e-5. Это, конечно, если вам такие длинные коды подходят. На коротких кодах ситуация будет значительно хуже. Running: 5G LDPC BP-20 (n=2000) EbNo [dB] | BER | BLER | bit errors | num bits | block errors | num blocks | runtime [s] | status --------------------------------------------------------------------------------------------------------------------------------------- 0.0 | 1.6060e-01 | 1.0000e+00 | 160599 | 1000000 | 1000 | 1000 | 1.9 |reached target block errors 0.25 | 1.3341e-01 | 9.9900e-01 | 133413 | 1000000 | 999 | 1000 | 0.2 |reached target block errors 0.5 | 9.7059e-02 | 9.6300e-01 | 97059 | 1000000 | 963 | 1000 | 0.2 |reached target block errors 0.75 | 5.6781e-02 | 8.1700e-01 | 56781 | 1000000 | 817 | 1000 | 0.2 |reached target block errors 1.0 | 1.9386e-02 | 4.5700e-01 | 38772 | 2000000 | 914 | 2000 | 0.4 |reached target block errors 1.25 | 4.1585e-03 | 1.5250e-01 | 16634 | 4000000 | 610 | 4000 | 0.7 |reached target block errors 1.5 | 4.6005e-04 | 2.4524e-02 | 9661 | 21000000 | 515 | 21000 | 3.9 |reached target block errors 1.75 | 2.3720e-05 | 2.0000e-03 | 2372 | 100000000 | 200 | 100000 | 18.1 |reached max iter 2.0 | 8.2000e-07 | 1.3000e-04 | 82 | 100000000 | 13 | 100000 | 18.0 |reached max iter 2.25 | 0.0000e+00 | 0.0000e+00 | 0 | 100000000 | 0 | 100000 |
  6. static const i32 z[] = { 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, }; int run_ssc(const Iq16 *iq, unsigned pos, unsigned samples_per_chip, unsigned *scg, unsigned *slot) { unsigned i, j, max_pos; u64 max, ssc_seq = 0; Iq32 ssc[SSC_LEN]; for (i = 0; i < SLOTS_PER_FRAME; ++i) { for (j = 0; j < SSC_LEN; ++j) { const Iq16 *v = &iq[pos + j * samples_per_chip]; // Комплексно-сопряженное умножение ssc[j].re = z[j] * ((i32)v->re + (i32)v->im); ssc[j].im = z[j] * ((i32)v->im - (i32)v->re); } fast_walsh_hadamard_transform_256(ssc); max = 0; for (j = 0; j < SSC_COUNT; ++j) { Iq32 *v = &ssc[16 * j]; u64 a = (i64)v->re * (i64)v->re + (i64)v->im * (i64)v->im; if (a > max) { max = a; max_pos = j; } } ssc_seq = (ssc_seq << 4) | (u64)max_pos; pos += SSC_PERIOD * samples_per_chip; } return (define_scr_code_group(ssc_seq, scg, slot) >= SSC_THRESHOLD); } static void add_iq32(const Iq32 *src1, const Iq32 *src2, Iq32 *dst) { dst->re = src1->re + src2->re; dst->im = src1->im + src2->im; } static void sub_iq32(const Iq32 *src1, const Iq32 *src2, Iq32 *dst) { dst->re = src1->re - src2->re; dst->im = src1->im - src2->im; } static void swap_iq32_ptr(Iq32 **p1, Iq32 **p2) { Iq32 *t = *p1; *p1 = *p2; *p2 = t; } static void fast_walsh_hadamard_transform_256(Iq32 *iq) { Iq32 tmp[256]; Iq32 *ping = iq; Iq32 *pong = tmp; unsigned i, j, k, js, ks; js = 2; ks = 1; for (i = 0; i < 8; ++i) { for (j = 0; j < 256; j += js) { for (k = 0; k < ks; ++k) { unsigned pa = j + k; unsigned pb = j + k + ks; add_iq32(&ping[pa], &ping[pb], &pong[pa]); sub_iq32(&ping[pa], &ping[pb], &pong[pb]); } } js <<= 1; ks <<= 1; swap_iq32_ptr(&ping, &pong); } } u64 scr_code_groups[SCR_CODE_GROUPS_COUNT] = { 0x0001789E79F16E6F, 0x0004F62DF294BDB9, 0x0010E44BF5A1FAEB, 0x0012075414733526, 0x001F55AE4B0EBFA1, 0x0023630442517657, 0x003A23981A19BB82, 0x00455D891C814D0C, 0x005993A6CFAC530F, 0x005C1D1544C980D9, 0x0067461327215534, 0x00698F68E07F7E11, 0x007B883CF40C4B37, 0x007D9D0EE74A3943, 0x0081EEF9670971F8, 0x008E5F1CD9A634B2, 0x0098AE653F41BC2D, 0x00AD3C189BF742E5, 0x00BBCD617D10CA7A, 0x00BE43D2F67519AC, 0x00E32659CB4DF71A, 0x00F2BA8C471D639E, 0x01149FA29A74C2C7, 0x011B2E4724DB878D, 0x0125FBF2CC5681B6, 0x012718ED2D844E7B, 0x01368438A1D4DAFF, 0x013CBB6E941E4C63, 0x014882B7DEBD421E, 0x014A61A83F6F8DD3, 0x0151C22B86F58FCB, 0x015866FC2B1CB8F5, 0x016BE1B39CEC3449, 0x016DF4818FAA463D, 0x0174B41DD7E28BE8, 0x018C31C7A5357EEA, 0x01921CF797CAAF24, 0x01AE2A5D9E9566D2, 0x01F34FD6A3AD8864, 0x02235ABC5BD34C4D, 0x02254F8E48953E39, 0x0234D35BC4C5AABD, 0x0238F93FE2494E55, 0x023F949388FE524E, 0x024BAD4AC25D5C33, 0x02539548E3E4FF89, 0x02677FAB3EA36F2E, 0x026FA3E2EABB367F, 0x0276E37EB2F3FBAA, 0x027E3F3766EBA2FB, 0x0299EF435F32E858, 0x02CA43B3A5542DCB, 0x02D68D9C767933C8, 0x0447DFC5DC67E5E6, 0x045A697476BB958A, 0x045C7C4665FDE7FE, 0x046896A5B8BA7759, 0x04857987B4A9AB66, 0x0499B7A86784B565, 0x049B54B786567AA8, 0x04CEED756F76CD4F, 0x089C9AEE8FBDCFDA, 0x08ABEB8CCAD9FEDF, 0x08B9ECD8DEAACBF9 }; static unsigned define_scr_code_group(u64 ssc, unsigned *scg, unsigned *slot) { unsigned i, j, k, match = 0; for (i = 0; i < SCR_CODE_GROUPS_COUNT; ++i) { u64 t_ssc = ssc; for (j = 0; j < SLOTS_PER_FRAME; ++j) { u64 reg = t_ssc ^ scr_code_groups; unsigned m = 0; for (k = 0; k < SLOTS_PER_FRAME; ++k) { if (!(reg & 0xF)) { m++; } reg >>= 4; } if (m > match) { *scg = i; *slot = j; match = m; } t_ssc = (t_ssc >> 4) | ((t_ssc & 0xF) << 56); } } return match; }
  7. Иногда возникает необходимость передать короткий блок, например, запрос или отклик на какую-то команду, городить ради этого несколько вариантов кодирования не целесообразно, поэтому да, для "общности архитектуры", если вы именно это имели ввиду. Ну и не стоит забывать о наличии rate matching, которое по сути кодирование повторением, в минимальную единицу ресурса вписывается несколько повторяющихся блоков длиной 20/44 бит, maximum ratio combining + короткий LDPC дают приемлемую достоверность передачи.
  8. Вопрос не совсем корректен. Они не хуже и не лучше, их используют для разных задач. LDPC эффективно работают на длинных блоках данных. Собственно в 5G есть 2 основных типа каналов - PDCCH и PUSCH/PDSCH (uplink и downlink соответственно). В канале PDCCH передаётся служебная информация с указанием какой частотно-временной ресурс какому телефону выделен и это очень короткий блок, в пределах пары сотен бит, в каналах PUSCH/PDSCH передаются собственно пользовательские данные (голос, видео, картинки и т.д.), длины блоков измеряются уже тысячами бит. Поэтому для кодирования PDCCH используют полярные коды, а для кодирования PUSCH/PDSCH используют LDPC. Похожим образом в LTE используют свёрточные и турбо коды. Результатами моделирования весь интернет забит, запросы "ldpc 5g ber" и "polar 5g ber" выдают кучу ссылок, включая matlab 5g toolbox.
  9. Интегрирование дискретных отсчётов сигнала это просто сумма N отсчётов, N определяется пределами интегрирования.
  10. Новый TDA4VM от Texas Instruments отладочную плату imx8m + 2803s - это, кстати, не отладочная плата, а готовый модуль для установки на свою плату. Судя по описанию, производитель предоставляет поддержку: To help expedite the development process, customers will be provided access to an SDK featuring drivers, prebuilt libraries, API for easy software integration, pretrained Convolutional Neural Network models and sample source code.
  11. Если используется выравнивание скорости (rate matching, применяется, например, в WCDMA и LTE), то может быть и 1 бит выброшен, и 10, и 100. Под восстановлением ТС имеет ввиду, вероятно, вставку удаленных бит, обычно с нулевым значением, без этой процедуры декодировать, понятно, не получится.
  12. Можно в "столбик" поделить, возможно это будет быстрее. Пример есть в sprp530.pdf a = (denom << normal) & 0x7fff0000; b = 0x80000000; /* dividend = 1 */ for(i = 15; i > 0; i--) b = _subc(b,a); b = b & 0x7fff; expn = (Int32) normal - 15;
  13. Так об этом в test report написано: Single precision: 816 (N=128) 1481 (N=256) Integer (32 bit): 801 (N=128) 1457 (N=256) Integer (16 bit): 454 (N=128) 743 (N=256)
  14. Порылся в загашнике, предлагают первичное обнаружение делать по энергии, а уже потом переходить к корреляциям. При таком подходе вычислительной мощности должно хватить, ещё останется. eth-30122-02.pdf
  15. При правильно настроенном кэше L1 вижу разницу в 1-2%. Всё, что требует рандомного доступа (обычно перемежитель), обязательно размещать в L2. Пользовался библиотечными FFT, комплексные и вещественные фильтры, быстрое копирование, различия на уровне стат. погрешностей. Также неплохо пользоваться "здравым смыслом". Например, в OFDM эквалайзере использовал плавающую точку, но ограничился точностью вычисления 1/Х в 16 бит (одна итерация Ньютона-Рафсона), оказалось достаточно и стало настолько быстро, что даже с фиксированной точкой не стал заморачиваться, хотя даже нашёл пример реализации для WiMax (см. вложение). sprp530.pdf
×
×
  • Создать...