Matlab: как найти основную частоту из списка пиков энергии

В спектрограмме у меня есть набор гармонических частот (пиков в спектре) для заданного периода времени:

5215
3008.1
2428.1
2214.9
1630.2
1315
997.01
881.39
779.04
667.47
554.21
445.77
336.39
237.69
124.6

Если я сделаю -diff(ans), я получу различия между формантами, которые намекают мне на тот факт, что основная частота f_0 этого кадра составляет около 110 Гц:

2206.9
580.06
213.11
584.72
315.24
317.97
115.62
102.35
111.57
113.26
108.44
109.38
98.705
113.08

Ясно, что последние 9 значений первого списка являются гармониками одного и того же f_0, потому что последние 8 значений второго списка примерно одинаковы. Их среднее значение составляет 109,05 (но я не уверен, что это правильный f_0). Как я могу вычислить f_0 в аккуратной функции?


person Lewistrick    schedule 18.04.2014    source источник
comment
Вычисление стандартной вариации с std так же важно, как и вычисление среднего. Это даст вам представление о точности вашего результата. Какие дополнительные вычисления, по вашему мнению, здесь требуются, помимо этого?   -  person buzjwa    schedule 18.04.2014
comment
mathworks.com/help/ signal / ug /   -  person Cici    schedule 18.04.2014


Ответы (1)


Я сам нашел ответ: вычисляю разницу между двумя пиками с наименьшими значениями частоты и значениями энергии выше определенного порога. Затем я проверяю, есть ли эта разница (в определенном диапазоне) в списке частот.

person Lewistrick    schedule 04.07.2014