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

 
 
 
Reply to this topicStart new topic
> БПФ в узкой полосе
Fourier
сообщение Nov 8 2015, 17:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 13-02-13
Из: Рыбинск
Пользователь №: 75 606



Здравствуйте, уважаемые участники!
Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида F = argmax(P(F)), где P(F) - периодограмма сигнала.
Когда выборка сигнала X короткая (N - размер выборки), чтобы посчитать периодограмму приходится производить дополнение нулями до Nfft >> N, чтобы получить высокую точность.
Альтернативой этому может служить двухпроходной алгоритм:
1) Вычисление БПФ по исходным данным N FFT1(F) = FFT(X). Вычисление оценки F0 = argmax(FFT1(F)).
2) Уточнение частоты в полосе [F0 - dF, F0 + dF], где dF - частотный шаг исходного БПФ. Например, с помощью алгоритма Герцеля.
Однако этап 2 может оказаться весьма трудоемким.

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

Если можно, поделитесь ссылками или опытом.
Go to the top of the page
 
+Quote Post
Corner
сообщение Nov 11 2015, 16:42
Сообщение #2


Профессионал
*****

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



Цитата(Fourier @ Nov 8 2015, 21:52) *
Здравствуйте, уважаемые участники!
Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида F = argmax(P(F)), где P(F) - периодограмма сигнала.
Когда выборка сигнала X короткая (N - размер выборки), чтобы посчитать периодограмму приходится производить дополнение нулями до Nfft >> N, чтобы получить высокую точность.
Альтернативой этому может служить двухпроходной алгоритм:
1) Вычисление БПФ по исходным данным N FFT1(F) = FFT(X). Вычисление оценки F0 = argmax(FFT1(F)).
2) Уточнение частоты в полосе [F0 - dF, F0 + dF], где dF - частотный шаг исходного БПФ. Например, с помощью алгоритма Герцеля.
Однако этап 2 может оказаться весьма трудоемким.

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

Если можно, поделитесь ссылками или опытом.

При некоторой полосе, относительно всего имеющегося спектра, становится выгодно заменить БПФ на обычное ДПФ или NCO с переносом на 0. Правда, если входная полоса шире октавы, желательно до ДПФ поставить фильтр и подавить гармоники, как вниз, так и вверх от исследуемой полосы. Это улучшит итоговый с/ш как по шуму, так и по спурам.
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Dec 31 2015, 16:56
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Алгоритм Герцеля не подойдет?


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Dec 31 2015, 18:37
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



БПФ вычисляет либо всю полосу полностью, либо не вычисляет ничего. Для части спектра могут быть выгодны другие алгоритмы ДПФ.
Go to the top of the page
 
+Quote Post
gridinp
сообщение Jan 1 2016, 09:08
Сообщение #5


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

Группа: Участник
Сообщений: 121
Регистрация: 7-04-08
Из: Наро-Фоминск
Пользователь №: 36 543



Для практического применения наверное лучше всего библиотека FFTW, там процедура расчета спектра сама определяет, как считать БПФ или ДПФ в зависимости от длины и от процессора, Matlab её использует для fft()
Go to the top of the page
 
+Quote Post
stealth-coder
сообщение Jan 1 2016, 15:22
Сообщение #6


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

Группа: Участник
Сообщений: 112
Регистрация: 27-12-08
Пользователь №: 42 786



Надо понимать, что дополнение нулями во временнОй области это просто ИНТЕРПОЛЯЦИЯ в частотной, а не повышение точности в смысле увеличения количества информации, 100500 миллионов дополнительных нулей никакой информации не несут, т.к. сгенерированы искусственно, а не получены из источника.
Go to the top of the page
 
+Quote Post
gridinp
сообщение Jan 2 2016, 08:41
Сообщение #7


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

Группа: Участник
Сообщений: 121
Регистрация: 7-04-08
Из: Наро-Фоминск
Пользователь №: 36 543



да, кстати для оценки именно монотонового сигнала, желательно кроме дополнения нулями наложить окно Ханна, оно по моему дает самое лучшее разрешение в спектре, ибо начало и конец сигнала обычно плохо стыкуются, за исключением когда генератор и АЦП синхронизированы и число периодов точно целое

Сообщение отредактировал gridinp - Jan 3 2016, 05:33
Go to the top of the page
 
+Quote Post
Fourier
сообщение Jan 10 2016, 17:42
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 13-02-13
Из: Рыбинск
Пользователь №: 75 606



Всем спасибо за ответы!
eugen_pcad_ru
Цитата
Алгоритм Герцеля не подойдет?

Ну, наверное, можно и его использовать. Для начала, определив полосу сигнала
one_eight_seven
Цитата
БПФ вычисляет либо всю полосу полностью, либо не вычисляет ничего. Для части спектра могут быть выгодны другие алгоритмы ДПФ.

А какие? Я только Герцеля знаю. Ссылочками не поделитесь.
stealth-coder
Код
Надо понимать, что дополнение нулями во временной области это просто ИНТЕРПОЛЯЦИЯ в частотной, а не повышение точности в смысле увеличения количества информации, 100500 миллионов дополнительных нулей никакой информации не несут, т.к. сгенерированы искусственно, а не получены из источника.

Это понятно. Но насколько я понимаю, это самая эффективная интерполяция. Особенно для коротких сигналов.
Вот примерчик.
Точек в исходном сигнале, по моему или 16 или 32.
Истинная частота - 0,231.
На первом рисунке результат БПФ
На втором интерполяция кубическими сплайнами
На третьем - дополнением нулями.

Кубические сплайны сильно смещают оценку

Сообщение отредактировал Fourier - Jan 10 2016, 17:43
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 15:29
Рейтинг@Mail.ru


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