Автор |
Сообщение |
|
Дата: 27 Окт 2010 22:47:58
#
Mesh
частота занято в записи "точно" 425, ну ни как не точно и ни как не 425
Согласен, у меня получилось ~414гц - списал 10гц на +/- АТС, а вот с тонами запутался. Кстати есть в записи паузы, примерно в 20мс.
|
|
Дата: 27 Окт 2010 22:53:39 · Поправил: Mesh (27 Окт 2010 22:54:26)
#
sirko Да есть паузы есть, но так они должны быть такие ж как длительность, в телефонах так. А это сто пудов чего-то подхаченое, и ТС потому и интересовало, что типовые ходы тут не работали. А номер там или код доступа к писалке или ещё чего, это уже он знает лучше нас. :)
|
Реклама Google
|
|
|
Дата: 27 Окт 2010 22:59:02
#
|
|
Дата: 27 Окт 2010 23:02:28 · Поправил: sirko (27 Окт 2010 23:07:00)
#
Mesh
Эту тему я с обеда заметил, заинтересовался(сбили столку частоты 700 и 1100гц). Вот даже решил на форуме зарегистрироваться чтоб выяснить чего же это такое.
Интересно вот пишет в начале темы ТС - Все гораздо проще, это номер телефона, который физически утрачен в нормальном виде, остался только в этой вырезке из записи разговора. Хех! Интересный номер выходит - 12345... :)
Programmist
У меня пара вопросов не в тему - вы на чем пишите? Если в delphi - можете поделиться как вы со звуковой платой работает в виде исходника какого нибудь? Буду очень признателен.
|
|
Дата: 27 Окт 2010 23:07:44
#
sirko Да "номер" то сразу почти "интересно" просматривался, ещё до корекции по кривым частотам его можно получить. Ну "номер" и "номер" это его дела. Так прикольно, что таки разобрались и с "номером" и с ДТМФ и с кривизной. Вот это уже ценно.
|
|
Дата: 27 Окт 2010 23:16:22 · Поправил: Programmist (27 Окт 2010 23:18:14)
#
|
|
Дата: 27 Окт 2010 23:21:26
#
Programmist
Скачал. Спасибо огромное! Бессонная ночь в Delphi мне обеспечена... :)
|
|
Дата: 27 Окт 2010 23:26:22
#
sirko
Не за что. Теперь главное выбросить все лишнее. Я тут много всякой ерунды пишу, так что вовсе не факт, что там все правильно. :)
|
|
Дата: 27 Окт 2010 23:59:56
#
Programmist Так ведь пожеланий целая куча :)
Более вместительный экран уже сделан.
И еще необходимое, на мой взгляд конечно:
- Запоминать положение и размер окна на экране.
- Символом * (звездочка), как я понял, выводятся не только сами принятые звездочки, но и неудачные попытки распознавания? Если так, лучше бы неудачные не выводить на экран совсем.
- Переключение между режимом отображения как было раньше (линейно), и как в новой версии (построчно).
- Возможность установки макс. интервала между символами одной последовательности. Скажем от 0.2 до неск. секунд. Если он превышен - последовательность считается завершенной и в "линейном" режиме отделяется пробелом, а лучше - двумя. А в построчном, как и сделано в новой версии - перевод строки.
- Ввести возможность устанавливать мин. допустимую длину одной последовательности (1...100 символов). Т.е. если длина не добрана - тогда игнорируем ее, как будто и не было. Это очень поможет избавиться от помех.
Вот такие пожелания навскидку.
|
|
Дата: 28 Окт 2010 00:13:48 · Поправил: Programmist (28 Окт 2010 00:36:31)
#
xman
Понятно, будет время - доделаю. Там если фильтры настроить - хорошо может работать.
Символы *#ABCD - это символы DTMF. Ошибки не отображаются никак, просто будет выдан неверный номер.
Как правило, первая версия – самая лучшая, дальше начинаются проблемы. Лишние кнопки, непонятные настройки и т.п.
Во второй вариант я уже воткнул фильтр на весь диапазон сигнала (получилось СШ -5dB), но этого мало.
Нужно резать на полосы для каждого тона. Будет "Васька" №3 :)))
|
|
Дата: 28 Окт 2010 07:58:08
#
Programmist
Хорошая программка. А вот, если бы лог еще записывать в файл (типа dtmf.log), было бы вообще шикарно...:-)
|
|
Дата: 28 Окт 2010 10:37:52
#
Переслушал записи еще на раз, нашел, где от руки номер набирался и без помех, DTMF декодером всего две цифры не читаются. Сделайте пожалуйста чудо диаграмму частот, может повезет мне на этот раз :)
Файл - http://rghost.ru/3068685 |
|
Дата: 28 Окт 2010 14:00:16
#
thelex Переслушал записи еще на раз, нашел, где от руки номер набирался и без помех, DTMF декодером всего две цифры не читаются.
DTMF : 61416872
|
|
Дата: 28 Окт 2010 22:34:20
#
|
|
Дата: 28 Окт 2010 22:53:48
#
Programmist
Спасибо, получилось то, что надо :-)
|
|
Дата: 28 Окт 2010 23:44:23
#
Спасибо, теперь действительно удобнее!
Вот некоторые глюки, а также пожелания:
- На обычные разговоры и шумы прога чаще всего реагирует кучей "звездочек", и намного реже - цифрами.
- Точно не уверен, но кажется иногда некорректно работает индикатор уровня, особенно после лазания по меню.
- В построчный лог пишутся только последовательности строго той длины, что прописана в установках, а большей длины - не пишутся :(
- В строчке линейного отображения отдельные последовательности не разделяются между собой пробелами.
- Хотелось бы "линейную" строчку увеличить хотя бы до двух...трех строк, т.к. иногда важнее охватить взглядом много данных сразу, а построчный лог в этом случае неудобен.
- В винампе сделано, что он может не отображаться на панели задач в виде кнопки. Если возможно, добавить бы такую фичу.
|
|
Дата: 29 Окт 2010 00:51:18
#
xman
В построчный лог пишутся только последовательности строго той длины, что прописана в установках
Поставьте в установках "0", тогда будет писать все что принято. Над алгоритмом еще поработаю, что-то там не совсем правильно. Будут обновления. К сожалению, программа пока не может распознать все виды DTMF, нужно делать больше настроек.
|
|
Дата: 29 Окт 2010 08:06:50 · Поправил: xman (29 Окт 2010 08:09:54)
#
Так ведь весь и смысл в ненулевых значениях. Иначе одиночные помехи от речи и шумов слишком разбавляют и вытесняют полезную иноформацию.
А что значит "виды DTMF"? По крайней мере я под этим подразумеваю только тот набор частот, что используется в телефонной связи, и декодируется микросхемой MT8870.
|
|
Дата: 29 Окт 2010 09:36:23
#
xman
что значит "виды DTMF"?
Диапазон длительности импульсов очень широкий (от набора руками до автоматической передачи).
Да и автоматы все разные - в одной радиостанции больше десятка установок для DTMF.
смысл в ненулевых значениях
А как по другому? Или принимаем определенную длину последовательности или все подряд (нулевая установка). Можно, конечно, ограничить минимальную длину, но в следующей версии.
Сделал еще одно обновление (1.1), там можно подстроить буфер и шумодав под нужный тип сигнала.
Что-то исправил, что-то испортил - как всегда. :)
|
|
Дата: 29 Окт 2010 09:52:14 · Поправил: xman (29 Окт 2010 09:53:09)
#
Насчет длины - именно ограничить минимальную, чисто для отстройки от помех. Про длительности посылок уже сам понял, проскочило пару раз дублирование. У нас водятся таксисты, пользующиеся автоматикой передачи позывного на базе DTMF (там самодельная система). На них и тренируюсь :)
По поводу "исправил-испортил" прекрасно понимаю :) Сам когда-то очень увлекался программированием, начинал с СМ ЭВМ, и даже небольшую ось разрабатывал на асме для "Вектора". А дальше пошло ООП - его так и не освоил. Сейчас при необхоимости обработать файлы, или еще что по мелочи - делаю на virtual pascal.
|
|
Дата: 29 Окт 2010 10:10:40
#
Забыл про пробел в бегущей строке. Сейчас исправил, версию менять не стал - просто обновил архив. Ограничение по минимуму завтра сделаю.
|
|
Дата: 29 Окт 2010 10:40:07
#
Распознавание по-моему лучше стало.
Сигнал подаю через микрофонный вход, чувствительность уст. 25%, фильтр помех включен. Сигнал выведен из RX до шумодава, так что достоверная информация занимает примерно четверть всех принятых сигналов. Но теперь на помехи реагирует уже не только звездочками, навалом и цифр.
|
|
Дата: 29 Окт 2010 18:47:48
#
Обновление 1.2. Установка минимальной длины последовательности. Микрофонный вход лучше не использовать - очень сильно "звездит". Там в архив схему положил. Чувствительность нужно устанавливать до пропадания зеленого треугольника в паузах, 25% это много, желательно 3-4.
Вообще-то это была программа для передачи видео (картинок) по сети 220V. Вот так ее пришлось кастрировать, ну и хорошо, хоть что-то полезное получилось. Такая, видимо, у меня судьба: Прикрутить к кобыле хобот, чтобы потом все долго смеялись. :)
|
|
Дата: 29 Окт 2010 19:53:12 · Поправил: xman (29 Окт 2010 19:56:08)
#
Вот теперь реально рулез! Спасибо вам огромное :)
Еще хотелось бы обсудить фильтрацию. Как я предполагаю, производится БПФ или что-то подобное, в результате имеем уровни по каждой из табличных частот. По имеющим максимальный уровень и определяем тоновую комбинацию. Так?
Вот думаю, как избавиться от ошибок, т.к. при разговоре и даже всплесках шума они вылезают. А если анализировать все уровни табличных частот, и в случае когда одновременно не только две частоты имеют заметный макс. по сравнению с остальными, а несколько частот приличного уровня, и тем более все почти похожи - значит скорее всего ошибка. Ну это так, мысли вслух :)
Кроме микрофонного, других входов давно уже нет - выжжено из-за пробоя при касании антенной радиотрансляционной сети. Хорошо еще что ноут выжил!
|
|
Дата: 29 Окт 2010 20:24:10 · Поправил: Programmist (29 Окт 2010 20:50:46)
#
xman
БПФ там работает только в качестве фильтра от внеполосных помех и, похоже, что толку от него нет. Вычисляются уровни 8-ми частот в буфере (SumSinCos), если две наибольших совпали с таблицей - значит, принят знак. По имеющим максимальный уровень и определяем тоновую комбинацию
В голосе такие комбинации встречаются очень часто. Можно только более точно настроить фильтры, под определенный тип сигнала, но тогда потеряется универсальность. Уже все, что можно перекрутил, заметных улучшений нет. Оставил так, что-то среднее. Конечно, тема интересная, еще есть над чем подумать, но пока не получается.
Кроме микрофонного, других входов давно уже нет
Трансформатор надо ставить (на всякий случай). У меня сейчас звуковуха через транс в розетку включена, картинки принимать. :)
Можно еще внешний USB-девайс подключить. Работает лучше, чем на ноуте встроенный. Сначала не мог понять, откуда звезды падают, пока ноут не включил. Похоже на помеху от вентиляторов. С внешним USB такого нет.
|
|
Дата: 29 Окт 2010 20:45:47
#
Понятно... Ну а как все же насчет моего предложения, сопоставлять с уровнями других частот, конечно в группах НЧ и ВЧ по отдельности? Если скажем и другие присуствуют, но всего на 20% меньше по уровню - значит помеха.
А со входом звуковухи получилось ужасное стечение обстоятельств. У меня штатно все сделано по уму, сжег их на выезде с чужим приемником. Даже чувствовал что не надо, и все равно воткнул.
|
|
Дата: 29 Окт 2010 20:57:45 · Поправил: Programmist (29 Окт 2010 21:23:59)
#
Так там сопоставление по уровню уже есть. С этим я больше всего возился, без этого не работает вообще, диапазон настроек большой и был выбран оптимальный вариант. Если все эти крутилки-вертелки на форму вывести - никто не поймет ничего.
Дальше надо только под конкретный канал связи настраивать. Если это АТС, как в записях тс, там эхо присутствует - специальный фильтр нужен. Для радио он не подойдет, будет только хуже, т.к. помехи другого типа.
P.S. Не знаю, как эта штука справится с большим кол-вом информации (если не выключать пару дней). Возможно, будут еще обновления.
|
|
Дата: 29 Окт 2010 22:20:05
#
Блин, ну это же классика:
1. Определяем пару частот из набора с максимальным уровнем и третью по уровню частоту.
2. Если обе частоты относятся к одной группе (нижней или верхней) - это шум, игнорируем.
3. Если уровни частот из пары отличаются на величину больше порога X - игнорируем.
4. Если уровни второй и третьей частот отличаются на величину меньше порога Y - игнорируем.
TrueTTY умеет декодировать DTMF, кстати.
В свежей бете как раз подкручивал алгоритм:
http://www.dxsoft.com/truettyb.zip
CallTTY умеет и декодировать, и генерить:
http://www.dxsoft.com/calltty.zip |
|
Дата: 29 Окт 2010 22:48:10 · Поправил: Programmist (30 Окт 2010 05:20:26)
#
amx
Это то понятно, имхо интересное решение – это иметь под каждый тип сигнала свою "расческу" и перед декодированием прогонять все через нее (выравнивать амплитуду и длительность). Только вот сигналы могут приходить разные, пока эту "расческу" будешь примерять, половина информации потеряется. :(
Кстати, алгоритм DTMF у TrueTTY заметно лучше, чем у CallTTY, значит еще есть чего крутить. :)
P.S. Так и не смог вспомнить, почему отказался от FFT и основные 8 частот считаются вот так: http://www.radioscanner.ru/uploader/2010/calcfreqfactor.txt, с FFT потом только уровни сравниваются. Да и дискрет 48К, наверно слишком много для DTMF.
P.P.S. Нет теперь мне покоя. Задача казалась простой только на первый взгляд. Как при дискрете 11025 получить такой результат? Не хватает данных у БПФ для правильного определения частоты, как не крути. Был у меня где-то фокус с зеркальным буфером, но здесь их явно нужно четыре. Потом как весь тот мусор, что из эфира приходит правильно сложить по фазе? Можно, конечно, той функцией, что выше все частоты пересчитать, но это понятно как будет называться.
В прошлом веке был недоделанный АОН, брошенный за ненадобностью, теперь вот опять возникла тема. А решение все равно искать придется, т.к. эта проблема во всем всплывает, за что не возьмись. |
|
Дата: 30 Окт 2010 08:04:14
#
У TrueTTY пороги X и Y увеличены, добавлена борьба с эхом (В виде затухающего со временем дополнительного порога, зависящего от уровня текущей посылки. Грубо говоря - если приняли посылку, то в течение ближайшей секунды принимаются только посылки с уровнем не менее, чем только_что_ принятая/10).
Ну и еще кое-какая пост-обработка сделана...
А зачем для этой задачи FFT? Делается по букварю - 8 квадратурных смесителей. Синус/косинус, разумеется, берется из таблицы, а не считается каждый раз заново.
|
Реклама Google |
|