Отказался от графика, работает как то странно
Перепробовал кучу вариантов с полосками и другими параметрами, проверял на куче звуках и ни в одной записи не было зафиксировано пика 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 и перебирает числа от минимума до максимума. И так по кругу. Почему в поток не выходит реальная частота семпла?
Этот топик читают: Гость
Ответов: 563
Рейтинг: 54
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
bublik, вот для примера и изучения: code_17845.txt
|
|||
карма: 19 |
| ||
файлы: 1 | code_17845.txt [5.7KB] [227] | ||
Голосовали: | bublik |
Ответов: 563
Рейтинг: 54
|
|||
О... Спасибо большое за отличную пример, на нём уже кое что ясно, буду изучать.
------------ Дoбавленo в 19.50: Блин я не понял где задан лимит 200. Полоса 1;9;300 что ли? Ставлю допустим 200 вместо 9 и вообще вырубаю микрофон, в результате индикатор всё равно реагирует. Поставил таймер на кнопку 200 Гц, что бы автоматом нажималось и проверялось. Более того по линкам видно что в компонент If идут данные с Edit, а в них идёт с точки onApml. Какая в этом логика? |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
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 |
| ||
Голосовали: | bublik |
Ответов: 563
Рейтинг: 54
|
|||
Вот теперь точно ясно )) Как всё закручено
Один вопрос остался, результат с onAmpl надо умножать на 21,5...? ------------ Дoбавленo в 12.51: И ещё на выходе после умножения на 21,5... значение всё равно мизерное. Обычная речь человека не менее 100 Гц, а на выходе значения в тихом состоянии 2, а при подаче голоса не выше 100, я умножил результат на 100 и выходная частота стала более правдоподобной. |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
bublik,
bublik писал(а): Вот теперь точно ясноonAmpl - выдаёт амплитудный коэффициент преобразования Фурье для определённой частоты или полосы частот, умножать его не надо. Леонид писал(а): с точки onIndFreq по doFFT выдаётся не значение самой частоты, а её ИНДЕКС, частота получается из этого индекса умножением на 21,533...; по doFftVis выдаётся НОМЕР полосы, начиная с 0.Ликбез: теорема Фурье - любую непрерывную на отрезке AB функцию можно представить (разложить) как сумму гармонических (sin и cos) функций..... ------------ Дoбавленo в 13.23: Ну не путайте частоту звука с его амплитудой ------------ Дoбавленo в 13.26: Истинная амплитуда звука по коэффициенту Фурье находится по так: Ампл=Коэф*32768/(2*ПИ) |
|||
карма: 19 |
| ||
Голосовали: | bublik |
Ответов: 563
Рейтинг: 54
|
|||
Оо... Так мне не нужна амплитуда мне надо получить частоту семпла и на выходе получить число типа 200-1000.
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
bublik, в любом натуральном звуке (музыке, речи, шуме) всегда присутствуют ВСЕ звуковые частоты, правда с разной интенсивностью, т. е. АМПЛИТУДОЙ
|
|||
карма: 19 |
| ||
Голосовали: | bublik |
Ответов: 563
Рейтинг: 54
|
|||
Ясно, значит мне надо получить максимальное значение частоты прошедшее в отрезке звукового потока.
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
bublik,
bublik писал(а): надо получить максимальное значение частоты прошедшее в отрезке звукового потока |
|||
карма: 19 |
| ||
Голосовали: | bublik |
Ответов: 563
Рейтинг: 54
|
|||
Эмнь.. Мало что понял, но похоже вы правы Что мне делать в этом случае?
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
bublik, наверное, так: code_17870.txt
------------ Дoбавленo в 09.40: Почётче обозначить конечную цель |
|||
карма: 19 |
| ||
файлы: 1 | code_17870.txt [4.9KB] [225] | ||
Голосовали: | bublik |
27