2013-04-09 4 views
0

Я пытаюсь сделать приложение для Android, которое проверяет, является ли записанный голос человека высокой частотой или нет. Я закончил до записи, но не знаю, как продолжить дальше. После поиска я обнаружил, что алгоритм БПФ должен использоваться, но проблема заключается в том, как получить значения массива, которые должны быть переданы как входные данные алгоритма. Может ли кто-нибудь помочь?обработка человеческого голоса

ответ

2

Предполагая, что вы определили, что подразумевается под «содержит высокую частоту», и вам просто нужна мера этого (нет необходимости визуализировать частотное содержание на графике), нет необходимости вычислять БПФ.

Я бы вычислил среднеквадратичные значения сигнала (мера общей энергии), затем применил фильтр нижних частот для данных (во временной области) и снова вычислил значения RMS на отфильтрованном сигнале. Сравнение потери энергии - это ваш показатель того, насколько высокое частотное содержание отвечает за ваше первоначальное значение энергии.

Ответ на комментарий:

Вам нужны данные для того, чтобы обработать его! Возможно, я не понимаю ваш вопрос? из чего вы хотите «получить точные значения« Вы заявили, что вы »завершили запись, поэтому я предполагаю, что у вас есть сигнал, хранящийся в памяти, теперь вам нужно вычислить полную энергию сигнала для того, чтобы либо A) вычислить изменение энергии после фильтрации или B) сравнить энергию с некоторым предопределенным жестко заданным значением (bad idea btw).

В любом случае это должно быть сделано во временной области, если все, что вы хотите, является мерой/значением. Как указано в теореме Парсеваля, нет необходимости выполнять интенсивную обработку процессора и переходить в частотную область для вычисления энергии сигнала. http://en.wikipedia.org/wiki/Parseval «s_theorem

РАЗРАБОТКА:

При записи голоса пользователя (сбор данных для вашего сигнала), необходимо убедиться, что данные не теряются и правильно хранятся в памяти (в некотором массиве типа объекте) и что у вас есть ссылка на этот массив. После сбора данных вам не нужно преобразовывать свой сигнал в значения, он уже сохраняется как последовательность значений. Поэтому теперь вы готовы выполнить некоторый расчет, чтобы получить меру «сколько высоких частот есть» ...

Значение среднеквадратичного значения (среднеквадратичное значение) является стандартизированным способом измерения полной энергии сигнал - вы берете «квадратный корень из среднего значения всех квадратов значений». См. http://mathworld.wolfram.com/Root-Mean-Square.html

RMS быстро и легко вычислить, но он дает вам энергию общего сигнала, низкочастотных компонентов и компонентов высокой частоты вместе, и нет способа узнать, связано ли высокое значение RMS с большим количеством высокочастотных компонентов или низкочастотных компонентов. Поэтому, я предлагаю, вы удаляете высокочастотные компоненты и снова вычисляете значение RMS, чтобы увидеть, насколько изменилась полная энергия при этом, т.е. насколько высокие частоты отвечали за исходное «сырое» значение RMS. Разделение двух значений - это показатель отношения высокой частоты ... Я не уверен, что это то, что вы хотите сделать, но то, что я буду делать.

Для фильтрации нижних частот вам необходимо выбрать значение частоты Fcut и сказать что-либо по этому вопросу считается «высоким», а затем применить фильтр нижних частот с точкой отсечки, установленной на Fcut, применение фильтра выполняется в временной области с помощью свертки.

+0

, если я должен это сделать, тогда мне потребуются точные значения звукового сигнала. Можно ли получить точные значения? –

+0

см. Мой ответ выше – Fredrik

+0

записанный голос хранится в памяти, но для выполнения вычислений мне нужно преобразовать записанный голос в цифры rght? это то, что я имею в виду по значениям –

0

Обычно они используют класс AudioRecord. Он записывает необработанные данные PCM, затем они могут выполнять некоторые вычисления по данным.

+0

Будет ли запись сохранена на SD-карте? –

+0

Могу ли я установить максимальную продолжительность записи звука? –

Смежные вопросы