На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 41,
участников - 4 [ geka, СМЕРШ, zhenya_yalta, Rock-n-roller63]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Радиосигналы —› Раскодировка тонового набора 
Блоки питания для радиотехники: Ajetrays, Alan, Manson, Optim, RM, Vega, Yaesu, Энергомаш


Alan K35
(1 Ампер)
руб.

RM LPS 105
(5 Ампер)
руб.

Manson SPA-8100
(10/12 Ампер)
руб.

Optim PS-20
(20/22 Ампер)
руб.

Vega PSS-3035
(30/35 Ампер)
руб.
 Страница:  ««  1  2  3  4  5  6  »»Поиск в теме
Автор Сообщение
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 30 Окт 2010 11:12:58 #  

amx Гм, это старые буквари. В новых юзают FFT через алгоритм Герцеля. Ну да это я так. К слову.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2010 17:44:31 · Поправил: Programmist (30 Окт 2010 18:15:40) #  

Накопал тут Герцеля, в основном все на С++ или вообще на каких-то непонятных языках. Буду переводить, что получится - не знаю. Скорее всего, нужно будет 2-е гармоники из 8-ки учитывать.
По таблице считать пробовал, не могу сказать, что быстрее, только точность хуже. Наверно это уже от процессора зависит. Иногда, если нужно что-то тяжелое делать, создаю несколько больших массивов, при старте программы заполняю их по формулам, ну а потом уже оттуда беру. Вроде как быстрее, чем Const получается.

P.S. Не решается задачка по классике. Было бы здорово, но где взять правильный уровень неизвестной частоты для сравнения с 8-мью известными? Вот и приходится устраивать танцы с бубном и граблями.
Реклама
Google
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2010 22:42:49 · Поправил: Programmist (30 Окт 2010 23:30:20) #  

Ну и перевел, с этого http://ptolemy.eecs.berkeley.edu/papers/96/dtmf_ict/www/node3.html на это: http://www.radioscanner.ru/uploader/2010/calcfreqgoertzel.txt
Для вычисления частоты не годится (очень к фазе чувствителен), первая функция работает намного лучше, или без квадратурных смесителей не обойтись.
Пример тестовой программы с исходным кодом здесь: http://www.radioscanner.ru/uploader/2010/dtmftest.rar
Тестовый сигнал можно подать вот этим: http://www.radioscanner.ru/uploader/2010/10x_generator.rar
Частоты DTMF указаны в начале исходника TxMain.pas.
Конечно, оно работает, но через пень-колоду. На примере все сразу видно.

Буду очень рад, если кто сюда что-нибудь лучше первой функции напишет.
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 30 Окт 2010 23:42:18 #  

P.S. Не решается задачка по классике. Было бы здорово, но где взять правильный уровень неизвестной частоты для сравнения с 8-мью известными?

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

то есть сигнал есть, если для трех уровней

A1>A2>A3 справедливо:


A1< A2*3

и

A2 > A3*3

и частоты с уровнями A1 и A3 попадают в разные группы.

А1, A2, A3 определяются квадратурным детектором.
Каким образом их вычислять - обычным БПФ , герцелевым БПФ или просто ПФ (то есть обычным перемножением на sin и cos) - это уже детали реализации, влияют только на сорость вычислений.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2010 23:56:32 · Поправил: Programmist (31 Окт 2010 00:04:09) #  

Спасибо, теперь понял, а я искал 9-ую, большую во всем диапазоне. :) Сейчас буду переписывать.
Оно изначально у меня было правильно, потом понесло куда-то не туда.
xman
Участник
Offline4.5
с авг 2005
Вологда
Сообщений: 1991

Дата: 31 Окт 2010 00:19:09 · Поправил: xman (31 Окт 2010 00:21:23) #  

Я кстати тоже самое предлагал, девятая и в голову не приходила :) Но вот насчет объединения групп при амплитудном анализе - немного сомневаюсь. Спектральная плотность шума может оказаться неравномерной, поэтому я бы попробовал полностью раздельный анализ по низко- и высокочастотной группам. Т.е сравнивать самую высокую ампл. с амплитудами остальных частот - только внутри группы. Если она заметно больше них - Ок, иначе - помеха.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 31 Окт 2010 00:48:49 · Поправил: Programmist (31 Окт 2010 01:43:44) #  

