реклама на сайте
подробности

 
 
> Алгоритм поиска основной частоты, Метод максимального правдоподобия
QuickNick
сообщение Jul 1 2011, 06:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-07-11
Пользователь №: 66 006



Здравствуйте, товарищи.

Мне нужно улучшить алгоритм поиска основной частоты по методу максимального правдоподобия. Был пример у меня, как делать, я его модифицировал в нескольких местах (добавил настраиваемость оконной функции и фильтра). Возможно, некоторые места вам покажутся совершенно абсурдными - но я пока новичок в DSP, некоторые места в старом алгоритме вызывают у меня сильное удивление, но пока не хватает опыта для однозначного решения: или я не понимаю момент, или предыдущий программист допустил косяк.

- Вход: массив байтов byteData длиной sampleLength, количество разбиений sampleRate.
- Выход: фундаментальная частота fundamentalFrequency и громкость fundamentalVolume.

Алгоритм:
1. Массив байтов преобразуется в вешественный массив амплитуд.
2. Проверяется максимальная амплитуда - если она ниже определённого значения, то это квалифицируется как почти полная тишина (выход из алгоритма)
3. Получение спектра из массива амплитуд:
3.1. Умножение массива амплитуд на оконную функцию;
3.2. Преобразование Фурье.
4. Фильтрация массива спектральных значений.
5. Расчёт массива громкости (модуль от спектральных значений).
6. Нормализация громкости:
6.1. Поиск максимальной громкости (maxVolume).
6.2. Нормализация (volume[i] = volume[i]/maxVolume);
7. Квалификация спектра как информативного или зашумлённого.
8. Инициализация 3 пиков громкости и соответствующих им частот.
9. Поиск фундаментальной частоты.
9.1. Если один из 2 главных пиков громкости ниже некоторого порога громкости, то выбрать частоту другого главного пика, выход из алгоритма.
9.2. Поиск фундаментальной частоты по 2 главным пикам согласно известным пропорциям 1/2, 1/3, 2/3, 2/5, 3/4, 3/5.
9.3. Коррекция фундаментальной частоты по 3-му пику.

Мне нужно пробежаться по некоторым пунктам, чтобы удостовериться в валидности алгоритма.
Пункты 1, 2, 6, 8 и 9 вопросов не вызывают.

Самые горячие вопросы сейчас такие:
1. Правильно ли считается громкость? Массив спектральных значений имеет следующую структуру: в ячейках spectre[2*i] лежат коэффициэнты при косинусах, в spectre[2*i+1] лежат коэффициэнты при синусах. Соответственно, громкость считаю так: volume[i] = sqrt(sqr(spectre[2*i])+sqr(spectre[2*i+1])); Может, таким методом не громкость считается, а что-то другое?
2. Как рассчитать шум? И как рассчитать порог шума (если его превысить, то выход из алгоритма)? Сейчас шум рассчитывается как среднее арифметическое по массиву громкости.

Сообщение отредактировал QuickNick - Jul 1 2011, 07:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
thermit
сообщение Jul 14 2011, 10:25
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
QuickNick:
Вот и нарвались на ступеньку sad.gif
Так что теперь нужны более точные методы.

С одной стороны, ясно, что это будет задача интерполяции, но, с другой стороны, смущает неинъективность отображения в районе пика.
Какой математический инструмент на вооружение взять?


Явление гиббса еще никто не отменял. Методы борьбы с ним широко известны. Возьмите окно кайзера с параметром ~30. Будет Вам равенство значений соседних точек, если частота попадает точно в середину между бинами.
Go to the top of the page
 
+Quote Post
QuickNick
сообщение Jul 14 2011, 10:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-07-11
Пользователь №: 66 006



Цитата(thermit @ Jul 14 2011, 13:25) *
Явление гиббса еще никто не отменял. Методы борьбы с ним широко известны. Возьмите окно кайзера с параметром ~30. Будет Вам равенство значений соседних точек, если частота попадает точно в середину между бинами.

