Обнаружение пиков в частотном спектре без использования FFS MATLAB

#matlab #frequency-analysis

#matlab #частотный анализ

Вопрос:

Предполагая, что у меня есть сигнал x (t), смогу ли я обнаружить пик в частотном спектре (то есть частоту с наибольшим содержанием энергии) без использования FFT?

* PS — я видел что-то в вейвлет-разложении, называемое scale2freq(). Я просмотрел это на странице справки MATLAB, и это привело меня в замешательство. Имеет ли функция какое-либо отношение к частотным представлениям? Если да, как мне найти пиковые частоты с его помощью?

Ответ №1:

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

Во временной области простой подход заключается в поиске пиков автокорреляционной функции. Действительно, автокорреляция максимальна при t = 0, а затем следующие пики дают оценку основного периода:

 ncount = 10000;
Ts = 0.0001; % Sampling period
t = (1:ncount) * Ts; % Sampling times
f = sin(2*pi*60*t)   0.1*sin(2*pi*200*t)   0.01 * randn(1, length(t)); % Signal

R = xcorr(f);
[~, locs] = findpeaks(R);
meanLag = Ts * mean(diff(locs));       
pitch = 1 / meanLag; ===> Will be around 60 Hz
  

Этот подход подходит для очень простых сигналов, вам, вероятно, придется уточнить его в зависимости от ситуации (уровень шума, периодичность, многотональный и т. Д.). Более точные алгоритмы см. В приведенных выше ссылках.