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

Quasar

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    4

Весь контент Quasar


  1. Приветствую. Интересует алгоритм приема C4FM и вообще 4FSK модуляции. Конкретно интересует APCO P25. Собственно схема, по ТЗ должна быть такой: В сети есть варианты демодуляции, один вариант в GNU Radio, он работает, но дает некоторый BER, даже в ближней зоне. Обязательным условием в ТЗ является частота дискретизации АЦП после FM демодулятора – 8 КГц. Демодулятор из GNU Radio, мне так кажется, именно из-за этого (частоты дискретизации) имеет проблемы с символьной синхронизацией, давая иногда не нулевой BER даже в ближней зоне. Этот демодулятор состоит из полифазного ресемплера, и делает ресемпл из входной частоты дискретизации до частоты дискретизации 4800, и по идее, в каждом отчете уже должен быть символ, ждущий принятия решения, что это за символ (-3, -1, +1, +3). Но видимо из-за того, что входная частота 8КГц некратна 4800 Гц, в ходе передискретизации не всегда символы оказываются ровно внутри семпла. (Хотя может быть я чего-то здесь недопонимаю) Реализация 4FSK из GNU Radio тут Попробовал написать свой, схема ниже: Синхронизация производится по поиску максимальной корреляции в FIFO, по преамбуле APCO-P25. В FIFO кладу семплы повышая частоту семплирования с 8КГц до 24КГц, интерполируя Raised Cosine фильтром, представленном в стандарте, для модулятора. Засинхронизироваться вроде удается, так как значение корреляции получается 216, это значит совпали все символы, но остальная часть сообщения принимается с диким, BER порядка 20%. Вопрос, на сколько вообще реализуем мой метод демодуляция, с настройкой тайминга в начала пакета или обязательно надо подстраивать положение символов в ходе приема остального пакета? (Как это например сделано в GNU Radio)
  2. Все компоненты которые применяются могут питаться от диапазона напряжение от 2 до 3.6 вольт, собственно меня беспокоит вопрос, если я поставлю диод, на нем будет падать 0.6 В, при полностью заряженном АКБ, до микросхем дойдет ровно 3.6 В. Вроде бы все ok, но не может быть такого, что АКБ начнет давать 4.3 внезапно? Вроде на АКБ стоят какие-то платы защиты, но я не имею статистики, на сколько точно 4.2 В держится на полностью заряженном АКБ, бывают ли отклонения в большую сторону от экземпляра к экземпляру?
  3. Приветствую коллеги. Во вложении представлен фрагмент схемы, задача сделать девайс, который в выключенном состояние потреблял бы не более 10 мкА и питался бы от АКБ LiPO 3.7V. Все бы хорошо, но выяснилось, что LP2985 потребляет порядка 60 мкА, что выходит за рамки приличия. Собственно, появилась мысль, запитать от LiPO аккума через диод. Контроллер и остальная периферия по документации могут работать с напряжением до 3.6 В. Но мучают сомнения, все таки таких девайсов планируется выпустить порядка 100 штук, не огребу ли я проблемы от подобного рационализаторства?
  4. Да что вы в самом деле! Если все автоматизировать, то кто же тогда работать будет? Контроль и формализация? За слово "контроль" вас вообще здесь побьют, причем возможно по лицу :-)
  5. К сожалению нет. Накапливаются файлы типа: Это в случае если человек сгенерил 3 рабочих версии за день. А очень часто любят еще и даты не ставить: Конечно. Как архив назовешь, так он и поплывет. Я когда-то устраиваясь на работу, разгребал архивы предыдущих разработчиков, видел там 100%_worked и т.п.
  6. Стесняюсь спросить, а под какую версию тулчайнов были написаны lwIP, FreeRTOS, Linux и eCos? И не подскажете, где бы мне взять виртуалочку к каждому из перечисленных кодов, ну или архивчики lwIP_100%_worked(2)_10.05.2014.rar, FreeRTOS_not_worked_12.12.2012.rar? Кстати, объясните пожалуйста, а зачем любители архивов, типа вас, добавляют в имена слово worked? А чем был заморочен народ в проект Фобос-Грунт? Архивчик перепутали?
  7. Система контроля версий это банальная культура производства и стремление повысить эффективность. Можно процесс оптимизировать, а можно по старинке... У меня бабушка, живущая в деревне, до сих пор не понимает зачем ей водопровод в доме, ведь можно с коромыслом и ведрами дойти до колонки. Именно из-за личностей отрицающих прогресс Россия и находится в ж.. по производительности труда.
  8. Я не пользуюсь Total Commander, зачем мне еще одна сущность? Я знаю только rar и больше ни чего знать не хочу
  9. Ну например, периодически наблюдаю такое у некоторых коллег. Пишется код на двух машинах, ноутбук и десктоп. Бац, нашли ошибку (баг №1), разработчик на ноутбуке её исправляет и прошивает изделия, вроде бы проблема исправлена, забыли. Код заархивировал и заботливо слили на флешку с именем my_project (612098423435225).rar. Через какое-то время обнаруживается новый баг (баг №2), ноутбук дома, баг начинают исправлять уже на десктопе, позабыв разархивировать туда свой my_project (612098423435225).rar. "Ура, баг номер 2 исправили! Хм, странно, а почему опять проявляется баг номер 1? И что я там правил, кто мне напомнит?"
  10. Отключил FLASH_ACR_PRFTEN. После этого, пока не было ни одного Hard_Fault. Я как-то и падения производительности не заметил. Сейчас 5 фильтров IIR использующих FPU крутятся и 50 частот обрабатывается алгоритмом Герцеля + Speex. Хватает еще и на сеть вполне. По поводу оптимизации LwIP, это тот который в STM32Cube идет. То есть, я его ни как не правил, наверное его ни кто не оптимизировал под Cortex.
  11. Переразвел немного железку, увеличил стеки, перетащил работу FPU в один поток. Все равно продолжились вылеты. То NOCP, то Undefened Instruction. Отключил префтеч. буфер, HardFault'ы как рукой сняло.
  12. Ну если вам надо принимать C4FM и pi/4-DQPSK то описанный мной метод не подходит, а если только C4FM, то подходит. GNU Radio это демонстрирует на практике. Судя по моим испытаниям, в GNU Radio не очень хороший пакетайзер, он далек от стандарта, но C4FM демодулятор включенный в выход дискриминатора работает хорошо. Плюс, я как-то не совсем понимаю, а где на практике используют PI/4 DQPSK в APCO? Все системы в РФ используют C4FM, причем вроде как даже Simulcast системы. PI/4 DQPSK задумывалась ведь как LSM модуляция для Simulcast, но по-моему не многие терминалы могут такое принять и как следствие используют C4FM. В профессиональных решениях такой подход (забирать сигнал с Discriminator Tap обычных NFM приемников) тоже используют, при реализации SDR решений P25, например компания Raytheon так делает http://www.raytheon.com/capabilities/rtnwc...5_manua_pdf.pdf
  13. Судя по даташиту вполне должно принять. Я только не понял, зачем нужен дифференциатор и Integrate&Dump? Обычно C4FM принимают на обычный FM приемник, забирая сигнал с дискриминатора, убирают постоянную составляющую, производят символьную синхронизацию. По уровню во время каждого символа принимают решение, какой дебит принят. А вот пакетайзер в этой микросхеме принимать P25 не сможет, я так понимаю его надо выключать, забирая сырой битовый поток.
  14. STM8L101F1 QFN20

    Ну да, как вариант можно и это использовать. Спасибо.
  15. STM8L101F1 QFN20

    Собственно ищу STM8L101F1 в QFN20, в Терре, Промэлектронике и Чип и Дипе нету, где можно найти штучек пять, для прототипа? Интересует Москва или около.
  16. А в чем платы разводите?
  17. А как и кем они должны учитываться? Вот здесь сказано только про регистры?
  18. Идея правдободобная если учитывать тот факт, что у меня действительно два потока используют FPU, но в моей версии FreeRTOS, контекст переключается приведенной ниже функцией, там есть проверка на использование FPU: __asm void xPortPendSVHandler( void ) { extern uxCriticalNesting; extern pxCurrentTCB; extern vTaskSwitchContext; PRESERVE8 mrs r0, psp /* Get the location of the current TCB. */ ldr r3, =pxCurrentTCB ldr r2, [r3] /* Is the task using the FPU context? If so, push high vfp registers. */ tst r14, #0x10 it eq vstmdbeq r0!, {s16-s31} /* Save the core registers. */ stmdb r0!, {r4-r11, r14} /* Save the new top of stack into the first member of the TCB. */ str r0, [r2] stmdb sp!, {r3} mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY msr basepri, r0 bl vTaskSwitchContext mov r0, #0 msr basepri, r0 ldmia sp!, {r3} /* The first item in pxCurrentTCB is the task top of stack. */ ldr r1, [r3] ldr r0, [r1] /* Pop the core registers. */ ldmia r0!, {r4-r11, r14} /* Is the task using the FPU context? If so, pop the high vfp registers too. */ tst r14, #0x10 it eq vldmiaeq r0!, {s16-s31} msr psp, r0 #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata */ #if WORKAROUND_PMU_CM001 == 1 push { r14 } pop { pc } #endif #endif bx r14 nop nop }
  19. Я честно говоря не совсем понял, когда случается exception чего должно быть в LR? Адрес где случилось прерывание или 'EXC_RETURN values' где все биты с 32 по 5 единица? Или EXC_RETURN должен загрузиться в LR только после команд BX, LDM, POP?
  20. По поводу софта, если сократить прослойку вылетать перестает, НО перестает вылетать, даже если добавить какой-либо новый код к старой прослойке (FreeRTOS и LwIP), вроде как забываешь о проблеме, потом добавляешь еще код, опять начинается. То есть, образ софта немного меняется и ход исполнения соответственно тоже, вылеты исчезают. Почему я и подозреваю, что железо. Тот дамп что скинул, он без отладчика, просто, в UART скинут. Код вот такой: HardFault_Handler\ PROC EXPORT HardFault_Handler [WEAK] TST LR, #4 ITE EQ MRSEQ R0, MSP MRSNE R0, PSP B hard_fault_handler_c ENDP void hard_fault_handler_c (unsigned int * hardfault_args) { __IO unsigned int stack_ptr; __IO unsigned int stacked_r0; __IO unsigned int stacked_r1; __IO unsigned int stacked_r2; __IO unsigned int stacked_r3; __IO unsigned int stacked_r12; __IO unsigned int stacked_lr; __IO unsigned int stacked_pc; __IO unsigned int stacked_psr; stack_ptr = ((unsigned long) hardfault_args); stacked_r0 = ((unsigned long) hardfault_args[0]); stacked_r1 = ((unsigned long) hardfault_args[1]); stacked_r2 = ((unsigned long) hardfault_args[2]); stacked_r3 = ((unsigned long) hardfault_args[3]); stacked_r12 = ((unsigned long) hardfault_args[4]); stacked_lr = ((unsigned long) hardfault_args[5]); stacked_pc = ((unsigned long) hardfault_args[6]); stacked_psr = ((unsigned long) hardfault_args[7]); printf ("\n\n[Hard fault handler - all numbers in hex]\n"); printf ("stack_ptr = %x\n", stack_ptr); printf ("R0 = %x\n", stacked_r0); printf ("R1 = %x\n", stacked_r1); printf ("R2 = %x\n", stacked_r2); printf ("R3 = %x\n", stacked_r3); printf ("R12 = %x\n", stacked_r12); printf ("LR [R14] = %x subroutine call return address\n", stacked_lr); printf ("PC [R15] = %x program counter\n", stacked_pc); printf ("PSR = %x\n", stacked_psr); printf ("BFAR = 0x%x\n", (uint32_t)(*((volatile unsigned long *)(0xE000ED38)))); printf ("CFSR = 0x%x\n", (uint32_t)(*((volatile unsigned long *)(0xE000ED28)))); printf ("HFSR = 0x%x\n", (uint32_t)(*((volatile unsigned long *)(0xE000ED2C)))); printf ("DFSR = 0x%x\n", (uint32_t)(*((volatile unsigned long *)(0xE000ED30)))); printf ("AFSR = 0x%x\n", (uint32_t)(*((volatile unsigned long *)(0xE000ED3C)))); printf ("SCB_SHCSR = 0x%x\n", SCB->SHCSR); memstat (); while (1); } Попробую.
  21. STM32F417 вылетает в Hard Fault

    Приветствую. Есть самодельная плата на STM32F417 c Ethernet, LwIP и FreeRTOS. Она периодически улетает в Hard Fault, дамп привожу ниже. Улетает она с причиной NOCP. Сначала думал FPU, но он включен, и вроде как исправно работает, на камне крутятся два фильтра, использующие FPU. Также, судя по дампу, вылет случается не на операции с плавающей точкой, а на операции UXTAH (см. приложенные картинки). Есть подозрения, что проблема аппаратная, так как, на втором экземпляре слёт случается сильно реже, но все равно случается. Но мне не ясно, почему именно на это инструкции вылетает исключение? Может кто посоветует направление, где искать?
  22. Есть задача написать код на языке С кодирующий и декодирующий данные, каскадного кода Рид-Соломон+Хэмминг. Заинтересовавшихся просьба откликнуться в почту, в ответ вышлю pdf с более подробным ТЗ. Техническое задание будет представлять из себя выдержку из существующего стандарта связи. Соответственно, нужен человек, который прочитает ТЗ объемом около 4 странниц (на английском), поймет, что в нем написано :-), реализует алгоритм согласно этому ТЗ. Как результат, я должен буду получить С и H файлы исходного кода - вы деньги, более подробно в ЛС или на почту job.andrei ( wink.gif ) gmail.com Город в котором будет находиться исполнитель неважен, задача личных встреч не требует.
  23. Есть задача нарисовать схему и оттрассировать ПП. Схема будет рисоваться с существующего дев кита на STM32, с выкидыванием всего лишнего и добавлением нескольких резисторов. Далее, необходимо будет оттрассировать ПП для существующей схемы. Как результат, я должен буду получить файлы проекта PCAD (или Altium) вы деньги :-), более подробно в ЛС или на почту job.andrei ( ;) ) gmail.com Город в котором будет находиться исполнитель неважен, задача вроде как не требует личных встреч.
  24. Корпус на кабель

    Нужен корпус на кабель, с кабельными вводами как на картинке, может кто подскажет где можно найти? Количество 100-300 штук. Размеры примерно 30x50x10.
×
×
  • Создать...