Уже расправился - пока использую интерполяцию Ньютона по 5 точкам, затем с шагом по 0.1 Гц прохожу по интервалу (он получается длиной примерно 3.9 Гц), нахожу максимум.
Возможно, есть какой-то хитрый способ интерполяции наоборот, когда отображение не инъективно, но за полдня найти его не успел.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- QuickNick   Алгоритм поиска основной частоты   Jul 1 2011, 06:56
- - qxov   Описано много всего. Зачем все это делается - не п...   Jul 1 2011, 11:54
|- - QuickNick   Цитата(qxov @ Jul 1 2011, 14:54) Описано ...   Jul 1 2011, 12:30
- - SPACUM   Цитата(QuickNick @ Jul 1 2011, 10:56) Мне...   Jul 1 2011, 13:58
|- - QuickNick   Цитата(SPACUM @ Jul 1 2011, 16:58) 1.Во п...   Jul 1 2011, 14:56
|- - DRUID3   Цитата(QuickNick @ Jul 1 2011, 17:56) В к...   Jul 1 2011, 15:19
|- - QuickNick   Цитата(DRUID3 @ Jul 1 2011, 18:19) ...что...   Jul 2 2011, 09:10
|- - DRUID3   Цитата(QuickNick @ Jul 2 2011, 12:10) Так...   Jul 3 2011, 00:09
|- - SPACUM   Цитата(DRUID3 @ Jul 3 2011, 04:09) Вы уж ...   Jul 3 2011, 16:59
||- - DRUID3   Цитата(SPACUM @ Jul 3 2011, 19:59) Матлаб...   Jul 3 2011, 21:28
|- - QuickNick   Цитата(DRUID3 @ Jul 3 2011, 03:09) Педыду...   Jul 4 2011, 06:19
||- - DRUID3   Цитата(QuickNick @ Jul 4 2011, 09:19) До ...   Jul 4 2011, 07:03
||- - QuickNick   Цитата(DRUID3 @ Jul 4 2011, 10:03) У Вас ...   Jul 4 2011, 07:42
|- - QuickNick   Цитата(DRUID3 @ Jul 3 2011, 03:09) Гы... ...   Jul 4 2011, 12:30
|- - SPACUM   Цитата(QuickNick @ Jul 4 2011, 16:30) А н...   Jul 5 2011, 20:17
|- - QuickNick   Цитата(SPACUM @ Jul 5 2011, 23:17) Пробов...   Jul 6 2011, 06:37
||- - SPACUM   Цитата(QuickNick @ Jul 6 2011, 10:37) Бин...   Jul 6 2011, 11:45
||- - QuickNick   Цитата(SPACUM @ Jul 6 2011, 14:45) Bin - ...   Jul 6 2011, 13:58
||- - SPACUM   Цитата(QuickNick @ Jul 6 2011, 17:58) А. ...   Jul 6 2011, 16:04
||- - QuickNick   Цитата(SPACUM @ Jul 6 2011, 19:04) res =(...   Jul 14 2011, 07:03
||- - SPACUM   Цитата(QuickNick @ Jul 14 2011, 11:03) По...   Jul 14 2011, 17:10
||- - QuickNick   Цитата(SPACUM @ Jul 14 2011, 20:10) 1.Есл...   Jul 15 2011, 06:43
||- - SPACUM   Цитата(QuickNick @ Jul 15 2011, 10:43) За...   Jul 15 2011, 08:22
|||- - QuickNick   Цитата(SPACUM @ Jul 15 2011, 11:22) Если ...   Jul 15 2011, 09:08
||- - SPACUM   Цитата(QuickNick @ Jul 15 2011, 10:43) Но...   Jul 15 2011, 10:51
||- - QuickNick   Цитата(SPACUM @ Jul 15 2011, 13:51) Очень...   Jul 15 2011, 12:01
|- - QuickNick   Цитата(SPACUM @ Jul 5 2011, 23:17) А макс...   Jul 8 2011, 08:59
|- - SPACUM   Цитата(QuickNick @ Jul 8 2011, 12:59) 1)Е...   Jul 8 2011, 21:15
- - DRUID3   Цитата(QuickNick @ Jul 1 2011, 09:56) 8. ...   Jul 1 2011, 14:33
- - QuickNick   2 SPACUM: спасибо большое за помощь!   Jul 11 2011, 06:38
- - thermit   ЦитатаSPACUM: 4.Явление Гиббса никакого отношения ...   Jul 14 2011, 18:30
- - SPACUM   Цитата(thermit @ Jul 14 2011, 22:30) Это ...   Jul 14 2011, 19:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 18:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016