Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Распознавание сигнала КПВ
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
AVL
Есть задача, которую не удается решить полностью.
Необходимо распознавать сигнал контроля посылки вызова (КПВ), формируемого станцией абоненту в процессе установления соединения.
Стандартов КПВ существует бесчетное множество. Но проблема не в этом. Сейчас ограничимся только одним российским стандартом: КПВ представляет собой тональный сигнал частотой 425±3 Гц, длительность посылки 1 с, длительность паузы 4 с. Посылка КПВ продолжается пока абонент на дальнем конце не поднимет трубку.
Так вот, трудность распознавания заключается в том, что одновременно с КПВ в канале связи может одновременно звучать речь и присутствовать различные звуковые шумы, свойственные офисным помещениям.
Соотношение амплитуды КПВ и речи/шума в канале может быть различным. Например КПВ может быть в 2 раза громче речи, либо речь в 2 раза громче КПВ, либо одинаковые по громкости. Короче соотношения любые в пределах разумного. В таких пределах, чтобы "на слух" было не трудно распознать, что идет посылка КПВ на фоне речи/музыки.
Самые жесткие ситуации возникают, когда идет посылка КПВ и при этом речь произносится расстягивая гласные звуки и одна из формант речевого сигнала оказывается с частотой близкой 425 Гц, а ширина форманты покрывает полностью 425 Гц.

Так вот, задачу не удается решить полностью. В ситуациях когда в канале присутствует только КПВ в условиях умеренных шумов, распознавание выполняется без проблем ( 1-й способ: полосовой фильтр с центр. част. 425 Гц, режекторный фильтр с центр. част. 425 Гц, проверка на превышение порогов уровней на выходах фильтров; 2-й способ: оценка кросскорреляции каждой пары смежных фреймов длительностью 25 мс).
Если же в канале одновременное присутствие КПВ и речи/шума, то в эти моменты не удается распознать присутствие КПВ. Если посмотреть спектрограмму, то сигнал КПВ "замазывается" попадающей на КПВ сильной формантой речи.

Сейчас пока стоит задача хоть как угодно решить задачу. Пусть для этого потребуется сколь угодно мощный вычислитель. Вопрос пока стоит принципиально, как можно решить такую задачу, обеспечив максимальную точность распознавания.

Может есть у кого мысли?

P.S. Человек может различить КПВ "на слух" в таких сложных условиях, то есть в мозге есть некоторые процессы, позволяющие человеку это сделать.
el34
может посмотреть еще и на гармоники 425 Гц(чет и нечет)
у голоса похоже будет другое соотношение амплитуд гармоник

и еще , у голоса похоже будут соседние лепестки за пределами 425±3 Гц Гц примерно такой же амплитуды , как и основной на 425±3 Гц....
(размытая палка на спектре)
имхо
AVL
Цитата(el34 @ Jun 14 2007, 19:04) *
может посмотреть еще и на гармоники 425 Гц(чет и нечет)
у голоса похоже будет другое соотношение амплитуд гармоник

Вы имеете ввиду гармоники сигнала КПВ? если КПВ, то у него их нет, КПВ в идеальном случае имеет синусоидальную форму. Или я не правильно понял?

Цитата(el34 @ Jun 14 2007, 19:04) *
и еще , у голоса похоже будут соседние лепестки за пределами 425±3 Гц Гц примерно такой же амплитуды , как и основной на 425±3 Гц....
(размытая палка на спектре)
имхо

Да, но тогда будет на спектрограмме только эта "палка", допустим с центром 425 Гц, и как сделать вывод есть внутри этой "палки" искомый КПВ или его там нет?
asdf
Цитата(AVL @ Jun 14 2007, 23:47) *
Вы имеете ввиду гармоники сигнала КПВ? если КПВ, то у него их нет, КПВ в идеальном случае имеет синусоидальную форму. Или я не правильно понял?
Да, но тогда будет на спектрограмме только эта "палка", допустим с центром 425 Гц, и как сделать вывод есть внутри этой "палки" искомый КПВ или его там нет?


