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

 
 
 
Reply to this topicStart new topic
> Выделение пауз в цифровом аудиосигнале
Allregia
сообщение Jul 1 2013, 21:22
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Уважаемые коллеги, не подскажет ли кто-нибудь пожалуйста алгоритм, или черканет несколько строчек на С:

1) есть цифровой аудиопоток, нужно ловить в нем паузы (выставлять флаг), длительностью больше заданного порога (порядок длительности паузы - десятки мс).

2) данные представлены в виде signed int32 слов, в которых сами данные могут быть 24 или 16 бит (это заранее не известно - что тоже проблема), выровненных влево, частота дискретизации заранее известна - 48 или 96кгц.

3) это реальный музыкальный сигнал, детектировать нужно паузы межу треками, но так чтобы не детектировались паузы в музыке. я думаю, уровень шумов в паузе между треками должен быть существенно ниже уровня шумов в музыкальной паузе, (т.к. в паузе это "цифровой ноль"), поэтому выбрав соотв. образом порог срабатывания по амплитуде (например -40-50дБ) можно решить задачу.

4) лучше пропустить паузу, чем ложно детектировать когда ее на самом деле нет.

Спасибо за помощь.

Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 4 2013, 06:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Ну, раз никто не знает, буду делать так, как бы делал в железе - HPF-ABS-LPF.
Фильтры для простоты возьму 1-го порядка.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 4 2013, 18:46
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Хотя, можно наверное и автокорреляцией сделать.
Go to the top of the page
 
+Quote Post
STAR_IK
сообщение Jul 5 2013, 06:43
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 136
Регистрация: 10-04-09
Из: Омск
Пользователь №: 47 461



Так если между треками "цифровой ноль", тогда и отлавливайте ноль. Взять среднее арифметическое по некоторому количеству отсчетов и если оно будет равна нулю, значит пауза. В музыкальном треке нуля никогда не будет, всегда будет некоторый шум.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 5 2013, 07:10
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(STAR_IK @ Jul 5 2013, 08:43) *
Так если между треками "цифровой ноль", тогда и отлавливайте ноль.


1) Необязательно ноль, там может быть константа (постоянная составляющая).
2) То что Вы предлагаете, у меня описано в п.3 исходного сообщения.
Go to the top of the page
 
+Quote Post
zöner
сообщение Jul 5 2013, 09:12
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



во 1х DC-filter: http://peabody.sapp.org/class/dmp2/lab/dcblock/
во 2х поиск по "pause detection" или "silence detection" находит кучу публикаций и готовых алгоритмов

Сообщение отредактировал zöner - Jul 5 2013, 09:13
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 5 2013, 09:47
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(zöner @ Jul 5 2013, 11:12) *


Да, такие фильтры типа "скользящего среднего" я и использовал.


Цитата
во 2х поиск по "pause detection" или "silence detection" находит кучу публикаций и готовых алгоритмов


Мне в основном попадались ссылки на готовые девайсы и готовые программы sad.gif
Go to the top of the page
 
+Quote Post
Nick Nickl's
сообщение Jul 6 2013, 19:25
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 5-05-06
Из: Геленджик
Пользователь №: 16 811



Тупо считал амплитуду сигнала в некотором временном интервале (половина нижней частоты сигнала), если на заданном количестве интервалов она меньше порога считал что сигнала нет. точно алгоритм не помню - лет 10 назад это было писал логи с радиостанций. Убрать постоянную составляющую тоже не проблема
Go to the top of the page
 
+Quote Post
zöner
сообщение Jul 7 2013, 08:10
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



да, чем не устроил простейший пиковый детектор ?
для надежности можно добавить скользящий фильтрик от случайных выбросов, и гистерезис.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 7 2013, 10:17
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(zцner @ Jul 7 2013, 10:10) *
да, чем не устроил простейший пиковый детектор ?


Уже устроил sm.gif

Цитата
для надежности можно добавить скользящий фильтрик от случайных выбросов, и гистерезис.


Я сделал как писал выше - HPF для устранения постоянки, затем ABS ("выпрямитель"), затем LPF для сглаживания.
Только LPF я сделал с разными постоянными времени для нарастания (малое тау) и спада сигнала (большое тау).
Затем если сигнал ниже порога в течение заданного времени - выставляю флаг "пауза", как только сигнал выше порога - сразу сбрасываю этот флаг.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th June 2025 - 16:12
Рейтинг@Mail.ru


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