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

Mister_DSP

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

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

  • Посещение

Сообщения, опубликованные Mister_DSP


  1. Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти

    Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?

    Всегда делал вот так:

    #define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/
    #define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/

     

    Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! :)

  2. Лично мне кажется, что для Вашей РС этот кодек будет предпочтительнее...

    Кодек2 версии 700С долго не хотел нормально работать на STM32.

    Оказалось, что одна функция всё тормозила.

    Подробнее с выкладками здесь: http://vrtp.ru/index.php?showtopic=27904&st=540

     

    Вот как звучит детище Дэвида на моём детище:

    David_700C.rar

     

    Конечно не фонтан, но лучше чем предыдущие версии кодека 700А и 700В.

  3. Вышла новая версия Codec2 - добавлен новый режим на 700 бит/с (версия "C").

     

    Подробно про кодек здесь:

    http://www.rowetel.com/?p=5373

     

    Сорцы с модом 700C пока находятся только в этом репозитории:

    https://svn.code.sf.net/p/freetel/code/codec2-dev/

     

    Скомпилировал кодер и декодер под Win32:

    Codec2_700C_Win32.zip

     

    Пример голосов сжатый 700С (по ГОСТ-у):

    Codec2_700C.wav

     

    ИМХО, звучит очень даже хорошо...

     

    Милливольт, вы не могли бы оценить качество/разбочивость этого кодека по выложенному звуковому образцу ну и прогнать через кодек свои тесты(программы выше)?

     

  4. Диоды выполняли требуемую функцию если Ку был выставлен правильно. Разборчивость была исключительной...

    я так делал в передатчике на VHF диапазон (два встречнo-параллельных диода в сборке BAV99):

    http://vrtp.ru/index.php?showtopic=26250&st=120

     

    post-94050-1484314972_thumb.jpg

  5. Всё закончилось тем, что файлы библиотеки (c- h-) были проинклудены в одном main.c и с небольшими доработками скомпилировались....

     

    А вот как ограничить видимость имён в пределах одной статической библиотеки - не нашёл.

    Читал про __attribute__(visible("hidden")), namespaces всякие - не помогло!

  6. Добрый день.

     

    Создаю библиотеку (lib) в Keil по исходникам из множества файлов.

    Затем получившуюся библиотеку пристыковываю к другому проекту (главному).

     

    При линковке выдаёт ошибку: найдены одинаковые имена в libfile.o и module.o

     

    Исходные тексты программ не моего авторства, около 100 имён совпадает, так что переименовывать не вариант.

     

    Пробовал static приписывать к библиотечным функциям, в итоге линковщик слинковывает функции из основной программы, а библиотечные пишет что объявлена, но неиспользуется.

     

    Вопрос вот в чём: как изолировать функции библиотеки, чтоб они не выпирали в основном проекте, чтобы можно было использовать одинаковые имена?

     

    Может флаг компилятора/линковщика есть - по умолчанию все имена делать невидимыми?

  7. Если же МЕЛПовскую запись подать на компрессор типа полулогарифматора, то эти претензии уходят. Но получается очень жесткий и шумный сигнал, похожий на «поехали!» применявшийся в старой космической связи. Но разборчивость растет.

     

    Фиг его знает, все члены семьи понимают друг друга что на 2400 что на 975. На последнем правда на фоне шумов автотрассы тяжеловато.

     

    Вы можете привести формулу закона полу-логарифматора? Хотел бы поэкспериментировать...

     

    Y=A*LOG(B,X);

     

    Y- выходной отсчёт

    X - входной отсчет

    A - коэффициент

    B - основание логарифма (какое? 2, e, 10, ..?)

  8. Милливольт, хочу поинтересоваться у вас как специалиста по разработке вокодеров.

     

    Можно ли звук, приложенный ниже сжать эффективно до 300 бит/с и меньше, но так чтоб разборчивость была ОЧЕНЬ близка к оригиналу?

     

    В исходном звуковом образце частота дискретизации 6 кГц и данные пропущены через LPF со срезом 3 кГц. И потом через HPF со срезом 1 кГц. Затухание обоих фильтров 48 дБ/окт.

    Итого имеем речевой сигнал очень обеднённый но разборчивый: 1-3 кГц тоесть ширина 2 кГц.

     

    Его можно эффектно пожать?

    Я так понимаю, что ни один из известных вокодеров здесь не подойдёт.

     

    Каков вообще должен быть принцип?

    Найти коэффииенты LPC? Сколько минимум их надо? Векторное квантование ?

     

    По моим прикидкам чтобы сделать 500 бит/с - надо не более 24 бит (5 бит - энергия, 7 бит - основной тон, 1 бит - тон/шум, 11 бит - LPC коэффициенты или ссылка из кодовой книги по векторнуму квантовани.) При этом фрейм выбран 48 мс (оптимально 20 - 40 мс) - но терпимо.

     

    в какую сторону плясать?

     

    подозреваю такие кодеки пишут под заказ для ФСБ или аналогичных структур. везде кодеки с телефоноподобным речевым сигналом(диапазон 0-4 кГц)

     

    LPF3kHz_HPF1kHz___6khz.wav

  9. Сделал несколько звуковых проб по ГОСТ-овским фразам для телефонии, фраза специально адаптирована для групп звуков.

     

    В пробах в отдельных папках несколько мужских и женских голосов.

    Женские голоса, как оказалось, воспроизводятся хуже.

     

    a) Оригиналы - оцифровки с сэмплрейтом 8 кГц - то что подаётся на вокодер:

    http://vrtp.ru/index.php?act=Attach&ty...t&id=721167

     

    b ) MELP 2400 bps (Federal Standard - orig.) - оригинал на 2400 бит/с

    http://vrtp.ru/index.php?act=Attach&ty...t&id=721169

     

    c) MELP 1500 bps (modified) - модифицированный вариант на 1500 бит/с

    http://vrtp.ru/index.php?act=Attach&ty...t&id=721170

     

    d) MELP 975 bps (modified) - модифицированный вариант на 975 бит/с

    http://vrtp.ru/index.php?act=Attach&ty...t&id=721171

     

    e) Car Noise +12dB - оригинал/2400/1500/975 бит/с на фоне шумов авто-трассы, +12 дБ.

    http://vrtp.ru/index.php?act=Attach&ty...t&id=721172

     

     

     

    Подробнее: http://vrtp.ru/index.php?act=categories&am...mp;article=3660

  10. Попробуйте, и оппонент пусть попробует. Сразу будет нагляднейшая иллюстрация

    А если Вы еще и 600 битовые иллюстрации сделаете, то будет вдвойне убедительно: почему Вы выбрали именно такой битрейт, а не другой.

    А он и не сможет попробовать, так как он вырвал откуда-то тот звуковой образец. Или лукавит, боится обнародовать свой вариант прежде времени.

     

    Согласен с вами, что тестировать надо на ГОСТовских фразах, одно непонятно -мне в микрофон их говорить или заливать во Flash именно голоса этих дядей/тёть? :)

     

    Желаю Вашему изделию всяческих успехов и широкого применения.

    После небольшой передышки возобновлюсь.

     

  11. Добрый день.

     

    Через aliexpress оформил покупку, оплатил её. Продавец подтвердил покупку и в персональных сообщениях написал, что через сутки отправит.

     

    А также в тексте письма написал: "May I know your application and ODM ?"

    Вот это меня немного напрягло.

     

    Полез в гугл, википедию, оказалось что ODM - это original design manufacturer.

     

    К тому же, глагол "may" в английском языке означает лишь просьбу, а не требование. Но тем не менее, зная тонкости английской дипломатии, опасаюсь отмены заказа со стороны продавца (деньги оплатил, заказ нужен сильно)

     

    Проигнорировал его просьбу, ничего не написав.

     

    Вопрос в следующем: что мне обычному радиолюбителю написать продавцу, если он всё-же будет настаивать на предоставлении ему ODM и указания target?

     

    Можно ли так написать: for home use only, no commerce, only hobby? Или не поймут - отменят?

     

    Перешерстил весь гугл - решения не нашёл, продавец один (китайская фирма по изготовлению цифровых модулей трансиверов)- на али других нет.

     

  12. удалось добиться чутья приёмника -130 дБм, что дало возможность связаться стабильно на 3 км по прямой в городе без прямой видимости на антенны-четвертухи с другим абонентом находящимся на улице.

     

    смог прокачать LoRa-модем вокодером с битрейтом 975 бит/с. качество речи удовлетворительно - не мямлит и не робот....

     

    с операторами поругался (кто принимал участие в испытаниях) - забраковали режимы Codec и MEL всё что ниже 800 бит/с.

     

    Пришлось остановиться на -130 дБм.

     

    С кодек-2 на 300 бит/с чутьё было -135 дБм, но звук вообще никакой.....

     

    Последение новости проекта с вокодером тут: http://vrtp.ru/index.php?showtopic=27904&st=390

     

    утолкал в корпус, сделал две:

     

    post-94050-1483805088_thumb.jpg

     

    протокол испытаний прошивки на 1500 бит/с:

     

    post-94050-1483805139_thumb.png

  13. Ого какой редкий кодек поставили. Не слабоват ли канал для такого?

    Если использовать только VS1063, то это : MP3, OGG Vorbis, IMA ADPCM, a-law, u-law - всё испытывал - работает, звук отличный даже на 64 кбит/с (моно), на 96 кбит/с вообще натурально звучит! Это профили используются, когда нужен качественный звук и дальность в районе 300-500 м.

     

    С использованием мощей STM32 становится доступно пускать вокодеры - портировал Codec2 (450 бит/с, 700 бит/с), MELP 2400 бит/с - с него рожал MELP 1200, 600, и даже 400, 300 бит/с.

    С уменьшением битрейта дальность растёт, а звук на грани разборчивости. Компромиссно на 600 бит/с. Хорош звук на 2400. На 300 - уже похож на роботоподобный.

     

    Последние статьи по LoRa говорят, что он сильно деградирует когда вокруг появляются LoRa-сети

    К счастью, пока не коснулось. О LoRa-сетях мало кто слышал в том месте где я живу...

    Кроме LoRa, чип может FSK, GFSK, OOK. Минимальная полоса пропускания приемника до 5,4 кГц !

     

    Какая мощность, что интерференция, на каком битрейте остановились?

    В текущей прошивке :

    мощность 50 мВт (есть возможность до 100 мВт раскачать)

    битрейт 2400 бит/с (есть возможность до 300 бит/с - ещё не все прошивки зарелизил)

    в LoRa режиме интерференция не проявляет себя на ближней дистанции (до 1 км),

    в (G)FSK режимах интерференция есть даже в ближних зонах (десятки метров)

     

    Пока пакет очень короткий, имеет присутствие сильного оверхеда пакета из-за длинной преамбулы.

    С длинными пакетами можно вытянуть чутье на 3 дБ лучше, тогда возрастёт латентность (задержка речи) на низких битрейтах на 1..3 с.(в зависимости от конфигурации).

     

    P.S. С кодеком забрезжил рассвет. Ряд начал сходиться, и алфавит перестал разбухать. Оказалось, пирсоновский коррелятор неприменим для случая оценки ортогональностей вокодерных спектров (умом двинуться: это как ножовка режет в доме, режет на улице, а в сарае не режет даже дерево). Нигде в литературе и намека на это не встретил... Пришлось рожать специальную функцию.

    Вам проще! Потому что моих знаний пока хватило на то чтобы из 2400 сделать 600/300 бит/с путём объединения фреймов в мультифрейм.

    Разработать вокодер с нуля я не умею! :)

     

    Кстати, интересный побочный выхлоп: вполне пристойно работает обычный (т.е. без алфавита) вокодер на скорости 800-600 при передаче только трех главных частотных компонент и непередаче амплитудных характеристик вообще(!). Звук, понятное дело, компрессированный, но для радиосвязи самое то.

    В служебной р/связи остановились на 600 бит/с.

    Хотя есть некий twelp с 300 бит/с, и даже видео на ютубе про него, но я, просмотрев и послушав, пришел к выводу, что это - утка!

    "Не верю!" - одним словом! :)

     

    На 300 бит/с Codec2 звучит с хрустом, а в MELP 300 голос в робот-стиле.

  14. Кстати, шьет действительно без ресета, но только один раз! Потом нужно отключать от USB и снова включать! тогда шьется повторно.

     

    Программирую программатором, который входит в состав STM32F4discovery, откинув пару джамперов для доступа к SWD.

     

    вот сам девайс:

     

    post-94050-1482664527_thumb.jpg

  15. Спасибо за содействие!

     

    Проблема решена.

    Почитал ST-Link Utility UM.pdf, на стр. 24 ответ на мой вопрос:

    User Configuration option bytes – WDG_SW: If checked, the watchdog is enabled by software. Otherwise, it is automatically enabled at power-on.

     

    короче, по дефолту не был отмечен и watchdog работал постоянно после подачи питания. поставил галочку - теперь вачдог доступен программно, но не работает при включении.

     

    прошивка завелась как надо, вс работает как часы! :)

     

    ///

    Подобная проблема была когда занимался с FPGA, долго не мог понять, почему не прошивалась - нужно было флажок поставить в одном месте.

    Хотя на девборде он был не нужен (или уже выстввлен - не помню...)

    ///

  16. Спасибо за ответ, это побудило меня просмотреть отладчиком некоторую конфигурацию.

    С STM32 работаю впервые, начал с отладочной платы, в которой очевидно - всё настроили без меня...

     

    Пляска началась когда впаял новый камень - вылезла вышеуказанная проблема.

     

    Прошу помочь подсказать что нужно отметить или убрать, окошко ниже:

     

    post-94050-1482651256_thumb.jpg

  17. Добрый день.

     

    Столкнулся п проблемой.

    Рабочий код под STM32F407 на дискавери не идёт на релизной плате на STM32F405RG.

     

    Происходит постоянный Reset каждые 0,5 с. Установил экспериментально, зажигая светодиод и устанавливая задержку.

    Кнопка Reset в состоянии отжатия (не залипнута), Reset подтянут к питанию через 100 кОм.

     

    Для программирования использую STM_Link utility, а именно ST-LINK_CLI.exe.

    Так как я не вывел RESET на программатор, приходилось вручную нажимать его и удерживать, затем отпускать при программировании.

    В итоге видимо, донажимался... что теперь работает не так как надо.

     

    Схема включения STM32F405:

     

    post-94050-1482647867_thumb.jpg

     

    Программатор теперь выдает ошибку (кнопку Reset удерживать при программировании теперь не требуется):

     

    post-94050-1482647991_thumb.jpg

     

    Пишит, что часть секторов флеша под защитой. Раньше такого не было.

    Возможно, после того как стало, стали глюки в работе контроллера.

     

    Почему контроллер каждые 0,5 с уходит в Reset?

  18. Сегодня при согласовании времени доставки вышли проблемы.

    Заказывал в Терраэлектронике, заявка оформилась через "Электронщик".

    В данных указал свой действующий номер телефона.

    Выяснилось, что службе доставке сообщают мой старый(неактивный) номер телефона и со мной не смогли связаться.

     

    Почему нет синхронизации между тем что я ввёл и между тем что говорят доставке?

  19. Пока вы не разрешите прерывания от ног 5-7, 9 в регистре EXTI->IMR, они не будут выставлять свои флаги и не будут вызывать прерывание. Как это делается в SPL или кубах - понятия не имею. В обычной жизни для этого достаточно одной строки записи в регистр.

    Так речь идет о том, что как раз я и разрешаю прерывание и оно в первый раз случается без воздействия внешнего устройства (источника прерывания).

    Подозреваю, что такое поведение возникает из-за запоминания контроллером состояния перепада уровня при настройке портов.

    А вот со второго раза и далее - прерывания уже идут в тему - от устройства.

  20. Отличный магазин, "сестра" другого магазина: electronshik.ru - прайсы и оформление заказов - те же. И менеджеры вроде тоже.

    Заказываю с оплатой курьеру при получении.

     

    Из мелких минусов:

     

    1) Иногда забывают указать контактный телефон получателя - приходится самому по номеру накладной пасти посылку и созваниваться с доставщиками

     

    2) На демо-платах могут младшие версии чипа отсылать: покупал у них плату с MP3-декодером: на картинке была VS1003, а прислали более младшую ревизию платы с чипом VS1011E, которая без микрофона и без режима записи... Не очень приятно было. Но возвращать и предьявлять недовольство не стал.

  21. 28 dBm, зачем мне такое? Не, не надо. И тут зависимость от поставщика и отсутствие совместимых точек навроде "все по 39 рублей" (это для портативных). Вот не понимаю, как они антенну +8 дБи 900 МГц сделали в таком маленьком корпусе.

    На такой частоте простейшие антенны будут маленькие.

    MMANA в помощь!

    Ну или уравнения Максвелла... :)

     

    Также не следует забывать что усиление антенны достигается путём перераспределения излучаемой мощности в пространстве - рискуете получить секторную ДН или сплюснутую круговую, что ухудшает условия приема, когда абоненты могут быть в любой точке пространства.

  22. Спасибо за внимание.

     

    Сделал как hd44780 написал - работает, глюки пока не обнаружены.

     

    EugenPKH, прерывание по перепаду состояния, а не по уровню. Там же ТАКЖЕ сбрасывается бит ВНЕШНЕГО устройства. Так что при любом желании, оно повторно не выскочет.

     

    Вот зато есть такая особенность: при включении питания прерывание срабатывает сразу в первый раз!

    Приходится программно игнорировать первое вхождение:

     

    static char f=0;
    if(!f)f=1;
    else
    {
    //...делаем полезное...
    }
    

     

    При этом порты инициализируются раньше, чем разрешаются прерывание.

    И такое на AVR-ках тоже было.

     

    Как можно это устранить?

×
×
  • Создать...