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

Mister_DSP

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

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

  • Посещение

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


  1. Хочется "здесь и сейчас", горит как говорится... не было времени ждать. :) Купил LM4871MX спаял - всё заработало - даже лучше чем хотел! Во-первых: усилитель вообще не ловит никакого дерьма по питанию (а оно грязное: USB 5V). Во-вторых: ножка shutdown когда к + питанию - деактивирует усилитель (тоесть включение в даташите в выключенном состоянии). Для нормальной работы повеcить к GND. В-третьих: звук мягкий, искажений как в AD8541 нет В-четвертых: технология Boomer - экономичность на высоте В-пятых - нет шума когда на входе 0. Резисторы 2 кОм пришлось заменить на 1 ком, поднять усиление в 2 раза (реально на выходе кодека оказалось в 2 раза меньший размах напряжения) Работающая схема и макет (да, даже на таких соплях нет шумов :) ): Проблема решена. Всем спасибо за содействие! :rolleyes:
  2. Мда, засимулил секции LM4871mx и вулючил их как в даташите на 8002. Неплохо! :) Питание планирую 3,3V, выходы с кодека относительно Uref=1.65V : 0 ... 3,3V (это крайний случай). Резисторы в цепи ООС подобраны из соображений получить максимально допустимый Ky =1 чтобы не было обрезок (Ky = 2* K = 2*0.5 =1) и не слишком высокое входное сопротивление (штоб не ловить шумы с воздуха). 600 Ом - это сопротивление на которое должен быть нагружен кодек (30 Ом - 600 Ом, для малого потребления взял 600 Ом). Разделительные конденсаторы на входах по 1 мкф - для разделения уровней опоры - кодека и ОУ (в данном примере они равны, но кодек может ещё и с Uref=1.2V работать, тогда разделение будет полезно) Конденсатор на 1 мкФ (внизу) снижает усиление (в пределе в 2 раза), но нужен для фильтрации средней точки. Надеюсь LM4871 хватит, чтоб прокачать динамики 4,8,16,50 Ом (буду пробовать) без искажений звука.
  3. Отвечу сам себе - нет. Потому что внутри связь со всторым ОУ, которая в случае диффференциального включения должна быть разорвана. Зато нашлась LM4871mx - более похожа на 8002, думается что можно её вход вогнать в дифференциальный режим... Ну не пропадать же одному каналу кодека??? :) В кодеке каналы Left и Right можно сделать противофазными для работы на один наушник/динамик. Если же дифференциальное включение не делать, то прийдётся тогда стерео городить что очень не хотелось бы (динамик в рации один). Были раньше у меня мелкие трансформаторы от китайских игрушек-раций... теперь нету растерял, а те рации что сейчас - без трансформаторов. Ну не с "СЕЛГи" же трансформ огромный ставить :)
  4. Скачал даташит по Вашей ссылке, сама микросхема в месте проживания не доступна, зато доступна MC31149 которая похожа. Вот лист из даташита на 8002: А теперь возвращаемся к MC31149: Можно ли в MC31149 применить такое же мостовое включение (нужен дифференциальный вход!) как в 8002 выше на втором варианте?
  5. Vasily_, да именно такие нужны, но в магазинах(местных) их нет. Herz, динамик 8 Ом с AD8541 звучит очень с большими искажениями! Пришлось временно на 50 Ом перейти, так как по даташиту эта микросхема рассчитана именно при нагрузке 50 Ом. Звук стал тише и без искажений. На всякий случай: Белиберду с внешними комплементарными транзисторами не рассматриваю, хочется интегрированный чип, как написал Vasiliy_
  6. Может не в тему, но может интересно готовое решение: VS1053, VS1063 - доступен патч, загрузив который делает 5- полосный эквалайзер. Это позволит вашему центральному процессору разгрузиться или пустить на другие не менее важные задачи.
  7. Добрый день. Прошу простить, если написал не в тот раздел. Предо мной стоит задача: найти микросхему операционного усилителя с возможностью сделать дифференциальный вход, выходной ток при напряжении питании 3,3V должен качать динамик 8 Ом мощностью не менее 0,25 Вт. Для рации. Источник звука - кодек - выходы слаботоковые, но с дифференциальным размахом по напряжению от -3,3/2 до +3,3/2 V. Всё что в итнернете видел - готовые усилители со спрятанными цепями обратной связи, которые не дают выставить Ku=1 (нужно усиление по току! напряжение оставить тем же!) и с установленной ступенькой для однополярного режима. Пока нашёл AD8541, но он слабёхо качает динамик 50 Ом - тихо, но гораздо громче чем в наушниках, но недостаточно. На AD8541 делал повторитель с дифференциальным входом: 4 резистора по 10 кОм и средняя точка двумя кондёрами по 100 мкФ. Привлекает микросхема MC31149, но как можно её заставить работать с дифференциаьным входом? При этом K по напряжению должен быть 1..2.
  8. Да, уважаемые Милливольт и Aner были правы: бесполезно с практической точки зрения наворачиваь дополнительные корректирующие коды, когда аппаратный декодер уже выносит жесткое решение. Экспериментально я испытал 2 реализации коррекции ошибок, реализуемых программно: 1) код Рида-Соломона, о нём писал выше 2) Свёрточный кодер Витерби с перемежением и де-перемежением на приемной стороне. Выигрыша в устойчивости связи я не получил. Даже со свёрточным кодером Витерби получился проигрыш, из за того что пришлось уменьшить код-рейт аппаратной коррекции ошибок LoRa FEC чтоб уложиться в пакет с заданным битрейтом для сохранения той же чувствительности. А вот переход от CR=4/5 к CR=4/8 аппаратной LoRa FEC - действительно ощутимо даёт выигрыш! Связь устойчивая в "злачных местах" на границе приёма. Все эти выплакивания децибелл из приёмника путём заужения полосы, снижения скорости - всё в прошлом! :) Вот испытал новый LoRa-модуль LoRa1278F30 мощностью 1Вт - c MELP 2400 дало 3 км устойчивого уверенного приема: передатчик был внутри балкона, приемник во внутреннем кармане куртки !!! Ура! :santa2: Ну и с китайским Новым Годом всех поздравляю! :rolleyes: Подробнее тут: http://vrtp.ru/index.php?showtopic=27904&st=600
  9. Не помогло. И почему Skyworks? У них на деталях красуется логотип со звездами или буквы SKY. Пробовал другие фирмы чесать на предмет маркировки - у всех либо полное наименование либо пара буков. В общем похоже на что-то внутре-китайское.... и думаю что 1706 - это номер партии вообще, только по L4 искать но не находится вообще. Как быть дальше - бить голову или успокоиться? Менеджер по продажам не доступен до 6 февраля, а так хочется узнать марку этой детали (возможно это RF AMP IC, а не транзистор вовсе) заливал фотку в гугл - тоже не ищет ничего адекватного
  10. 60 просмотров и не одного предположения!!!!!!! :1111493779: А ну-ка активнее... выслушаю предположения! Ну что может стоять в цифровых трансиверах на выходе с мощностью 0,8 - 1 Вт? корпус, сорри - SOT-89 а не то как ранее написал
  11. Добрый день. В цифровом трансивере в качестве усилителя мощности (433 МГц) стоит транзистор(или модуль-усилитель) с маркировкой "L4" и ниже "1706", корпус похож на SOT-223. Помогите опознать марку! Фото прилагаю:
  12. Все кто написал ответы - верно написали! У меня была цель - я её достиг, а именно : сделать пару небольших раций с дальностью связи до 1-1,5 км при максимальных битрейтах 2400-4800 бит/с. Цель достигнута! Но захотелось большего!!! :rolleyes: А именно - проверить - что можно улучшить чтоб выжать хотя бы ещё 20-40% дальности. А вдруг в Semtech что-то сделали не совсем хорошо? Вот исходя из таких позиций хотел решить вопрос программными методами. Понятно, что нужно аппаратно решать - переходить на другую элементную базу, при условии изменения цели, например: дальность 10 км при мощностях 100 мВт на портативках с битрейтом 2400. Как вы думаете - реально(если антенны укорочены) ? В итоге восходим к теме Ане Иволгиной которая тут уже писала :) Просто был эксперимент - не более, исходя из предположения что ЛоРа ФЕК слабенький и его можно заменить программным алгоритмом... Но коль уж жёсткое решение после встроенного ФЕК декодера не обмануть и не оспорить - таки да - остальные коды - безрезультатны. Ну и по моему RFM96 может работать в сыром режиме - валить всю кашу с эфира, но она однобитовая. Ещё есть GFSK режим с отключениями преамбулы, синхры и кодового слова - может тут есть поле для улучшения?
  13. тоесть в моем случае восстановить пакет программными методами не удастся? Инными словами: Если приёмник на грани чувствительности и я не дурак, то пойму что на этот ПАКЕТ с пользой не навернуть? И всё-же я не могу точно утверждать что приемник на грани возможностей, поэтому вопрос остается в силе:
  14. При приёме сообщения от станции А станции Б может возникнуть также битый пакет "о битом пакете". Команда в лучшем случае будет проигнорирована, в худшем - исполнена некорректно. Цель другая - исправлять пакеты от передатчика, когда приёмник на грани чувствительности. Допустим преамбула и первые байты - приняты без повреждений, а вот в середине у абонента дрогнула рука на долю секунды - связь оборвалась - и середина уже байты 3-5 приняты неверно, затем абонент повернулся и конец пакета был принят без ошибок. Иными словами - вытаскивать тухлые биты и/или байты в пакете на граничных условиях приёма, там где враги: либо шум эфира, либо интерференция. Я это решил путём введения нового состояния трансивера - когда загорается лампочка фиолетового цвета - то значит пакет был подвергнут коррекции, а значит связь тут уже неустойчива. Если абонент не дурак, то поймёт что это предел возможности аппаратуры :) ++++++++++++++++++ Почитал Скляра, кое-что стало проясняться. А именно: три(!) модели канала: гауссовский, релеевский и райсовский по середине. И чтобы добиться наилучших показателей - в каждом из видов канала - выбирают оптимальный коэффициент кодирования (coderate). Для АБГШ - это 0,8 (небольшая избыточность), для Райса: 0,5-0,6 (в 2 раза медленнее скорость). для Релея - вообще -0,3 (тоесть в три раза медленнее). С такими коэффициентами - не жалко расшириь полосу и увеличить скорость кодирования в 2 (Райс) или в 3 (Релей) раза. ++++++ Ещё совсем печально стало, когда узнал что RFM96 выносит жёсткое решение: доступен только выход декодера, демодулятор не доступен и поэтому вытащить вместо одного бита хотя бы 2 или 3 не представляется возможным. А вот теперь реалия: есть RFM96 у которого данные аппаратно кодируется сверточным кодером FEC с опциями 4/5 4/6 4/7 4/8 для программиста это невидно. Имеем декодированый FEC-декодером поток уже с жеским решением: ПАКЕТ. Вопрос: эффективно ли на этот ПАКЕТ навернуть что-то (каскадные коды, турбо-коды, простой RS или просто Голей/Хемминг) - программно, чтобы потом этот ПАКЕТ, пройдя через аппаратный LoRa FEC , был более надёжнее принят? Или если на выходе трансивера жесткое решение c аппаратного декодера , то бессмысленно внедрять дополнительную коррекцию ошибок?
  15. Пробовал читать Скляра, и многих других авторов. Слишком сухо, много матана и нет практических примеров (симуляция на языке Си или хотя бы блок-схемы алгоритмов). Также нет привязки к реальным условиям. Это - беда всех книг ... Когда 2 абонента находятся в городе идут по улице между домами - какой канал - релеевский или гауссовский? Когда канал чист и никто не мешает - как это отразить в теории? Когда коды коррекции из-за требуемой избыточности вынуждают увеличить скорость - теряется чувствительность приемника. Насколько оправдана потеря 3-6 дБ чувствительности приемника при применении коррекции? Коды коррекции, часто надо найти сколько ошибок исправляют - по БЧХ замучился искать, кое-как нашел. И многое, многое другое не расписано вообще. Иными словами, проблема: как связать тот матан в книгах с реальностью? И просимулировать в программах?
  16. Взлетело ещё как! :) Залил прошивку и с напарником проверили. На граничной дальности связи были 4 вещи: 1) пакет принимался без коррекции 2) пакет принимался и успешно корректировался 3) пакет принимался и неуспешно корректировался (были артефакты в звучании) 4) пакет не принимался, приёмник спит Все 4 состояния визуально наблюдал по индикатору (светодиод R,G,B, их сочетания) выведенному из корпуса трансивера. За основу брал этот код: http://we.easyelectronics.ru/attachments/get/1392 (только РС.) Хочу свёрточный + Рид-Соломон сделать с итеративным приближением - есть ли смысл делать это для улучшения приёма пакетов в случае 3) ? Или если увлечься случаем 3) , то случай 4) будет чаще давать о себе знать - ведь бОльшая избыточность кодирования просто вынудит увеличить битовую скорость - а значит привет чувствительности...
  17. Моя задача улучшить существующий метод коррекции ошибок. Использую RFM96, LoRa FEC. Из даташита известно что он циклический. Возможные конфигурации - кодрейты:4/5 , 4/6, 4/7 и 4/8. Так как в качестве подопытного кролика использую сейчас MELP 2400, то там 1 фрейм 54 бита - с двумя пустыми битами выходит 7 байт, расчёт пакета в LoRa Calculator. Путём переборов разных сочетаний конфигураций, нашёл условия с максимальной эффективностью коррекции пакета. Ниже о них... Берём CR=4/7, это +3/4 к оригинальной длине пакета. Значит(полагая что FEC исправляет ошибки в таком же количестве как и Рид-Соломон) эффективность 21 % (отношение количества исправленных символов ко все длине). Теперь делаем второй FEC - Рид-Соломон: 7 байт данные(1 фрейм MELP) + 8 байт проверочные: RS (15,7) - такой исправит до 4 ошибок (стирания в этом случае нас не волнуют, так как между кодами LoRa FEC и RS обмена данными нет!). Эффективность такого кода-РС: 4/15 = 27 % А теперь ищем общий КПД этого итеративного(каскадного?) кодирования: 1-(1-kfec)(1-krs)=0,42 42% - тоесть около половины пакета может быть повреждено и восстановленно! Отальные конфигурации с CR=4/5 или 4/6 - дают меньший итоговый КПД, а при CR=4/8 пакет уже не проходит максимально разрешённое время (не более длительности 1 фрейма) при сохранении той же чувствительности (без увеличения скорости). Академические выкладки приложил ниже на бумаге. Как вы думаете - взлетит?
  18. Тройная кодировка хорошо, но у меня условие - код-рейт не ниже 0,5 - что допустимо увеличить пакет до 2 раз! Вот двойную бы кодировку как-нить сделать... Подумалось мне и вот что придумал: а что если брать по 4 бита квадратом 2x2 и приписывать биты чётности по строкам и столбцам - что даст ещё +4 бита - уложился в зананный код-рейт <=0.5. А корректировать просто: устанавливаем факт ошибок на столбце и строке - исправляем на пересечении :) Как такой метод коррекции? ------ По кодам Файра, да в курсе что burst-ы, но ведь это как раз и предпочтительно когда бОльшая часть пакета выбита, а пакеты короткие 2-4 байта (чистый payload.) Просто во всяких Motorola DMR и болталках сделаны короткие пакеты, иначе задержка будет огроменной по звуку.
  19. Под блоковыми имел ввиду что исправляют байт сразу, а не бит. Можно по-подробнее, желательно с названиями мягких декодеров? BCH вселяют пессимизм... Нашёл как расчитать общую длину пакета исходя из начального пакета и количества исправлений ошибок. Мой исходный пакет: m=28 бит Максимальное число ошибок при котором код ещё работает: S=7 Тогда n=m+k - общая длина кода k=CEIL(log2(n+1))*S Решив уравнение, получается что n(min)=77. Итого: чтоб исправить любые 7 битов в пакете из 28 бит, надо расширить пакет до 77 бит. И эти 7 бит уже как бы не в 28 битах исправляют , а в 77. Итого эффективность: 7/77=1/11 - это ещё меньше чем у простого (7,4). Или я ошибся? На этом фоне коды Файра смотрятся куда лучше. Вот японец изобрел код (26,16) который исправляет до 5 ошибок! эффективность выше: 5/26=0,19 http://the-art-of-ecc.com/3_Cyclic_BCH/RBDS.c Где заветные 25% исправленных бит от первоначальной(!) длины пакета?
  20. Создатель Codec2 Дэвид в своем сайте пишет, что планирует добавить FEC к своему детищу - защитив только важные биты фрейма: http://www.rowetel.com/?p=5373 читать со слов "Next Steps Some thoughts on FEC. A (23,12) Golay code........" Только что проанализировал важность битов фрейма, путём инверсии по отдельному биту и слушал результаты. В общем: важны только 13 бит из 28 - биты кодовой книги, старшие биты тона и усиления. Остальные не дают теряться разборчивости речи: попробовал занулить их - в итоге речь как была так и осталась. Так что... (13/28)*700 = 325 бит/с - до такого можно снизить битрейт. Ну а идею защиты только важных бит можно принять на вооружение. Cделал запись с занулёнными незначимыми битами, оставив 13 из 28. Звучит ИМХО не дурно, что дает 325 бит/с 325bit_from_700C.wav Код: codec2=codec2_create(CODEC2_MODE_700C); while(fread(buf,sizeof(short),320,f_in)==320) { codec2_encode(codec2,bits,buf); //bits[3]^=0x08; //01234567 (!не влияют89_10_11_12_13_14) 15_16(pitch)_17(pitch) (не влияет: 18_19) 20(усиление)_21 (не влияет: 22_23_24_25_26_27) bits[1]&=0x80; //зануляем биты 8...14 bits[2]&=0x33; //зануляем биты 18..19, 22..23 fwrite(bits,sizeof(char),4,f_out); } codec2_destroy(codec2); Выпадают пакеты при передвижении в граничных условиях когда расстояние на пределе. БЧХ поможет в этом случае? Каков выигрыш в отношении сигнал/шум ожидать - на сколько снизится?
  21. спасибо, почитаю. На счет пакетов, ведь можно не отправлять в моём случае 7 пакетов по 56 бит - можно сгруппировать в один длинный пакет, один фиг - коррекция ошибок будет просто идти на несколько блоков. Зато это исключает синхронизацию.(точнее - дает право её не делать)
  22. _4afc_, большое Вам спасибо! Благодаря Вашему примеру, я начал кое-что понимать... а именно: корректировать не испорченный пакет, а работать с группой перемежённых пакетов. В случае с вокодером Codec2 на 700 бит/с, составил свой пример: Берём 8 фреймов вокодера по 28 бит каждый - это 56 x 4 бит Далее кодируем с избыточностью (56 x 4) => (56 x 7) Перемежаем: (56 x 7) => (7 x 56) Отправляем 7 пакетов по 56 бит (по 7 байт). Декодирование в обратном порядке. Из 7 пакетов один любой может быть полностью испорчен(не подлежать восстановлению?) При 700 бит/с невосприимчивость к помехе: 56/700 = 80 мс - это два речевых фрейма Codec2 ! Итого 8 фреймов из них допускается 2 битых. Всё ли верно? Есть ли более эффективные коды, чем (7,4) - либо бОльшее число ошибок при заданной длине или более короткая длина на 1 ошибку? А если приемник не примет пакет? Будет нарушение синхронизации, в итоге все 8 фреймов потеряны.
  23. Вы представляете что такое 256 бит на скорости 700 бит/с (вокодер)? :) Это 0,73 секунды задержки звука в симплексном канале (половина времени - задержка на передачу и столько же на приём). Нужен алгоритм именно для коротких пакетов. Пока рассматриваю вот это : http://www.iz-news.ru/lect/04/ И это (клондайк программиста-цифровика :) ) : http://the-art-of-ecc.com/topics.html Ну и тут http://the-art-of-ecc.com/3_Cyclic_BCH/RBDS.c в исходнике реализация кодера/декодера (26,12) с исправлением до 5 ошибок, эффективность 5/26 = 0,192 - почти 1/5, оно эффективнее Голея и Хемминга будет :)
  24. Канал связи чистый, нужно обеспечить приём пакетов в зоне неуверенного приёма, когда к примеру приёмник зацепил преамбулу, а пакет принял с ошибками - из-за движения абонента: меняется напряженность поля и иногда пакет искажается. От такого рода нестабильностей, программно что можно предпринять (чутьё и антенны выжаты на максимум). Связь между двумя идущими по улице людьми. Исходный пакет очень короткий - 3-4 байта, допустимо навернуть до 2 раза больше, тоесть код-рейт 0,5 не ниже.
  25. Добрый день. Есть небольшой пакетик из 3..4 байт, который пуляется передатчиком в эфир потоком. Возможности организовать протокол перезапроса пакета приёмником нет и не будет. В приёмнике и передатчике требуется организовать эффективную битовую коррекцию ошибок. Читал про коды Хемминга и Голея: код Хемминга (7,4) исправляет 1 ошибку - эффективность: 1/7 Код Голея (24,12) исправляет 3 ошибки - эффективность 3/24 = 1/8 Существуют ли другие алгоритмы коррекции битовых ошибок в коротких пакетах, которые исправляют 1/4 - 1/2 числа бит от общего потока? К примеру, из общего кодового слова длиной 24 бита исправить 6... 12 бит? Каков предел эффективности? Блочные коды (работающие с блоками бит типа RS- и Turbo- code) не предлагать.
×
×
  • Создать...