реклама на сайте
подробности

 
 
> Распознавание сигнала КПВ, распознавание КПВ в присутствии речи/шума
AVL
сообщение Jun 14 2007, 14:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



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

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

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

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

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

Сообщение отредактировал AVL - Jun 14 2007, 14:53
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Jun 14 2007, 20:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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

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

ЗЗЫ
Ну а если кто-то прикидывается станцией и голосом произносит нечто похожее на КПВ, то тут увы... На слух отличите, а вот такой универсальный отличатель не отличит smile.gif
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 15 2007, 06:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



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

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

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

Но как правильно указал el34, форманты голоса не стабильны по частоте. Допустим, если анализировать интересующую нас форманту с центральной частотой в районе 425 Гц, то ее центр будет плавать в некотором диапазоне частот, поэтому такой сигнал можно считать ложным. В случае КПВ, его частота стабильна по сравнению с формантой речи. Голосом не возможно произнести тон, чтобы он не плавал на протяжении к примеру 1 с.
Go to the top of the page
 
+Quote Post
mikalaha
сообщение Jun 15 2007, 08:16
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 16-05-07
Пользователь №: 27 771



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


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

Для нескольких тонов - несколько таких детекторов.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 15 2007, 09:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



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

В смысле считаете общее число переходов через ноль например на интервале 1 с, или считаете только в том случае, если переходы лежат строго на 9-м отсчете, затем на 19-м отсчете, затем на 28 и т.д.?

Сообщение отредактировал AVL - Jun 15 2007, 09:18
Go to the top of the page
 
+Quote Post
mikalaha
сообщение Jun 15 2007, 11:41
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 16-05-07
Пользователь №: 27 771



Цитата(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% от длительности тона) совпадает с заданным диапазоном, то тон найден.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AVL   Распознавание сигнала КПВ   Jun 14 2007, 14:51
- - el34   может посмотреть еще и на гармоники 425 Гц(чет и н...   Jun 14 2007, 15:04
|- - AVL   Цитата(el34 @ Jun 14 2007, 19:04) может п...   Jun 14 2007, 19:47
|- - asdf   Цитата(AVL @ Jun 14 2007, 23:47) Вы имеет...   Jun 14 2007, 20:12
- - el34   AVL>Вы имеете ввиду гармоники сигнала КПВ? если...   Jun 14 2007, 20:27
|- - AVL   Цитата(el34 @ Jun 15 2007, 00:27) да, гар...   Jun 15 2007, 20:37
|- - Nick Semenoff   Есть много разных способов оценки спектра, и линей...   Jun 18 2007, 14:25
|- - Stanislav   Цитата(Nick Semenoff @ Jun 18 2007, 18:25...   Jun 18 2007, 15:44
- - Stanislav   Цитата(AVL @ Jun 14 2007, 18:51) Есть зад...   Jun 15 2007, 13:15
- - Slava17   Когда-то изучал спектры тоновых сигналов, и в числ...   Jun 15 2007, 15:40
- - el34   AVL>проводил некоторый визуальный анализ спектр...   Jun 15 2007, 20:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 13:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016