xman
Да, нужно еще подумать, наверно просто устал - вторые сутки искал девятую. :))
Можно пороги X и Y для начала вывести на форму для подстройки, ну и потом другой алгоритм попробовать. В любом случае декодер буду переписывать т.к. был использован чужой модуль от АОН-а, переведенный с С++ на скорую руку и 10 лет назад. Отсюда и возникла путаница.
В исходнике, что лежит выше, уже есть все необходимое для экспериментов. Можно быстрый CTCSS-индикатор сделать или еще чего-нибудь. DTMF-декодер собран на той же основе.

сравнивать самую высокую ампл. с амплитудами остальных частот - только внутри группы
Попробую включить до алгоритма, предложенного amx, как опцию. Поможет избавится от помех, но будет убивать некоторые символы. Имхо, более правильно включить анализ 2-х гармоник, подавление эха и синхронизацию длительности, но это гораздо сложнее в реализации.
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 31 Окт 2010 07:33:07 #  

и частоты с уровнями A1 и A3 попадают в разные группы.

A1 и A2 должны попадать в разные группы, конечно.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 31 Окт 2010 18:17:16 #  

amx
Спасибо, уже разобрался, декодер переделал, но пришлось алгоритм немного доработать. Получилось 3 порога: X,Y,Z. Считаются 16 частот (первой функцией), где
DtmfFreq: array[0..7] of Double = (697, 770, 852, 941, 1209, 1336, 1477, 1633);
OutRangeFreq: array[0..7] of Double = (733.5, 811, 896.5, 1075, 1272.5, 1406.5, 1555, 1711);
Потом значения массивов складываются в M1 и M2. Если M1 > M2 * Z - значит это DTMF. Опция Noise Filter включает этот режим. СШ, конечно становится хуже, но для работы в реальных условиях это не критично. FFT больше нет, для определения конкретных частот внеполоска не мешает. Имхо, если к этому добавить Вашу пост-обработку - будет совсем не плохо.

Обновление до версии 1.3
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 31 Окт 2010 19:35:36 #  

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

Хотя, возможно, позволит увеличить X и Y, чтобы увеличить вероятность правильного обнаружения в сильных шумах, не увеличив вероятность "ложной тревоги"...

Но можно попробовать просто применить исходный алгоритм (анализа трех максимумов) ко всем 16-ти частотам, введя дополнительную проверку "F1 и F2 попадают в DTMF-частоты".
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 31 Окт 2010 19:53:04 · Поправил: Programmist (31 Окт 2010 19:57:46) #  

Да, здесь вариантов много. Нужно пробовать. Пока сделал, что успел (не уверен, что правильно), но даже такой простой фильтр уменьшил ложные срабатывания раза в четыре. Пробовал чистить сигнал вейвлетом - не помогает. Еще раз обновил архив, там мелочи.
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 31 Окт 2010 20:08:33 · Поправил: amx (31 Окт 2010 20:09:56) #  

Странно, у меня вообще ложные срабатывания получить - постараться надо.
Похоже, думатель у постобработчика слабоват :)

Ты на каком интервале (в смысле длительности) принимаешь решение?
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 31 Окт 2010 20:17:58 · Поправил: Programmist (01 Ноя 2010 06:04:05) #  

Будете смеяться, но постобработчика пока вообще нет. Большой (8192) буфер режется на маленькие куски (в настройках) и идет прямое декодирование этих кусков. Если общий уровень куска много меньше ранее принятого, весь кусок обнуляется, значит пауза. Получается, что решение зависит от размера маленького буфера (при дискрете 48К). Соответственно, при этом часть полезной информации теряется. :(
А ложных срабатываний очень много, если параллельно с сигналом идет голос или музыка. На белый шум, конечно не реагирует.
Как раз собираюсь сделать к сигналу огибающую, но это уже следующий этап. Что-то мне подсказывает, что и в первой части сделано еще далеко не все.

P.S. С 48-ми KHz уходить не хочу - процессоры сейчас быстрые. :) Как правило, у всех карт это стандартный режим. Все остальное, кратное 44100, приводится к 48000 и не всегда ровно. Для DTMF оно может и не столь важно, но в других случаях заметно сильно.

P.P.S. Остается открытым вопрос: Чем правильно определить присутствие частоты? Потому, как сигнал по пути может пару раз крутануть по фазе, а длительность импульсов короткая. В результате – потеря знака, что обычно и происходит. И декодируется такой сигнал каждый раз по-разному. Если его руками можно восстановить - значит это должна уметь делать и программа. Помогает несколько проходов по импульсу, начиная с разных позиций, но слишком много нужно ресурсов.
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 01 Ноя 2010 11:05:00 #  

