Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/70: Рейтинг темы: голосов - 70, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 3

Алгоритм выделения формант речи

16.01.2011, 19:44. Показов 14924. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Вопрос к знатокам... так как мне совсем сложно в этой теме.... :'(
Задача : обработка речевого сигнала...для выделения получения формант (чтобы провести анализ полученных данных на основе заданных критериев, например, определение людей с некоторыми заболеваниями)
Сделано:
1. Описано схема устройства - микрофон - полосные фильтры - АЦП - Анализ данных
2.обоснован выбор кепстрального анализа
3. реализация вычисление кепстра ДПФ - Log - обратное ДПФ

В итоге с кепстра нужно выделить форманты с помощью некоторого алгоритма, вот тут у меня полный ступор...
Никакой инфы найти не могу... кроме книги : Рабинера - Цифровая обработка речевых сигналов (там непонятно описано)

Если, есть возможность скиньте ссылки на рускоязычные источники, с описанием алгоритма (блок-схемы)...


Спасибо заранее огромное.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2011, 19:44
Ответы с готовыми решениями:

Алгоритм генерации речи
Добрый день! Поделитесь информацией о способах генерации речи с нуля. Изначально существует массив данных float, в котором хранится...

Алгоритм выделения динамической памяти
Объясните пожалуйста на словах, алгоритм выделения динамической памяти под двухмерный массив. float **ptrarray = new float* ; for...

Алгоритм выделения фрагмента текста в редакторе
Пишу простенький редактор нужно сделать выделение текста клавишами курсора (как это происходит в обычных редакторах) с наскоку что...

13
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
19.01.2011, 14:48
Цитата Сообщение от Pupupu Посмотреть сообщение
Рабинера - Цифровая обработка речевых сигналов (там непонятно описано)
вполне понятно - лучшего источника не могу подсказать. Кепстр у вас уже есть - осталось взять от него преобразование фурье - получите огибающую, и в ней находите локальные максимумы - они будут соответствовать формантным частотам. Рабинер называет эту огибающую "Кепстрально сглаженным логарифмическим спектром". Поиск локальных максимумов - не такая простая задача как кажется - то они периодически исчезают, то накладываются на соседние. Тут придется помучиться, хотя думаю можно найти в инете готовые алгоритмы. (Легче правда найти используя метод линейного предсказания, чем гомоморфный).

Цитата Сообщение от Pupupu Посмотреть сообщение
(чтобы провести анализ полученных данных на основе заданных критериев, например, определение людей с некоторыми заболеваниями)
а вот тут я не совсем понял - как вы собираетесь это сделать. Максимум что я вижу возможным - определение хрипоты в голосе по дрожанию частоты основного тона и формантных частот. Кстати ели не секрет где работаете/учитесь?

Добавлено через 3 минуты
забыл сказать - форманты вычислять можно тока на вокализированных участках, а на границах тон/шум будут дополнительные проблемы которые тоже надо будет учесть
2
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 3
04.02.2011, 23:49  [ТС]
Спасибо за ответ. То есть вы считаете в данном случае применение кепстрального анализа справедливым?(для определения формант)? И лучшим методом - метод линейного предсказания...

А если применять простой спектральный анализ...? Мы кепстральный анализ уже переиграли на обычный спектральный. А алгоритм определения формант применяем описанный ниже...
Но это мне кажется притянутым за уши, т.к. не учитывает допустим вариант с формантами буквы "И", когда вторая форманта в несколько раз больше первой...а не в 2. Сам шаг поиска формант...определяемый как равный первой форманте мне кажется не совсем верным....Непонятно как определить окно поиска формант (пока определяем как полшага назад и полшага вперед для предпологаемой форманнты).

Вообщем, может быть вы подскажите более простой-действенный способ определения формант?
Спектральный анализ не аксиома...



"Известно, что первая форманта (частота основного тона) лежит в промежутке от 50 Гц (у взрослого мужчины) до 300 Гц ( у детей и некоторых женщин). Кроме того известно, что амплитуда каждой последующей форманты ниже, чем предыдущей, а их частоты равны частоте основного тона умноженного на целое число (2 для F1, 3 для F2 и так далее).
Таким образом мы можем найти максимальное значение амплитуды сигнала на отрезке от 50 Гц до 300 Гц, после чего умножить эту частоту на 2, найти максимальное значение амплитуды в некоторой окрестности этой точки, проверить является ли она максимумом амплитуды в некоторой большей окрестности. Если это предположение верно, то мы нашли частоту второй форманты (F1). Если нет – второй форманты у сигнала нет.
Далее умножаем частоту основного тона на три и повторяем все вышеприведенные шаги для третьей форманты. Потом повторяем для всех остальных формант. Как правило, вычисляют от 4 до 6 формант."