Узкополосный фильтр на 425Гц + временная селекция -1сек сигнал - 4 сек пауза smile.gif .
В крайнем случае корреляционная обработка учитывающая наличие с сигнале паузы.
SM
Если ограничиться только 425, то все просто. Фильтруете узкополосно, затем детектор среднеквадратичного. Отдельно второй детектор среднеквадратичного для общего уровня сигнала. Далее принятие решения - 425 герц считается присутствующем, если согнал с выхода детектора после фильтра превышает сигнал с выхода общего детектора, домноженного на какое-то число меньшее 1. Далее еще одна фильтрация, чтобы убрать "дребезг", далее уже анализ длительности сигнала и пауз.

ЗЫ
Но это все сдохнет, когда КПВ пойдет двухтональный, или еще какой, с модных офисных АТС smile.gif

ЗЗЫ
Ну а если кто-то прикидывается станцией и голосом произносит нечто похожее на КПВ, то тут увы... На слух отличите, а вот такой универсальный отличатель не отличит smile.gif
el34
AVL>Вы имеете ввиду гармоники сигнала КПВ? если КПВ, то у него их нет, КПВ в идеальном случае имеет синусоидальную форму. Или я не правильно понял?

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

AVL>Да, но тогда будет на спектрограмме только эта "палка", допустим с центром 425 Гц, и как сделать вывод есть внутри этой "палки" искомый КПВ или его там нет?

я имел ввиду, что если делатся спектральный анализ сигнала в области рядом с ожидаемым на 425 Гц, то в случае речевой форманты на этой частоте можно будет увидеть ее частотную и амплитудную нестабильность и следовательно размытость спектральной палки....

можно объединив эти два критерия улучшить точность ...
имхо
AVL
Цитата(SM @ Jun 15 2007, 00:14) *
ЗЫ
Но это все сдохнет, когда КПВ пойдет двухтональный, или еще какой, с модных офисных АТС smile.gif

да, бывают и трехтональные smile.gif и даже с модуляцией

Цитата(SM @ Jun 15 2007, 00:14) *
ЗЗЫ
Ну а если кто-то прикидывается станцией и голосом произносит нечто похожее на КПВ, то тут увы... На слух отличите, а вот такой универсальный отличатель не отличит smile.gif

Но как правильно указал el34, форманты голоса не стабильны по частоте. Допустим, если анализировать интересующую нас форманту с центральной частотой в районе 425 Гц, то ее центр будет плавать в некотором диапазоне частот, поэтому такой сигнал можно считать ложным. В случае КПВ, его частота стабильна по сравнению с формантой речи. Голосом не возможно произнести тон, чтобы он не плавал на протяжении к примеру 1 с.
mikalaha
Цитата(AVL @ Jun 15 2007, 10:29) *
да, бывают и трехтональные smile.gif и даже с модуляцией
Но как правильно указал el34, форманты голоса не стабильны по частоте. Допустим, если анализировать интересующую нас форманту с центральной частотой в районе 425 Гц, то ее центр будет плавать в некотором диапазоне частот, поэтому такой сигнал можно считать ложным. В случае КПВ, его частота стабильна по сравнению с формантой речи. Голосом не возможно произнести тон, чтобы он не плавал на протяжении к примеру 1 с.


Использовал следующий подход:
отфильтровывается необходимая полоса для тона ( в данном случае , примерно, 400 - 450 Гц).
На выход фильтра навешивается детектор по пересечению нуля :
Например, для частоты дискретизации 8 кГц и тона 425 Гц:
Период укладывается в 8000/425 = 18.82 отсчета
Полупериод = 9.4 отсчета.
Потом просто считаем пересечение нуля (через 9 и 10 отсчетов )
Если набирается подряд требуемое количество пересечений - тон найден.

Для нескольких тонов - несколько таких детекторов.
AVL
Цитата(mikalaha @ Jun 15 2007, 12:16) *
Потом просто считаем пересечение нуля (через 9 и 10 отсчетов )
Если набирается подряд требуемое количество пересечений - тон найден.

