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

stealth-coder

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

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

  • Посещение

Весь контент stealth-coder


  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
  16. Смысл в разработке под сигнальник без интринсиков вообще не ясен, ИМХО в этом самый цимес. Тем более, что можно основную фазу разработки провести в какой-нибудь комфортной визуал студии, используя программную эмуляцию интринсиков. Во сколько раз можно ускориться - сильно зависит от задачи и того, с чем сравнивается. Для типовых задач ЦОС обычно вполне реально. Ну и не следует пренебрегать библиотеками от техаса, тоже неплохо написаны. По поводу 30 МГц - бабка надвое сказала, downlink или uplink LTE 20 МГц с аппаратными сопроцессорами турбо и витерби обрабатывается без проблем одним ядром, т.е. сильно зависит от задачи. Если задачу можно распараллелить на много маленьких то да, в противном случае толку либо никакого, либо результаты сравнимы. Габариты, куча высокоскоростных интерфейсов прямо на СоКе без необходимости дополнительных сетевых адаптеров и мостов, аппаратные сопроцессоры декодеров, FFT, RAKE. Т.е. опять все упирается в решаемую задачу. И такое положение вещей было, в общем-то, всегда, чистая вычислительная мощность сигнальников была примерно равна процессорам от интела и амд, наличие специнструкций компенсировало более низкую тактовую (речь про задачи ЦОС, конечно).
  17. Расчет FIR фильтров с помощью БПФ и оконных функций реализован в библиотеке Intel IPP. Есть возможность скомпилировать свою кастомную DLL, включив в нее только требуемые функции. По деньгам - есть какие-то варианты ее бесплатного использования, почитайте на сайте интела.
  18. 1. Разнесенный прием: корреляционным способом определяется фаза одного и того же сигнала с каждой антенны с последующим синфазным сложением сигналов со всех антенн, максимальный выигрыш от сложения с 4 антенн 6 дБ. 2. Фазовый пеленгатор: зная взаимное расположение антенн в пространстве и фазу сигнала с каждой антенны можно получить засечку (оценку направления на источник излучения), усредняя засечки вычисляется пеленг.
  19. Умножаете текущий отсчет на комплексно-сопряженный предыдущий (для случая оцифровки один отсчет на посылку), для перехода к жестким решениям (битам) в случае BPSK взять знак действительной части, QPSK - знаки действительной и мнимой. Для случая N отсчетов на посылку нужно выбрать максимально эффективную точку, это можно сделать усреднив мощность отсчетов на некотором промежутке, выбрав каждый 1-вый, каждый 2-ой, ..., каждый N-ный отсчет и взяв те отсчеты, где усредненная мощность максимальна. Конечно, это очень примитивный метод и даже в идеальных условиях он проигрывает 3 дБ когерентному из-за того, что перемножаются 2 искаженных шумом отсчета. Алгоритм предполагает кратность частоты оцифровки скорости манипуляции.
  20. Не забывайте о пик-факторе, который в общем случае для OFDM составляет 10-12 дБ, а если модулирующий сигнал не рандомизирован, то и значительно больше...
  21. Не совсем по теме, но работать с конкретно этими трансиверами лучше на низкой промежуточной частоте при наличии вычислительных мощностей, т.е. сдвигать в ноль и дофильтровывать силами FPGA/DSP/... с целью эффективной борьбы с постоянной составляющей.
  22. Можно построить код Рида-Маллера с декодером на основе быстрого преобразования Уолша-Адамара, такой декодер, будучи блочным, может работать на честных мягких решениях без алгоритмов вроде Чейза. Пример: код Рида-Маллера (32, 10), используемый для кодирования бит TFCI в 3G (UMTS). Информации в интернете полно, например погуглите патент US20140169273A1.
  23. Если вы что-то там не нашли означает что этого нет? Я не буду рыться в стандарте и искать, мне это не нужно, вы задали вопрос и я вам подсказал что в других стандартах этого же разработчика конкретные величины EVM указаны, из этого можно сделать предположение что они указаны и для DMR. При том что без настроенного аналогового приемо-передающего тракта радиосвязи не будет совсем или будет на небольшой дальности. Передающего. В сторону уменьшения для достижения заданных требований. Резко уменьшится дальность радиосвязи. Когда сами разберетесь, тогда и будете делать выводы.
  24. Предельные требования обычно в стандарте указаны, по крайней мере для 2G/3G/4G есть, т.к. DMR тоже ETSI, то в каких-нибудь "MS requirements" надо искать. Зачем оно понятно - это требования к настройке аналогового тракта, который, в отличие от цифры, от экземпляра к экземпляру отличается.
×
×
  • Создать...