Кас. определения людей с заболеваниями...это как вариант развития работы...пока такой задачи не поставлено...
Учучь в техническом вузе.
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
07.02.2011, 14:28
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Pupupu Посмотреть сообщение
То есть вы считаете в данном случае применение кепстрального анализа справедливым?(для определения формант)? И лучшим методом - метод линейного предсказания...
Трудно однозначно ответить какой метод лучше - ведь все они не дают идеального решения.

Цитата Сообщение от Pupupu Посмотреть сообщение
Мы кепстральный анализ уже переиграли на обычный спектральный.
не вижу смысла. Можете объяснить чем вам не понравился кепстральный? Описанный вами алгоритм бредовый - уверен что он не будет работать. Это для синтеза речи можно использовать, но в реальном речевом сигнале все совсем по другому(я про кратные частоты).
Вот набросал в матлабе код для определения формант с помощью кепстра - получилось довольно наглядно

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
filename = 'D:\materials\_4568_5s_32.wav';
size = wavread(filename,'size');
[signal, SamplingRate] = wavread(filename);
 
% step = 64;
fft_size = 2^12;
 
t = 1:fft_size+1;
window = hamming(fft_size);%0.54 - 0.46*cos(2.0*pi*t/fft_size); % hamming window
 
begin_sample = 49000;   % begin
frame = signal(begin_sample:begin_sample+fft_size-1);%.*window;
sp = fft(frame);
log_magn = log10(abs(sp));
cep = ifft(log_magn);
 
figure
subplot(3,1,1)
plot(frame); grid on; axis tight
subplot(3,1,2)
plot(log_magn(1:fft_size/2)); grid on; axis tight
hold on
%subplot(3,1,3)
%plot(cep(4:fft_size/2)); grid on; axis tight
 
n = 40;
[max_f,position] = max(cep);
cep1 = cep;
cep1(n+1:end-n)=0;
% cep1(1)=0;
 
spfiltred = real(fft(cep1));
 
plot(spfiltred(1:fft_size/2), 'r'); grid on; axis tight
subplot(3,1,3)
plot(cep(4:fft_size/2)); grid on; axis tight
результат на графике - верхний сам фрагмент сигнала, нижний - кепстр, средний - логарифм модуля спектра синим и огибающая красным. По огибающей легко определить положение формантных частот на спектре.
З.Ы.
По поводу линейного предсказания могу посоветовать хорошую книгу - Маркел Грэй "Линейное предсказание речи"
Миниатюры
Алгоритм выделения формант речи  
3
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 3
26.02.2011, 17:37  [ТС]
Спасибо за ответ. Загрузила код в матлаб...Возникло несколько вопросов:
1.Не все звуки корректно обрабатываются - программа пишет:
??? Индекс за границами матрицы.
2. При обработке слова "Крестик" ( ввиде сигнала в формате *.wav) - программа вывела только 3 форманты, хотя их естественно должно быть больше (подскажите в чем ошибка)? Может быть я ошибаюсь?
Прикладываю звуковой файлы...
02.wav - слово крестик
31.wav - тот который выдает ошибку

спасибо
Вложения
Тип файла: rar task1.rar (52.0 Кб, 171 просмотров)
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
27.02.2011, 15:39
Цитата Сообщение от Pupupu Посмотреть сообщение
2. При обработке слова "Крестик" ( ввиде сигнала в формате *.wav) - программа вывела только 3 форманты, хотя их естественно должно быть больше (подскажите в чем ошибка)? Может быть я ошибаюсь?
В каком месте вывелось три форманты? Зачем обрабатывать большие фрагменты? Приведенный мной код выбирает один маленький фрагмент сигнала и определяет в нем положение формант. За длину обрабатываемого участка я взял размер окна fft. Для обработки более длинных участков, целого слова в вашем случае надо пройти по сигналу окнами с шагом примерно 30 мс и записать каждую форманту в отдельный массив. Так вы получите формантную траекторию. Для невокализованной речи вычисление самих формант как я уже говорил смысла не имеет, но важно следить за скоростью изменения формант.