В смысле считаете общее число переходов через ноль например на интервале 1 с, или считаете только в том случае, если переходы лежат строго на 9-м отсчете, затем на 19-м отсчете, затем на 28 и т.д.?
mikalaha
Цитата(AVL @ Jun 15 2007, 13:18) *
В смысле считаете общее число переходов через ноль например на интервале 1 с, или считаете только в том случае, если переходы лежат строго на 9-м отсчете, затем на 19-м отсчете, затем на 28 и т.д.?



Смысл в том, что если в сигнале присутсвует тон, то расстояние между пересечениями нулевого уровня
будет равно (частота дискретизации / (2*частота тона)). Надо это расстояние посчитать на необходимой длине (например 75% длительности искомого тона).

Вот примерный алгоритм:

требуемое расстояние = 9;

1. Обнуляю счетчик отсчетов.
2. Затем в цикле на каждый отсчет:
а) увеличиваю счетчик отчетов;
б) если есть пересечение нуля и (счетчик отсчетов=требуемому расстоянию или требуемому расстоянию+1), то увеличиваю счетчик верных срабатываний, а если не равен то уменьшаю его
(также после каждого пересечния нуля надо обнулить счетчик отсчетов)
в) если счетчик отсчетов убежал далеко от требуемого расстояния, тоже уменьшаю счетчик верных срабатываний и обнуляю счетчик отсчетов.

г) если счетчик верных срабатываний = 50 , например (в зависимости от длительности искомого тона)
то тон найден.


Вот классик на C для этого дела:


template <class T> class CToneCrossFind {
public:
CToneCrossFind() {}
// частота дискретизации, частота тона
CToneCrossFind(float fSamplingFreq,float fToneFreq) {
Init(fSamplingFreq,fToneFreq);
}
virtual ~CToneCrossFind() {}

// частота дискретизации, частота тона
void Init(float fSamplingFreq, float fToneFreq) {
fQuant = fSamplingFreq;
fTone = fToneFreq;

nCurrentCrossPeriod = 0; // счетчик отсчетов
nNeededCrossPeriod = (unsigned int)(fSamplingFreq * 0.5f / fTone); // требуемый период

FLAG = 0; // возвращаемый функцией обработки флаг (1 - есть срабатывание по пересчению, 0 - нет)

pred_value = 0;// предыдущее значение отсчета
detect_counter = 0; // счетчик верных срабатываний
}

// обработка отсчета
unsigned int Detect(T value) {

nCurrentCrossPeriod++; // увеличили счетчик отсчетов

// если было пересечение или счетчик отсчетов убежал
if (((value>=0) && (pred_value<0)) ||
((value<0) && (pred_value>=0)) ||
(nCurrentCrossPeriod>(nNeededCrossPeriod+3))
)
{
// в случае если счетчик отсчетов в нужном диапазоне
if ((nCurrentCrossPeriod==nNeededCrossPeriod) || (nCurrentCrossPeriod==(nNeededCrossPeriod+1))) {
// возвр. 1 и увеличиваем счетчик верных срабатываний
FLAG = 1;
detect_counter++;
} else {
// иначе вовр.0 и уменьшаем счетчик верных срабатываний
FLAG = 0;
if (detect_counter>=5) detect_counter-=5; else detect_counter = 0;
}
// обнуляем счетчик отсчетов
nCurrentCrossPeriod = 0;
}

pred_value = value; // запоминаем тек. отсчет
return FLAG;
}

float fQuant;
float fTone;

unsigned int nCurrentCrossPeriod;
unsigned int nNeededCrossPeriod;

unsigned int FLAG;
T pred_value;
unsigned int detect_counter;
};