Скользящий фильтр надо делать, а не кусками нарезать.

А после решателя - если миллисекунд 20 наблюдаешь одну и ту же цифру (или отсутствие цифр вообще) - фиксировать ее.

А с точностью установки частоты семплирования на новых картах - действительно УЖАС-УЖАС-УЖАС.

У меня на он-бордной карте вместо 11025 вообще около 10800 на запись и около 11100 - на воспроизведение. Это ж специально нужно было стараться - так изгадить :(
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 13:23:53 · Поправил: Programmist (01 Ноя 2010 14:03:03) #  

Буду делать. Уже собрал циркулярный буфер и все sin/cos раскидал по массивам, ну чтобы пошустрее было. Сразу все не получается, слишком много уходит в корзину. Здесь как всегда - одна ошибка в начале и можно все начинать с чистого листа. Если бы знать, как оно правильно...
На итого выходит, что уже не правильно, раз не устраивает функция определения частот, а потом пути назад нет.
С картами, конечно беда. Чтобы получить кратное 44100, нужен второй кварц, чего делать никто не будет. И кварцы сейчас не те. Пальцем надавил - частота ушла. :(
Да и вообще любой ресемпл сигнал убивает, если запаса нет. Их и так-то этих точек никогда не хватало.
amx
Участник
Offline1.8
с окт 2006
Сообщений: 318

Дата: 01 Ноя 2010 19:47:45 #  

Чтобы получить кратное 44100, нужен второй кварц

один кварц на 21168 кГц позволил бы получить и сетку 44100/N , и 48000/N ...
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 20:49:00 · Поправил: Programmist (01 Ноя 2010 21:43:19) #  

В принципе да, это нужно разработчикам железа, а то до сих пор не могут эту проблему решить. Чтобы музыку набор частот послушать, приходится софтовые плагины ставить. Все записи, в основном 44100 были.

Наверное, от лени, полез искать готовый скользящий фильтр и наткнулся на интересную функцию сглаживания методом скользящего среднего. В принципе помогает избавиться от шумов, но надо каждую частоту обрабатывать отдельно, потом поправку АЧХ вводить. Хотя в общем-то вейвлет делает то же самое.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 01 Ноя 2010 21:14:02 #  

Programmist Странные проблемы вы описываете Потому, как сигнал по пути может пару раз крутануть по фазе. Ну и что? У вас модуляция фазовая что ли? Чес слово иногда не понимаю вас. С одной стороы вроде в теме, с другой как-то слишком вроде, чем в теме. Имхо, имхо, конечно. ДТМФ декодеры на Герцеле описаны чуть ли не канончески. Причём тут фаза? Про какие восемь, девять частот тут говоили тож не пойму. Их всего-то в сетке вроде 7? что-то я не догоняю алгоритмчических ходов ваших. Ну да ладно.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 21:38:51 #  

Mesh
Все очень просто. Частот в сетке восемь. Длительность DTMF импульса может быть меньше 40мс. Если этот импульс, например, в середине по фазе сдвинуть, и еще туда пару импульсных помех добавить, сильно изменится амплитуда при детектировании и декодер выбросит его как шум.
декодеры на Герцеле описаны чуть ли не канончески
Может они, где и описаны, но реально рабочих программ я пока кроме как у amx не видел. Чтение трактатов с пятиэтажными формулами у меня восторга не вызывает.
xman
Участник
Offline4.5
с авг 2005
Вологда
Сообщений: 1991

Дата: 01 Ноя 2010 21:38:53 · Поправил: xman (01 Ноя 2010 21:40:55) #  

Ну если брать полный набор команд DTMF - там матрица 4x4, всего действительно 8 частот. Ими кодируются цифры 0, 1, 2, ..., 9 - их 10 шт, "*" (звездочка), "#" (решетка), и четыре буквы A, B, C, D - получается 16 комбинаций.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 21:55:35 #  

xman
В том-то и дело, если декодировать, то полностью. Зачем выбрасывать что-то из стандарта. Длинные импульсы можно и БПФ декодировать или БПФ на Герцеле, что возможно и лучше, чем БПФ. С короткими - беда.
БПФ Герцеля у меня нет. Чтобы попробовать простое преобразование - пол дня ушло на поиски и перевод на Delphi, все выше написано.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 01 Ноя 2010 21:58:01 #  

xman Гм. Так выходит на сайте косая таблица? Я по ней смоторел. Там 7 частот. Ну раз 8 значит 8. Бог с ними, не самое это важное. Programmist Может они, где и описаны, но реально рабочих программ я пока кроме как у amx не видел. Да ладно, бога побойтесь. Коде 300 который тут уже упоминали. :) Да есть софт который колбасит этот ДТМФ. С фазой пардон, это что-то искуственное вы тут придумали. По середеине повернуть, да ещё помех добавить. Ага, а если в начале помех, посередине и в конце, то вобще любой деуодер станет. :) Вот бы Ваську так на этот счёт прорабатывли. :) ДТМФ это не фазовая мода, и чувственость к фазе это огрехи алгоритма. Чего это ради амплитуда сильно изменится от фазы? Амплитуда это амплитуда, а фаза это фаза, они ни как не связаны, по меньшей мере теория так гласит. :) Чего у вас там выходит в деме, это уже другого сорта проблемы. Имхо. Не такой уж сигналик ДТМФ нежный что б какая-то там фаза чего-то могла ушатать в дым. Скорости как то не те знаете ли. :)
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 22:15:05 · Поправил: Programmist (01 Ноя 2010 22:24:18) #  

