|
Зацените метод уточнения максимума спектра FFT по периодограмме. |
|
|
|
Sep 29 2011, 09:25
|
Местный
  
Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531

|
1) Берём FFT без перекрытия, например 1024 точки. Находим максимум F 2) Считаем периодограмму (гистограмму) скользящим окном 512 точек. Получаем гистограмму с максимумами в периодах T, 2*T, 3*T, 4*T,..., 3) По формуле T=1/F находим период Tфурье. Помножив этот период на N=2,3,4,5 получаем грубое попадание в максимумы "гармоник" гистограммы периодов. Корректируем значение максимума по реальному максимуму гистограммы. Например, это была 20-тая гармоника (20*T) с индексом J, тогда мы значем, что период T=J/20, F=1/T=20/J Вот пример: синим - спектр от FFT (максимум белой линией), зелёным - гармоники периодограммы (белым 30-тая гармоника). Как видите, она "скачет", но реальный максимум можно найти по картинке. Плюсы: периодограмма считается очень быстро, не требуется скользящего STFT.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Sep 29 2011, 15:38
|
Местный
  
Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531

|
В моём сообщении проблема с терминологией. Короче, это не периодограмма, а гистограмма.
1. По аналогии с FFT, где спектр - это спектр в осях частота-амплитуда, гистограмма - это спектр в осях период-количество отсчётов.
2. Гистограмма периодов получается следующим образом: рассмотрим N-тый и M-тый отсчёты исходного сигнала. Для каждой такой пары отсчётов мы можем определить период T=M-N, измеряемый в отсчётах. Например, для 50-того и 101-ого отсчётов период T=101-50=51.
3. Далее необходимо ввести критерий, по которому будет определяться, прошел ли полный период между отсчётами N и M. В качестве такого критерия можно использовать скалярное произведение между векторами-касательными к функции в точках N и M. Пусть WAV - это звуковой поток (или I,Q - комплексный звуковой поток)
Для отсчёта N вектор будет иметь координаты (x,y) X=1, Y=WAV[N]-WAV[N-1] Для отсчёта M вектор будет иметь координаты (x,y) X=1, Y=WAV[M]-WAV[M-1] При этом возникает некоторая неоднозначность, так вектор всегда направлен "вправо". Отметим, что при использовании комплексного (квадратурного) сигнала в качестве координат X можно брать непосредственно сам сигнал I: Отсчёт N: (x,y) X=I[N]-I[N-1], Y=Q[N]-Q[N-1] Отсчёт M: (x,y) X=I[M]-I[M-1], Y=Q[M]-Q[M-1] Но так как в общем случае входной сигнал может быть некомплексным, то мы можем искуственно ввести квадратурную составляющую: I[j]=WAV[j] Q[j]=WAV[j+1] (по сути это тот самый embedding, что делал Dmitry Terez в своих Pitch Estimation)
Тогда для вещественного сигнала - две касательных до и после отсчёта (в какую сторону выпуклость, чтобы не спутать период с полупериодом и т.п.) Отсчёт N: (x,y) X=WAV[N]-WAV[N-1], Y=WAV[N]-WAV[N-1] Отсчёт M: (x,y) X=WAV[M+1]-WAV[M], Y=WAV[M+1]-WAV[M]
Для комплексного - две касательных к окружности Отсчёт N: (x,y) X=I[N]-I[N-1], Y=Q[N]-Q[N-1] Отсчёт M: (x,y) X=I[M]-I[M-1], Y=Q[M]-Q[M-1]
Скалярное произведение данных двух векторов - это косинус угла между ними. Критерием прохождения периода между отсчётами M и N является равенство этого угла 0 или близкого к нему (единицы градусов), что соответствует скалярному произведению V1(x,y) * V2(x,y) = 0.85 ... 1.
4. На практике построение гистограммы периодов выглядит следующим образом: для всех пар отсчётов N и M считается скалярное произведение касательных векторов. Если это произведение >=0.85, то для периода T=M-N на гистограмме периодов увеличивается значение на 1. Зелёные линии показывают распределение значений гистограммы по времени. У метода есть свои недостатки, например он не позволяет найти только основной тон (и то, есть исключения)
5. По указанной выше причине можно сделать так:
1) мы берём "дешёвое" FFT на 256 или 512 точек без перекрытия, определяем интересующий нас максимум F. 2) переводим F в период T (T=1/F) 3) корректируем значение T на основе пика K-того гармоники гистограммы периодов 4) переводим T обратно в частоту. 5) Весь смысл в том, чтобы уловить мелкие изменения частоты: на рисунке выше синяя линяя - это спектрограмма FFT для изменяющегося сигнала, а зелёные - это спектрограмма от гистограммы периодов. Видно, что изменению частоты FFT на 1 бин соответствует изгибающаяся зелёная линия, более точно описывающая изменение сигнала по времени.
В методе присутствует скалярное умножение для всех возможных пар отсчётов. Много это или мало?
Также имеется возможность разделять квадратурный сигнал по фазе в гистограмме: для этого достаточно взять векторное произведение от векторов (x,y) X=I[N], Y=Q[N] и X=I[N+1], Y=Q[N+1]. Через эти два вектора около комплексного отсчтёта N мы можем провести треугольник, а векторное произведение - это нормаль Z в трёхмерном пространстве. Соответственно, нормаль Z=+/-1 будет говорить о сдвиге фаз квадратур в ту или иную сторону (вращение вектора по или против часовой стрелке).
Короче, кто что думает по этому поводу? Есть смысл копаться?
|
|
|
|
|
Sep 29 2011, 17:12
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531

|
Цитата(tmtlib @ Sep 29 2011, 19:38)  Короче, кто что думает по этому поводу? Есть смысл копаться? Если синусоида идеальная, то любые три точки дадут абсолютно точное значение частоты и это никому не интересно. Множество людей занималось и занимается определением параметров синусоиды в шуме или среди других сигналов. Возможность обнаружения синусоиды в шуме описывается неравенством Крамера-Рао. И имеется множество методов близких к этому пределу. Сравните Ваш метод с этим пределом например при SNR = 1. Как ни странно у Вас множество конкурентов. Если в поиске набрать "estimation"(оценка), то покажется, что все хотят оценить именно это. Значит пока оценивают недостаточно точно или недостаточно быстро. У Вас есть шанс.
--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
|
|
|
|
Сообщений в этой теме
tmtlib Зацените метод уточнения максимума спектра FFT по периодограмме. Sep 29 2011, 09:25 анатолий Что-то тут не то. Периодограмма сама считается как... Sep 29 2011, 10:50 SPACUM Материал из Википедии — свободной энциклопедии
... Sep 29 2011, 11:03 tmtlib Я сделал простую программку, но остаётся нерешенны... Sep 30 2011, 03:39 SPACUM Цитата(tmtlib @ Sep 30 2011, 07:39) если ... Sep 30 2011, 06:04 Kluwert На самом деле, ваш метод, как и многие другие, име... Oct 3 2011, 10:05 SPACUM Цитата(Kluwert @ Oct 3 2011, 14:05) Если ... Oct 3 2011, 15:53  SPACUM Цитата(SPACUM @ Oct 3 2011, 19:53) А кака... Oct 4 2011, 19:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|