Таким образом, если среднее расстояние между пересечениями нуля на определенной длине (75% от длительности тона) совпадает с заданным диапазоном, то тон найден.
Stanislav
Цитата(AVL @ Jun 14 2007, 18:51) *
Есть задача, которую не удается решить полностью.
Необходимо распознавать сигнал контроля посылки вызова (КПВ), формируемого станцией абоненту в процессе установления соединения...
Делал когда-то такую штуку, правда, только в модели.
Отличить тональный сигнал от форманты удавалось, пользуясь кусочной стационарностью тонального сигнала и нестационарностью форманты. В простейшем случае, система состояла из 2-х фильтров - широкополосного (герц 100 для сигнала 2100 Гц, по-моему) и узкополосного (около 10 герц, в пределах допуска на частоту). Далее шли детекторы уровня и логика принятия решения, в зависимости от уровней сигнала на выходах обоих фильтров.
К сожалению, отыскать эту модель сейчас довольно трудно. Но идея в том, что форманта почти обязательно "въедет" в узкополосный ПФ или "выедет" из него за время измерения, оставаясь в полосе пропускания широкополосного ПФ, и это легко можно отследить.
Если сигналом будет "настоящий" тон, то он появится и пропадёт в фильтрах одновременно (с учётом задержек фильтров, ессно).
Кроме того, форманта нестабильна по уровню. Измеряя относительное изменение мгновенной мощности за измеряемый период, можно получить дополнительный критерий "отсечения" форманты.
Таким образом, измеряя мощности сигналов на выходах ПФ и сравнивая их между собой, форманту можно отделить от кусочно-стационарного тонального сигнала с весьма высокой степенью вероятности.
Slava17
Когда-то изучал спектры тоновых сигналов, и в числе прочего выяснил, что фаза спектра такого сигнала при проходе через частоту гармоники меняется на 180град.(пи).
Т.е. если по сигналу делаете БПФ, то фазы 2 соседних с 425 Гц частотных отсчетов будут повернуты друг относительно друга приблизительно на 180град.
При этом стабильная палка спектра будет наблюдаться только при точном попадании частотного отсчета на частоту 425Гц. В противном случае будет 2 меняющихся по времени отсчета на частотах, соседних с 425Гц.
AVL
Цитата(el34 @ Jun 15 2007, 00:27) *
да, гармоники сигнала КПВ будут осутвсвовать только в идеальном случае, а в случае реального канала будут нелинейные искажения и сл-но будут и гармоники.....
в речевом сигнале гармоники похоже будут с большими осительными уровнями...

проводил некоторый визуальный анализ спектрограммы реальных сигналов (канал не самого лучшего качества), гармоник КПВ не обнаружил.

Цитата(el34 @ Jun 15 2007, 00:27) *
я имел ввиду, что если делатся спектральный анализ сигнала в области рядом с ожидаемым на 425 Гц, то в случае речевой форманты на этой частоте можно будет увидеть ее частотную и амплитудную нестабильность и следовательно размытость спектральной палки....

Вот на частотной нестабильности речевой форманты есть смысл сыграть. Это должно помочь отсеить ложное распознавание в случае, когда форманта речи в окрестности 425 Гц вдруг окажется длительностью близкой 1 с, то есть в этом случае это не есть КПВ.


Цитата(mikalaha @ Jun 15 2007, 15:41) *
...Таким образом, если среднее расстояние между пересечениями нуля на определенной длине (75% от длительности тона) совпадает с заданным диапазоном, то тон найден.

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

Цитата(Stanislav @ Jun 15 2007, 17:15) *
Отличить тональный сигнал от форманты удавалось, пользуясь кусочной стационарностью тонального сигнала и нестационарностью форманты. В простейшем случае, система состояла из 2-х фильтров - широкополосного (герц 100 для сигнала 2100 Гц, по-моему) и узкополосного (около 10 герц, в пределах допуска на частоту). Далее шли детекторы уровня и логика принятия решения, в зависимости от уровней сигнала на выходах обоих фильтров.
...Но идея в том, что форманта почти обязательно "въедет" в узкополосный ПФ или "выедет" из него за время измерения, оставаясь в полосе пропускания широкополосного ПФ, и это легко можно отследить.
Если сигналом будет "настоящий" тон, то он появится и пропадёт в фильтрах одновременно (с учётом задержек фильтров, ессно).
Кроме того, форманта нестабильна по уровню. Измеряя относительное изменение мгновенной мощности за измеряемый период, можно получить дополнительный критерий "отсечения" форманты.
Таким образом, измеряя мощности сигналов на выходах ПФ и сравнивая их между собой, форманту можно отделить от кусочно-стационарного тонального сигнала с весьма высокой степенью вероятности.

