|
|
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
Привет, стоит задача обработать запись голоса с микрофона и выдать инфу о всех возможных (реализуемых) характеристиках голоса. написал программу для андроид, голос записывается с микрофона в формате byte[] or short[] public static int bufferSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); private static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, audioEncoding, bufferSize); tempBuffer = new byte[bufferSize]; recordInstance.read(tempBuffer, 0, bufferSize); в итоге каждую секунду получаю tempBuffer - данные с микрофона. после этого использую библиотку JTransforms.jar для анализа данных алгоритмом FFT. получаю массив float. A что делать дальше? интересует: 1. амплитуда, 2. частота, 3. Duration in seconds 4. Mean pitch 5. Std dev pitch 6. Min pitch 7. Max pitch 8. Nr of pulses 9. Nr of period 10. Mean for one period 11. Std dev for one period 12. Fraction of unvoice frames 13. Nr of voice break 14. Procent of voice break ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:07:55 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
жаба-то причём тут? Если не знаешь что представляет из себя массив с результатом быстрого преобразования фурье то надо почитать теорию. Вот тут например http://websound.ru/ в общем случае БПФ тебе в анализе голоса не очень поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 10:43:34 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024, ок, спасибо за ссылку, почитаю что там есть. Если для анализа голоса БПФ мне не поможет, то что лучше использовать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 20:06:08 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos1024, ок, спасибо за ссылку, почитаю что там есть. Если для анализа голоса БПФ мне не поможет, то что лучше использовать ? не знаю. Зависит от задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 22:06:16 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos, Имхо, преобразование Фурье Вы правильно выбрали. Правильной дорогой идёте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 00:42:39 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
ShSergeetnos, Имхо, преобразование Фурье Вы правильно выбрали. Правильной дорогой идёте. БПФ позволяет анализировать только одну из характеристик голоса - частотную. Но у голоса есть и амплитудные параметры, которые с помощью преобразования Фурье анализировать в принципе невозможно, так как они "размываются" во времени. И время "размытия" тем больше, чем точнее будет анализироваться частотные характеристики голоса (чем больше будет окно преобразования). Поэтому для анализа голоса нужно использовать два типа преобразований - Фурье для анализа частотного спектра и Вейвлет для анализа амплитудно-временных характеристик. Если использовать только БПФ, то из анализа выпадут таки звуки, как К,Ч,Т,П и т.д. То есть те, в которых присутствует "взрывная" составляющая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 08:09:49 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
РеалистShSergeetnos, Имхо, преобразование Фурье Вы правильно выбрали. Правильной дорогой идёте. БПФ позволяет анализировать только одну из характеристик голоса - частотную. Но у голоса есть и амплитудные параметры, которые с помощью преобразования Фурье анализировать в принципе невозможно, так как они "размываются" во времени. И время "размытия" тем больше, чем точнее будет анализироваться частотные характеристики голоса (чем больше будет окно преобразования). Поэтому для анализа голоса нужно использовать два типа преобразований - Фурье для анализа частотного спектра и Вейвлет для анализа амплитудно-временных характеристик. Если использовать только БПФ, то из анализа выпадут таки звуки, как К,Ч,Т,П и т.д. То есть те, в которых присутствует "взрывная" составляющая. а зачем? Цель-то какая? Ну будет получен спектр слова "Жопа" произнесённого бухгалтером Марией Петровной. А дальше что? Зависит от конечной цели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 10:30:14 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024, Я просто показал, что одной информации из БПФ "о всех возможных (реализуемых) характеристиках голоса" может оказаться недостаточно. Понятно, что все зависит от конечной цели. В противном случае можно было бы использовать не БПФ, а просто обычное вычитание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 11:39:45 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
Цель проекта в том, чтобы сравнивать голос человека через оприделенное время, к примеру, через 5 мин, и потом на основе характеристик голоса сделать вывод как на человека повлияло то, что он делал в течении этих 5мин. а в течении этих 5 мин пользователю будет показывать видео, в котором будет много эмоциональных моментов. вот суть в том, чтобы оприделить какие именно эмоции влияют больше всего на данного человека. к примеру 5-6 различных видео с различными эмоциями и нужно выявить которое из эмоций наибольше всего повлияло на человека ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 13:37:05 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosЦель проекта в том, чтобы сравнивать голос человека через оприделенное время, к примеру, через 5 мин, и потом на основе характеристик голоса сделать вывод как на человека повлияло то, что он делал в течении этих 5мин. а в течении этих 5 мин пользователю будет показывать видео, в котором будет много эмоциональных моментов. вот суть в том, чтобы оприделить какие именно эмоции влияют больше всего на данного человека. к примеру 5-6 различных видео с различными эмоциями и нужно выявить которое из эмоций наибольше всего повлияло на человека к жаве это точно отношения не имеет. Да и к программированию наверна тоже - тут же надо сначала выяснить какие характеристики являются значимыми. Вобщем не сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 14:18:38 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024, +1024 (Извини за тавтологию) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 15:24:29 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024к жаве это точно отношения не имеет. Да и к программированию наверна тоже - тут же надо сначала выяснить какие характеристики являются значимыми. Вобщем не сюда. может действительно не сюда, но проект пишется на Java. Нужные характеристики тоже известны, это: 1. амплитуда, 2. частота, 3. Duration in seconds 4. Mean pitch 5. Std dev pitch 6. Min pitch 7. Max pitch 8. Nr of pulses 9. Nr of period 10. Mean for one period 11. Std dev for one period 12. Fraction of unvoice frames 13. Nr of voice break 14. Procent of voice break я ресечил в гугле и ничего кроме FFT по анализу звука не нашел, вот по этому меня и интересует может есть библиотеки или алгоритмы или открытые проекты или статьи в которых описывается как из записанного с микрофона голоса можно найти нужные параметры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 17:20:49 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos1024к жаве это точно отношения не имеет. Да и к программированию наверна тоже - тут же надо сначала выяснить какие характеристики являются значимыми. Вобщем не сюда. может действительно не сюда, но проект пишется на Java. Нужные характеристики тоже известны, это: 1. амплитуда, 2. частота, 3. Duration in seconds 4. Mean pitch 5. Std dev pitch 6. Min pitch 7. Max pitch 8. Nr of pulses 9. Nr of period 10. Mean for one period 11. Std dev for one period 12. Fraction of unvoice frames 13. Nr of voice break 14. Procent of voice break я ресечил в гугле и ничего кроме FFT по анализу звука не нашел, вот по этому меня и интересует может есть библиотеки или алгоритмы или открытые проекты или статьи в которых описывается как из записанного с микрофона голоса можно найти нужные параметры? у тебя есть набор байтов с микрофона. Что есть амплитуда? Ну найди в массиве самое большое число. Чисто статистически это максимальная амплитуда. Что это тебе даст? Да ничего. или 7. Max pitch - это максимальная частота из спектра, насколько я понимаю - разложил БПФ слова "Жопа", нашёл её (причём приблизительно, точных частот он тебе не найдёт). Что дальше? Так же и по остальным пунктам. По-моему это сложный проект, не знаю ни одного качественного решения. Есть например такое http://www.shazam.com/ - на сервере хранятся "слепки" (soundprint) музыки т.е. примерно как у тебя - характеристики частот, пауз, скачков громкости и пр. Можно мобилу к радио поднести, сервис с микрофона считает песню в плохом качестве но сможет в своей базе найти по слепку. Кратко о технологии http://en.wikipedia.org/wiki/Acoustic_fingerprint Чтонить из этой области надо смотреть. Но это к жабе отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 17:39:52 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
http://linux-sound.org/dsp.html http://miracle.otago.ac.nz/tartini/ ну и тут ещё можно что-то спрашивать ) JTransforms, кстати, да - хороша ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 19:56:32 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos1. амплитуда, 2. частота, 3. Duration in seconds 4. Mean pitch 5. Std dev pitch 6. Min pitch 7. Max pitch 8. Nr of pulses 9. Nr of period 10. Mean for one period 11. Std dev for one period 12. Fraction of unvoice frames 13. Nr of voice break 14. Procent of voice break Попробуйте, для начала, перевести названия этих параметров на русский. ИМХО, конечно, но мне кажется, что большинство этих параметров вычисляются во временном домене, а не в частотном. Хотя некоторые (Mean pitch - средняя интенсивность?) можно вычислять в обоих доменах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 20:32:49 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
по этому описанию en.wikipedia.org/wiki/Pitch_(music) pitch рассчитывается с помощью частоты. по этому в списке нужных характеристик присутствует частота. в зависимости от силы воздействия эмоции (насколько человек может прочувствовать эмоцию) mean pitch изменяется в приделах 2% - 7% система которую я пишу как раз и должна улавливать это изменение или отсутствие изменений, что также важно. private float[] spectrumAnalyz(float[] spectr) { float Re; float Im; float[] spectruData = spectr; float[] mySpectrum = new float[(spectruData.length / 2) - 1]; for (int i = 1, j = 0; i < spectruData.length / 2; i++, j++) { Re = spectruData[2 * i]; Im = spectruData[2 * i + 1]; mySpectrum[j] = (float) Math.sqrt(Re * Re + Im * Im); } return mySpectrum; } собственно этот метод принимает на вход массив который вернул алгоритм FFT. хочу спросить у тех, кто работал раньше с FFT, это правильная формула для нахождения спектра частот ? ведь если у меня будут частоты, то я смогу найти хотя бы pitch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 02:26:40 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
Начинай с теории - т.к. у тебя каша в голове - задай себе простой вопрос - зачем для своего анализа ты используешь преобразование Фурье? Что оно тебе в твоем случае дает такого, чего не даст сигнал во временном пространстве? После этого - если все же тебе нужно Фурье - тогда читай теорию - там нельзя просто тупо запихивать входные данные - его надо "настраивать" под каждое преобразование - zeros padding, размер окна, чтоб не пропустить частоты и увидеть динамику спектра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 10:22:57 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosпо этому описанию en.wikipedia.org/wiki/Pitch_(music) pitch рассчитывается с помощью частоты. по этому в списке нужных характеристик присутствует частота. в зависимости от силы воздействия эмоции (насколько человек может прочувствовать эмоцию) mean pitch изменяется в приделах 2% - 7% система которую я пишу как раз и должна улавливать это изменение или отсутствие изменений, что также важно. private float[] spectrumAnalyz(float[] spectr) { float Re; float Im; float[] spectruData = spectr; float[] mySpectrum = new float[(spectruData.length / 2) - 1]; for (int i = 1, j = 0; i < spectruData.length / 2; i++, j++) { Re = spectruData[2 * i]; Im = spectruData[2 * i + 1]; mySpectrum[j] = (float) Math.sqrt(Re * Re + Im * Im); } return mySpectrum; } собственно этот метод принимает на вход массив который вернул алгоритм FFT. хочу спросить у тех, кто работал раньше с FFT, это правильная формула для нахождения спектра частот ? ведь если у меня будут частоты, то я смогу найти хотя бы pitch Это не нахождение спектра частот. Это преобразование массива комплексных чисел в массив обычных. БПФ вычисляется по мнимым (комплексным числам) и некоторые реализации алгоритма их в комплексном виде возвращают. Само БПФ не даёт расклада по частотам. Оно даёт приблизительный ответ на вопросы типа "сколько частот в оцифрованном куске примерно равных 100Гц +-10Гц". Даже для волн одинаковой частоты но разных по форме (квадратные и синусоидальные) БПФ вернёт разный массив данных. Описанная тобой задача сложна, без теории заниматься ей нет смысла. Прочитай по ссылкам выше. Ближе всего к задача тема AcousticFingerPrint (SoundPrint). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 11:15:30 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
ок, спасибо большое! буду читать теорию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 12:14:48 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024Это не нахождение спектра частот. Это преобразование массива комплексных чисел в массив обычных. БПФ вычисляется по мнимым (комплексным числам) и некоторые реализации алгоритма их в комплексном виде возвращают. Само БПФ не даёт расклада по частотам. Оно даёт приблизительный ответ на вопросы типа "сколько частот в оцифрованном куске примерно равных 100Гц +-10Гц". Даже для волн одинаковой частоты но разных по форме (квадратные и синусоидальные) БПФ вернёт разный массив данных. Описанная тобой задача сложна, без теории заниматься ей нет смысла. Прочитай по ссылкам выше. Ближе всего к задача тема AcousticFingerPrint (SoundPrint). это нахождение спектра частот при условии что массив spectruData содержит данные полученные после применения БПФ к исходному сигналу, обычный амплитудный спектр. БПФ дает распределение по частотам, нафиг оно таогда вообще нужно. Другой вопрос, что работает он в предположении бесконечных гармонических колебаний. Но есть куча всего что обходит эти ограничения для дискретного конечного сигнала - единственный вариант который можно преобразовать с помощью цифровых методов обработки. Я бы посоветовал найти матлаб крякнутый, там всего много. Даже слишком много, но там есть по карйней мере правильно работающие алгоритмы и местами даже теория в документации есть. Была у меня книжечка где оооочень подробно и на пальцах объясняется что к чему, но найти пока не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 04:07:38 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
это именно преоразование комплексных чисел в обычные. БПФ не даёт точное распределение по частотам, как я говорил, даже для волн одинаковой частоты но разных по форме (квадратные и синусоидальные) БПФ вернёт разный массив данных. Пользуются им от того что ничего лучше пока не придумано. Речь это не один сигнал, это набор частот. Восстановить набор частот по конечно сумме частот невозможно (типа по цифре 100 догадаться что она является суммой 50+50 или 60+30+10). Это, условно, можно решить перебором и статистическим анализом. Книжек много разных но сама поставленная задача сложна. Не знаю ни одной качественной реализации подобного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 10:36:47 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
посмотри внимательно чувак. Что есть преобразование коплексных чисел в обычные? Да там разделяются массив состоящий из реальных и мнимых частей на реальный массив и мнимый, потмоу что в яве нет встроенного комплексного типа, но на следующую формулу посмотри. Это спектр либо мощности либо амплитуды (сейчас не могу точно сказать). Про книжку я имел ввиду именно что такое БПФ, потмоу что явно понимания нет. Про распознование речи естественно я ничего не говорил. Слишком сложное понятие, но параметры которые хочет автор весьма стандартные и вычисляются через БПФ или производные. Но перечисленные парапаметры применимы к стационарным сигналам. Например к речи и любому более менее сложному сигналу не применимо понятие частота и амплиутда. Говорят обычно об оценке параметров, обычно энергетические характеристики такие как усредненныая амплитуда, SEL, SPL. Нестационарные процессы боее сложны и да там вохможно нужны вейвлет преобразования. авторРечь это не один сигнал, это набор частот. ты путаешься в терминологии. Нет речь это один сигнал, если под сигналом подразумевать временную развертку выбранного интервала речи. Но да, там дохрена частот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 18:49:27 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
recvezitorпосмотри внимательно чувак. Что есть преобразование коплексных чисел в обычные? Да там разделяются массив состоящий из реальных и мнимых частей на реальный массив и мнимый, потмоу что в яве нет встроенного комплексного типа, но на следующую формулу посмотри. Это спектр либо мощности либо амплитуды (сейчас не могу точно сказать). если не можешь точно сказать то зачем лезешь спорить. Чувак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 00:18:34 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
чувак потому что там разница в наличии и отсутвтвия корня и нормировки, я не помню просто уже. Но факт на лицо что там спектр, а не тот бред авторэто именно преоразование комплексных чисел в обычные, я с этим работал, правда пол года назад уже, так что я шарю поверь мне. авторБПФ вычисляется по мнимым это вообще лол ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 02:57:18 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
recvezitorчувак потому что там разница в наличии и отсутвтвия корня и нормировки, я не помню просто уже. Но факт на лицо что там спектр, а не тот бред авторэто именно преоразование комплексных чисел в обычные, я с этим работал, правда пол года назад уже, так что я шарю поверь мне. авторБПФ вычисляется по мнимым это вообще лол думаю что не шаришь. В противном случае ты бы смог подсказать топикстартеру что делать в его случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 11:43:57 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
есть программа, Praat, http://www.fon.hum.uva.nl/praat/ мне бы хотелось сделать что-то подобное, но для андроид суть программы Praat, записывать голос и показывать его параметры. я хочу сделать тоже самое, только параметры сохранять в БД самое главное что у них все получилось, ну в плане анализа голоса, значит задача решаема, осталось только понять как они это сделали....и вот тут у меня пробел в знаниях, потому что раньше со звуком я никогда не работал :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 17:13:31 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
ты ж написал авторЦель проекта в том, чтобы сравнивать голос человека через оприделенное время, к примеру, через 5 мин, и потом на основе характеристик голоса сделать вывод как на человека повлияло то, что он делал в течении этих 5мин. взять характеристики голоса можно. Тот же спектр построить или среднюю громкость получить. Вопрос в том что с ними дальше делать. Элементарно сказать "черничный пирог" можно как "чирничый пирок" или "черничный пирох". Если ты считаешь что коллектив по твоей ссылке этот вопрос решил - напиши им письмо и спроси. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 17:42:58 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
делать оприделять эмоцию на основе характеристик голоса это вторая часть проекта до которой еще нужно дожить. на данный момент я получаю массив байтов с микрофона. Каждую секунду записи я получаю 8000 байт. но я не знаю, что мне с ними делать. гугл все время выдает ссылки на FFT. порывшись в различных проектах которые использовали FFT, я нашел эту формулу private float[] spectrumAnalyz(float[] spectr) { float Re; float Im; float[] spectruData = spectr; float[] mySpectrum = new float[(spectruData.length / 2) - 1]; for (int i = 1, j = 0; i < spectruData.length / 2; i++, j++) { Re = spectruData[2 * i]; Im = spectruData[2 * i + 1]; mySpectrum[j] = (float) Math.sqrt(Re * Re + Im * Im); } return mySpectrum; } я не знаю насколько она правильна, потому что достоверной информации так и не нашел, но в различных проектах используют именно ее. как я понимаю, FFT раскладывает звуковую волну на гармоники. точнее на сумму гармоник. после применения формулы представленной выше, я получаю просто набор частот. (не понимаю зачем надо было сначла раскладывать на гармоники, а потом опять возвращать в частоты, может есть способ сразу в частоты? ) в итоге у меня есть float массив с частотами записи моего голоса. дальше я, используя гугл, нахожу формулу pitch 69+12*log2(F/440), где F - частота в Hz. теперь у меня есть массив float который содержит информацию о pitch моего голоса. ну и дальше я нахожу мин, макс. среднее и среднее квадратичное. задача с помощью android device отобразить характеристики голоса человека. то что я буду дальше делать с ними, это уже второй шаг. сейчас мне интересно правильно ли я понял и реализовал задачу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 19:03:59 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosкак я понимаю, FFT раскладывает звуковую волну на гармоники. точнее на сумму гармоник. после применения формулы представленной выше, я получаю просто набор частот. (не понимаю зачем надо было сначла раскладывать на гармоники, а потом опять возвращать в частоты, может есть способ сразу в частоты? ) Вы получаете спектр сигнала: значения амплитуд разных гармоник. Для данного окна (8000 отсчетов) набор частот этих гармоник фиксирован. Вам, скорее всего, необходимо придумать понятие "мнгновенной" частоты или "средней частоты" на разных отрезках Вашего сигнала. В качестве первого приближения, я бы попробовал взять обратное расстояние между 0 сигнала: 1. Вычислил среднее значение сигнала. 2. Из всех отсчетов вычел это среднее. 3. Нашел точки (времена) t[i], где сигнал меняет знак 4. Принял, что на отрезке t[i]..t[i+1] частота F[i]=8000/(t[i+1]-t[i]) 5. Далее вычислял все про высоту сигнала по формуле с log2, искал мин, макс и пр. И почитайте про ряд Фурье (не FFT, а именно ряды). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 19:35:09 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
4. Принял, что на отрезке t[i]..t[i+1] частота F[i]=8000/(t[i+1]-t[i]) Поправка: F[i]=4000/(t[i+1]-t[i]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 19:46:56 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
Без теории любые математические преобразования не стоят выеденного яйца. Это все равно, что пытаться предсказать курс доллара на основе его предыдущих значений. В принципе можно в некоторых случаях получить псевдодостоверный результат, но вот только к "предсказанию" это не будет иметь не малейшего отношения. Так же и при анализе звука. Можно пытаться измерять множество различных характеристик, но пока не будет хоть какой то модели звукообразования и принципов влияния эмоций на эту модель, то вычислять БПФ можно до бесконечности с практически нулевым результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 23:21:37 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosна данный момент я получаю массив байтов с микрофона. Каждую секунду записи я получаю 8000 байт. но я не знаю, что мне с ними делать. гугл все время выдает ссылки на FFT. порывшись в различных проектах которые использовали FFT, я нашел эту формулу private float[] spectrumAnalyz(float[] spectr) { float Re; float Im; float[] spectruData = spectr; float[] mySpectrum = new float[(spectruData.length / 2) - 1]; for (int i = 1, j = 0; i < spectruData.length / 2; i++, j++) { Re = spectruData[2 * i]; Im = spectruData[2 * i + 1]; mySpectrum[j] = (float) Math.sqrt(Re * Re + Im * Im); } return mySpectrum; } я не знаю насколько она правильна, потому что достоверной информации так и не нашел, но в различных проектах используют именно ее. это абсолютно правильный кусок. Но не бпф. Ты о нём уже спрашивал. Я тебе уже по нему ответил - это преобразование массива комплексных чисел в массив обычных. Это не вычисление бпф. Ты написал что используешь JTransform. Там уже есть реализация дискретного преобразованиея фурье в пакете edu.emory.mathcs.jtransforms.fft. В исходниках его можешь посмотреть алгоритм если он тебе зачем-то понадобится. Ничего писать не надо, реализация в этой библиотеке уже есть (не знаю уж насколько этим можно пользоваться но есть). Надо понять зачем оно тебе. Ты спрашиваешь по второму разу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 01:10:08 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
1024, я знаю что это не вычисление БПФ. вычисление БПФ я сделал до этой функции. Код: java 1. 2. у меня получается массив data который содержит вычисления БПФ. и мне нужно как-то их обработать. БПФ возвращает массив комплексных чисел и я их потом перевожу в массив обычных. с помощью функции spectrumAnalyz Реалист, Полностью согласен, без теории далеко не уйдешь. Если можно, посоветуйте книги или сайты с теорией анализа звука и/или голоса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 16:14:22 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos, Хотя бы вот это для начала. На самом деле, нет однозначной теории и математического аппарата, который позволил бы моделировать, а значит и распознавать, человеческую речь с достаточной точностью. Существуют несколько областей, в которых подход к анализу может значительно отличаться, например командное распознавание фиксированного набора слов и распознавание слитной речи. В вашем случае, т.е. анализ эмоций, нужна предварительная работа по выявлению самих значимых характеристик голоса. То есть нужно искать или создавать самому базу данных разных дикторов с произношением фраз в различном эмоциональном состоянии. На основании этих данных пытаться выявить значимые признаки (скорее всего анализ частоты будет одной, но не единственно и не самой главной анализируемой характеристикой голоса). Это я к чему? Не нужно надеяться на быстрый и 100% результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 16:33:20 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnos1024, я знаю что это не вычисление БПФ. вычисление БПФ я сделал до этой функции. Код: java 1. 2. у меня получается массив data который содержит вычисления БПФ. и мне нужно как-то их обработать. БПФ возвращает массив комплексных чисел и я их потом перевожу в массив обычных. с помощью функции spectrumAnalyz Из БПФ Вы не получите pitch. Вы понимаете, что именно Вам возвращает БПФ (кроме того, что это массив каких-то чисел)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 16:36:20 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
x1ca4064, Если я правильно понял, то это гармоники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 18:30:54 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosx1ca4064, Если я правильно понял, то это гармоники. Попробую переформулировать вопрос: Что содержится в spectr[0] и spectr[1]? Что такое sqrt(sqrq(spectr[0])+sqr(spectr[1]))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 19:35:41 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
x1ca4064, Данный вариант алгоритма преобразования Фурье использует для вычисления комплексные числа, что дает ощутимый прирост производительности. Такой алгоритм возвращает массив у которых i-й элемент это реальная часть, а i+1 это мнимая часть. Чтобы переобразовать комплексное число в один из типов данных поддерживаемый java нужно возвести в квардарт реальную и мнимую часть, сложить полученные числа, и потом под корень. В итоге получается тип данные поддерживаемый java над которым можно производить вычисления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 22:38:18 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
etnosx1ca4064, Данный вариант алгоритма преобразования Фурье использует для вычисления комплексные числа, что дает ощутимый прирост производительности. Я не спец в яве, но, как мне кажется, ява не поддерживает вычисления с комплексными числами (это и не важно). Прирост производительности достигается совсем не за счет использования комплексных чисел, а за счет хитрой связи между преобразованием Фурье на разных выборках. Такой алгоритм возвращает массив у которых i-й элемент это реальная часть, а i+1 это мнимая часть. Чтобы переобразовать комплексное число в один из типов данных поддерживаемый java нужно возвести в квардарт реальную и мнимую часть, сложить полученные числа, и потом под корень. В итоге получается тип данные поддерживаемый java над которым можно производить вычисления. Я хорошо понимаю, что делает показанный алгоритм. А вот Вы понимаете, что преобразование (комплексное число)->(реальное число) невозможно без потери информации? И это никак не связано с типами данных, которое поддерживает ява или другой язык? Вопросы, которые я задал в предыдущем посте остаются в силе. Странно, но у меня сложилось впечатление, что Вы пытаетесь меня в чем-то убедить. Это не тот спор: я примерно представляю, как получить те критерии, которые Вам необходимы, а Вы, похоже, не совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2012, 02:40:24 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
x1ca4064, spectr[0] spectr[1] это "амплитуда" синуса и косинуса (или наоборот) sqrt(sqrq(spectr[0])+sqr(spectr[1])) это мощность гармоники т.е. грубо говоря ПФ поясняет вам с какими коэффициентами сложить синусы и косинусы кратных гармоник чтобы получить сигнал, похожий на исходный. а ява не поддерживает вычисления с комплексными числами это вообще pusque. кстати, фурье даёт точность частот ближе к верхнему краю, полоса частот в которых хранится смысловая нагрузка человеческой речи, при окне бпф 1024-2048 отсчетов, будет занимать 2-3 нижних гармоники, из которых вы ничего не поймете. Чтобы выявить pitch вам нужно либо очень высокое разрешение сигнала, либо автокорреляционный анализ, который достаточно ресурсоемок, хотя даёт точные результаты именно по тональности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 17:32:14 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
Лагман, Отверчайте ТС, пожалуйста. У меня этих вопросов нет. Чтобы выявить pitch вам нужно либо очень высокое разрешение сигнала, либо автокорреляционный анализ, который достаточно ресурсоемок, хотя даёт точные результаты именно по тональности. А что вы думаете насчет предложенного мной алгоритма (анализа 0 сигнала во временном домене)? Как я понял, pitch это попытка представить сигнал в виде частота(время). Фурье данную задачу не решает. Т.о. либо примитивный анализ 0 сигнала, или (тут есть ньюансы) - вейвлеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2012, 01:14:29 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
x1ca4064, да, перепутал, извините. 0 сигнал подойдет для простого сигнала типа гладкой синусоиды, можно сначала попробовать отфильтровать сигнал чтоб удалить лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2012, 19:52:57 |
|
||
|
Анализ звука алгоритмом FFT
|
|||
|---|---|---|---|
|
#18+
x1ca4064, Не подумайте ничего такого, я никого не пытался убедить, просто рассказывал как я понимаю этот алгоритм. Вы абослютно правы, я не доконца понимаю суть работы этого алгоритма (не факт что я вообще его правильно понимаю :( ) Лагман, Лагманкстати, фурье даёт точность частот ближе к верхнему краю, полоса частот в которых хранится смысловая нагрузка человеческой речи, при окне бпф 1024-2048 отсчетов, будет занимать 2-3 нижних гармоники, из которых вы ничего не поймете. Чтобы выявить pitch вам нужно либо очень высокое разрешение сигнала, либо автокорреляционный анализ, который достаточно ресурсоемок, хотя даёт точные результаты именно по тональности. А как я могу получить полосу частот в которой хранится смысловая нагрузка человеческой речи другим способом ? Может я придумываю велосипед и все давно уже реализовано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 11:57:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2132068]: |
0ms |
get settings: |
17ms |
get forum list: |
27ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
180ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
106ms |
get tp. blocked users: |
2ms |
| others: | 358ms |
| total: | 731ms |

| 0 / 0 |
