Перейти к содержанию
    

БПФ в узкой полосе

Здравствуйте, уважаемые участники!

Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида 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) Существуют ли специальные алгоритмы БПФ предназначенные для вычисления спектральных отсчетов в ограниченной полосе, с возможностью изменения числа базисных функций.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, уважаемые участники!

Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида 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. Правда, если входная полоса шире октавы, желательно до ДПФ поставить фильтр и подавить гармоники, как вниз, так и вверх от исследуемой полосы. Это улучшит итоговый с/ш как по шуму, так и по спурам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для практического применения наверное лучше всего библиотека FFTW, там процедура расчета спектра сама определяет, как считать БПФ или ДПФ в зависимости от длины и от процессора, Matlab её использует для fft()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем gridinp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за ответы!

eugen_pcad_ru

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

Ну, наверное, можно и его использовать. Для начала, определив полосу сигнала

one_eight_seven

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

А какие? Я только Герцеля знаю. Ссылочками не поделитесь.

stealth-coder

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

Это понятно. Но насколько я понимаю, это самая эффективная интерполяция. Особенно для коротких сигналов.

Вот примерчик.

Точек в исходном сигнале, по моему или 16 или 32.

Истинная частота - 0,231.

На первом рисунке результат БПФ

На втором интерполяция кубическими сплайнами

На третьем - дополнением нулями.

5da21807d25b.png

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

Изменено пользователем Fourier

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...