Mesh
Вот с Васькой, как раз, так и вышло, взял что попало и положил в основу, а потом переделывать было поздно, да и задачи у нее другие. Свою функцию она выполняет и возвращается туда нет желания. Может когда, и сделаю чего, но это будет другая программа.
А софта всякого много, это уже из серии - зачем строить свой дом, когда у соседа дворец. :)

Правильная таблица в CoolEdit-e, им и генерю сигналы для отладки. Плюс генераторы помех всех видов самодельные.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 01 Ноя 2010 22:22:55 #  

Programmist Да не, причём тут дворец соседа?? Была фраза, что якобы софтра рабочего по декодингу ДТМФ вроде как и нет, кроме там бла-бла. Ну я ж просто говорю, что есть. А строить дом или нет. Эт только вы решаете и ни как не сосед у которого дворец, сарай, шалаш или хоромы. Так с фазой-то чего? Чего ради фаза должна изменить сильно амплитуду? Пусть обкрутится сигналик по фазе хоть десять раз, как был он ДТМФ так и останется. Може не прав конечно, может быть. :)
xman
Участник
Offline4.5
с авг 2005
Вологда
Сообщений: 1991

Дата: 01 Ноя 2010 22:26:02 · Поправил: xman (01 Ноя 2010 22:31:11) #  

Предлагаю воспользоваться вот этой информацией. Там таблица всех восьми частот и их шестнадцати комбинаций. Вроде как совпадает с дэйтшитами на телефонные ИМС.
Насчет фазы - согласен с выше сказанным, сколько бы она не крутилась - сама частота никуда не денется.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 22:31:12 #  

Mesh
С фазой дело плохо. Поэтому все декодеры на плохих сигналах выдают полный бред, причем совершенно разные результаты декодирования одного и того же сигнала. Вот тут то все от фазы (начальной точки отсчета) и зависит.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 01 Ноя 2010 22:37:15 #  

Programmist С фазой дело плохо. Где в ДТМФ? Сигналки плз в студию, с плохой фазой. :) Чё-то мутняк какой-то имхо.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 22:49:09 #  

Mesh
Зачем копилку засорять? Сгенерите в Cool-e 3 цифры минимальной (на гране разборчивости) длительности и поверните с середины на 180. Что скажет Code300 не знаю, но у меня такой сигнал декодируется с ошибками, причем все время разными.
Сейчас сам Code300 найду и попробую.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 01 Ноя 2010 22:56:50 #  

Programmist Ну и ладно. Значит оно вам так надо. :) Успехов.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 01 Ноя 2010 23:06:54 #  

Mesh
Спасибо. Попробовал Code300. Декодер намного лучше, значит надо работать дальше. Никто ведь не скажет как он устроен, да и если скажет - толку не будет, пока сам не сделаешь. :) Удачи.
Реклама
Google
 Страница:  ««  1  2  3  4  5  6  »» 

Создавать сообщения могут только зарегистрированные участники форума.
Войти в форум :: » Логин » Пароль
Начало
Средства связи, рации. Купить радиостанции Motorola, Yaesu, Vertex, приемники, антенны.
Время загрузки страницы (сек.): 0.026; miniBB ®