Вот это как раз я и хотел. Все в голове крутилось, разные варианты приходили в голову. Ваш вариант очень интересный и предполагаю, что должен хорошо работать. Его тоже испытаю.

Всем спасибо за идеи. Через некоторое время опишу, полученные результаты.

Цитата(Slava17 @ Jun 15 2007, 19:40) *
Когда-то изучал спектры тоновых сигналов, и в числе прочего выяснил, что фаза спектра такого сигнала при проходе через частоту гармоники меняется на 180град.(пи).
Т.е. если по сигналу делаете БПФ, то фазы 2 соседних с 425 Гц частотных отсчетов будут повернуты друг относительно друга приблизительно на 180град.
При этом стабильная палка спектра будет наблюдаться только при точном попадании частотного отсчета на частоту 425Гц. В противном случае будет 2 меняющихся по времени отсчета на частотах, соседних с 425Гц.

извините, не понял Вашу мысль. если не затруднит, напишите подробнее и возможность применения свойств, которые Вы указали.
el34
AVL>проводил некоторый визуальный анализ спектрограммы реальных сигналов (канал не самого лучшего качества), гармоник КПВ не обнаружил.

дык вот Вам и критерий #1 - в речевом сигнале почти наверняка будут гармоники ....

AVL>Вот на частотной нестабильности речевой форманты есть смысл сыграть. Это должно помочь отсеить ложное распознавание в случае, когда форманта речи в окрестности 425 Гц вдруг окажется длительностью близкой 1 с, то есть в этом случае это не есть КПВ.

Вы не упоминали за какое время надо принять решение....
чем больше это время тем проще, как вы понимаете
но упоминалось , что ресурсы вычислителя пока не надо экономить, поэтому - надо(мона) реализовать
- согласованный с длительностью сигнала фильтр (1сек на Fкпв и на ±1 спектральная палка)
(т.е. желательно знать(выяснить время прихода(начала) КПВ)
а раз не знаем , то оценку производить на перекрывающихся (напр. на 90%)1сек интервалах )
- оценить соседние лепестки (уровень спектральных компонент вблизи Fкпв)
- оценить величину гармоник на частотах NxFкпв
(попробуйте пропеть или просвистетеь или еще как синусом..... и поглядите что выйдет)
nsemenoff
Есть много разных способов оценки спектра, и линейный фильтр с БПФ - не единственные для этого способы. Для вокодеров очень хорошо подходят линейные спектральные пары, которые, как считается, содержат ту же информацию, что получает мозг при распознавании речи. Расчитываются спектральные пары через модель линейного предсказателя (достаточно 10 отсчетов для описания и больше для описания музыки).
Предлагаю построить спектрограмму такого преобразования и на ней разделять тон 425Гц и голос...
Stanislav
Цитата(Nick Semenoff @ Jun 18 2007, 18:25) *
Есть много разных способов оценки спектра, и линейный фильтр с БПФ - не единственные для этого способы. Для вокодеров очень хорошо подходят линейные спектральные пары, которые, как считается, содержат ту же информацию, что получает мозг при распознавании речи. Расчитываются спектральные пары через модель линейного предсказателя (достаточно 10 отсчетов для описания и больше для описания музыки).
Предлагаю построить спектрограмму такого преобразования и на ней разделять тон 425Гц и голос...
Простите, а каким образом Вы предлагаете использовать LSP для различения форманты и тона?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.