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

 
 
> Зацените метод уточнения максимума спектра FFT по периодограмме.
tmtlib
сообщение Sep 29 2011, 09:25
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 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.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tmtlib
сообщение Sep 30 2011, 03:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531



Я сделал простую программку, но остаётся нерешенными ряд проблем.

Основная проблема - это как оптимально вытащить период из гистограммы.
Я представляю это так: для грубо определённого перида T=100 (в битах) имеется некий реальный период T=10001111011110000 (в битах), условно говоря, рассмотрение периодов на гистограмме для каждого увеличения периода в 2 раза даёт 1 бит точности

Гармоника T 100
Гармоника 2T 100[0]
Гармоника 3T ?
Гармоника 4T 100[01]
...
Гармоника 8T 100[011]
... 32T 100[01111] - в квадратных скобках вытащили 5 бит для 32-го максимума гистограммы.
Но так как пики - это некие статистичекские попадания, то там ещё есть некий "центр масс" распределения, т.е. можно проинтерполировать период. Т.е. если максимум для периода 32T находится по оси X на отметке 142 и T=142/32, то подсчитав центр масс T=142.45 мы получим более точное значение T=142.45/32. Возможно можно как-то проще это сделать, если учесть все максимумы сразу, а не брать один пик. Но как это сделать не доходит.

Go to the top of the page
 
+Quote Post
SPACUM
сообщение Sep 30 2011, 06:04
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531



Цитата(tmtlib @ Sep 30 2011, 07:39) *
если учесть все максимумы сразу, а не брать один пик. Но как это сделать не доходит.

Да запросто, взять от них БПФ, лучше с окном Гаусса и определить "центр масс". Это разновидность кепстрального метода, который не применяется из-за низкой стойкости к шумам. Попробуйте, может Ваш будет лучше. Хотя бы для SNR = 1;


--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
Go to the top of the page
 
+Quote Post



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

 


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


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