Цитата Сообщение от Pupupu Посмотреть сообщение
31.wav - тот который выдает ошибку
у меня никакой ошибки не выдает. Возможно вы запускаете мой код без изменений, не разобравшись в нем?
Цитата Сообщение от Pupupu Посмотреть сообщение
??? Индекс за границами матрицы.
судя по ошибке именно так.
Цитата Сообщение от vital792 Посмотреть сообщение
begin_sample = 49000; * % begin
эта строчка программы определяет с какого отсчета в сигнале начинать обработку. Номер отсчета я выбрал в sound forge, в моем сигнале он соотвествует примерно началу буквы е. Так как у вас сигнал длиной всего 8472 отсчета, естественно происходит выход за границу массива.

Добавлено через 4 часа 11 минут
очень советую посмотреть програмку Sfs http://www.phon.ucl.ac.uk/resource/sfs/ можно провести формантный анализ речевого сигнала и сравнить со своими результатами
1
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 15
01.04.2013, 21:28
А есть какие нибудь методики, госты определения формант?
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
01.04.2013, 22:00
https://www.cyberforum.ru/post2924918.html
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
02.04.2013, 09:32
Цитата Сообщение от AndreyShaD Посмотреть сообщение
А есть какие нибудь методики, госты определения формант?
методик много они простые, а вот на счет гостов - конечно их нет. По сути форманты определяют концентрацию энергии на определенных частотах в речевом сигнале. Когда вы произносите вокализированный(гласный) звук, в нем присутствуют ваши личные формантные частоты. Но какая длительность этих звуков, какие у них скорости изменения, зависит не только от диктора, но и от других факторов, типа его эмоционального состояния. Ведь вы можете пытаться говорить максимально разборчиво, или наоборот торопясь и сбиваясь. Так что какие тут могут быть госты? Только ваши предпочтения, например: определяете форманты на отрезке длиной 10, 15, 20 мс, точнее первую форманту(основной тон). Далее по частоте основного тона выбираете остальные форманты в окрестности кратных частот(как - опять же исходя из ваших предпочтений)
1
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 15
04.04.2013, 07:14
Vital792, я пишу диплом. И вот по реверберации я нашёл чёткую методику расчёта, на которую можно будет сослаться. А вот по разборчивости придётся видимо самому писать.
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
04.04.2013, 09:44
Можно в вышеприведенной книге Рабинера найти рекомендации по расчету формант и сослаться на нее.

raxp, неплохо бы добавить эту книгу в закрепленную тему - хорошая книжка, хоть и старая
1
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 15
04.04.2013, 11:13
Vital792, Спасибо большое. Отличная книжка.
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
04.04.2013, 11:20
AndreyShaD, кстати, еще из литературы могу порекомендовать отличную книгу Сапожков "Вокодерная связь" и Маркел-Грей "Линейное предсказание речи". В последней есть глава описывающая исследование формантных траекторий методом линейного предсказание и сравнение его с методом кепстрального сглаживания(которое я использовал в коде на матлаб выше). Если не найдете в сети(хотя вроде должны) обращайтесь, скину на почту(на форум из-за ограничений по размеру прикрепить скорее всего не удастся)
1
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 15
04.04.2013, 11:32
Может есть у кого нибудь книжка в электронной версии?
Акустическая экспертиза каналов речевой коммуникации. Монография / Дидковский В. С., Дидковская М. В., Продеус А. Н.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.04.2013, 11:32
Помогаю со студенческими работами здесь

Алгоритм выделения областей в двумерном массиве
Всем доброго времени суток! Прошу помощи с "разработкой" алгоритма выделения отдельных "областей" данных из массива,...

Выделить формант *.wav файла
Нужно найти форманты звукового файла. Я работаю в Виндовс формах C#. Загружаю файл формата wav, график получаю, получаю спектр через ДПФ и...

Алгоритм выделения объектов из BMP 1bit файла
Добрый день! Вопросы к программистам, хорошо знающим работу с графикой Исходные данные: - есть test1.bmp (1bit, черный цвет -фон,...

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

Запись речи, отправка файла на Google, получение текста речи
Нужна помощь! Нужно написать простую программу. Программа должна при клике на кнопку слушать микрофон. На другую кнопку останавливать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru