Вверх ↑
Этот топик читают: Гость
Ответов: 563
Рейтинг: 54
#16: 2010-04-19 17:05:44 ЛС | профиль | цитата
Отказался от графика, работает как то странно
Перепробовал кучу вариантов с полосками и другими параметрами, проверял на куче звуках и ни в одной записи не было зафиксировано пика 200 и выше Гц. Как то всё странно.
------------ Дoбавленo в 16.54:
Почему то постоянно точка onFreq возвращает последовательность чисел от 0 до 172 в таком виде [0,22,43,65,86,108,129,151,172].
Возвращаемое значение из точки я умножаю на 21.533203125 и уже после получаются числа выше в скобках.
------------ Дoбавленo в 17.05:
Будет ли правильным решением указать в самом FFT минимум и максимум индексов. например от 9 до 10.
Пробовал получать частоту таким образом, но в поток выходит ряд чисел так как будто у меня просто стоит Counter вместо FFT и перебирает числа от минимума до максимума. И так по кругу. Почему в поток не выходит реальная частота семпла?
карма: 0

0
Ответов: 8930
Рейтинг: 823
#17: 2010-04-19 19:00:39 ЛС | профиль | цитата
bublik, вот для примера и изучения: code_17845.txt
карма: 19

1
файлы: 1code_17845.txt [5.7KB] [227]
Голосовали:bublik
Ответов: 563
Рейтинг: 54
#18: 2010-04-19 19:50:27 ЛС | профиль | цитата
О... Спасибо большое за отличную пример, на нём уже кое что ясно, буду изучать.
------------ Дoбавленo в 19.50:
Блин я не понял где задан лимит 200. Полоса 1;9;300 что ли?
Ставлю допустим 200 вместо 9 и вообще вырубаю микрофон, в результате индикатор всё равно реагирует. Поставил таймер на кнопку 200 Гц, что бы автоматом нажималось и проверялось. Более того по линкам видно что в компонент If идут данные с Edit, а в них идёт с точки onApml. Какая в этом логика?
карма: 0

0
Ответов: 8930
Рейтинг: 823
#19: 2010-04-19 20:36:25 ЛС | профиль | цитата
bublik,
ini писал(а):
doStrFreqSeparation=Список индексов разделительных частот (включая нижнюю и верхнюю) через разделитель ";" (точка с запятой), например: 2;10;50;250

Леонид писал(а):
Freq=индекс*21.533203125, индекс=9 соответствует частоте 193 Гц

Ещё раз: с точки onIndFreq по doFFT выдаётся не значение самой частоты, а её ИНДЕКС, частота получается из этого индекса умножением на 21,533...; по doFftVis выдаётся НОМЕР полосы, начиная с 0.
Если надо разделить звук на ДВЕ полосы, надо обозначить частоты раздела их индексами, нпример, от 40 Гц до 200 Гц и от 200 Гц до 5000 Гц:
40/21,533~2
200/21,533~9
5000/21,533~232
надо подать на doStrFreqSeparation строку: "2;9;232"
В этом случае по doFftVis получим на onIndFreq номер первой полосы - 0, затем на onAmpl сумму амплитуд от 40 до 200 Гц, затем на onIndFreq номер второй полосы - 1, затем на onAmpl сумму амплитуд от 200 до 5000 Гц.
карма: 19

1
Голосовали:bublik
Ответов: 563
Рейтинг: 54
#20: 2010-04-20 12:51:42 ЛС | профиль | цитата
Вот теперь точно ясно )) Как всё закручено
Один вопрос остался, результат с onAmpl надо умножать на 21,5...?
------------ Дoбавленo в 12.51:
И ещё на выходе после умножения на 21,5... значение всё равно мизерное. Обычная речь человека не менее 100 Гц, а на выходе значения в тихом состоянии 2, а при подаче голоса не выше 100, я умножил результат на 100 и выходная частота стала более правдоподобной.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#21: 2010-04-20 13:26:04 ЛС | профиль | цитата
bublik,
bublik писал(а):
Вот теперь точно ясно

onAmpl - выдаёт амплитудный коэффициент преобразования Фурье для определённой частоты или полосы частот, умножать его не надо.
Леонид писал(а):
с точки onIndFreq по doFFT выдаётся не значение самой частоты, а её ИНДЕКС, частота получается из этого индекса умножением на 21,533...; по doFftVis выдаётся НОМЕР полосы, начиная с 0.

Ликбез: теорема Фурье - любую непрерывную на отрезке AB функцию можно представить (разложить) как сумму гармонических (sin и cos) функций.....
------------ Дoбавленo в 13.23:
Ну не путайте частоту звука с его амплитудой
------------ Дoбавленo в 13.26:
Истинная амплитуда звука по коэффициенту Фурье находится по так: Ампл=Коэф*32768/(2*ПИ)
карма: 19

1
Голосовали:bublik
Ответов: 563
Рейтинг: 54
#22: 2010-04-20 13:57:49 ЛС | профиль | цитата
Оо... Так мне не нужна амплитуда мне надо получить частоту семпла и на выходе получить число типа 200-1000.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#23: 2010-04-20 15:29:51 ЛС | профиль | цитата
bublik, в любом натуральном звуке (музыке, речи, шуме) всегда присутствуют ВСЕ звуковые частоты, правда с разной интенсивностью, т. е. АМПЛИТУДОЙ
карма: 19

1
Голосовали:bublik
Ответов: 563
Рейтинг: 54
#24: 2010-04-20 17:45:18 ЛС | профиль | цитата
Ясно, значит мне надо получить максимальное значение частоты прошедшее в отрезке звукового потока.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#25: 2010-04-20 19:36:56 ЛС | профиль | цитата
bublik,
bublik писал(а):
надо получить максимальное значение частоты прошедшее в отрезке звукового потока
фраза не совсем корректна может иметь смысл при искуственном смешении нескольких частот, но никак не в обычных звуках. Правильнее сформулировать так: "Мне надо получить максимальное значение частоты с амплитудой не менее установленного значения прошедшее в отрезке звукового потока"

карма: 19

1
Голосовали:bublik
Ответов: 563
Рейтинг: 54
#26: 2010-04-20 23:08:03 ЛС | профиль | цитата
Эмнь.. Мало что понял, но похоже вы правы Что мне делать в этом случае?
карма: 0

0
Ответов: 8930
Рейтинг: 823
#27: 2010-04-21 09:40:02 ЛС | профиль | цитата
bublik, наверное, так: code_17870.txt
------------ Дoбавленo в 09.40:
Почётче обозначить конечную цель
карма: 19

1
файлы: 1code_17870.txt [4.9KB] [225]
Голосовали:bublik
27
Сообщение
...
Прикрепленные файлы
(файлы не залиты)