Fourier 0 8 ноября, 2015 Опубликовано 8 ноября, 2015 · Жалоба Здравствуйте, уважаемые участники! Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида 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) Существуют ли специальные алгоритмы БПФ предназначенные для вычисления спектральных отсчетов в ограниченной полосе, с возможностью изменения числа базисных функций. Если можно, поделитесь ссылками или опытом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 11 ноября, 2015 Опубликовано 11 ноября, 2015 · Жалоба Здравствуйте, уважаемые участники! Известно, что максимально правдоподобной оценкой частоты однотонового сигнала является оценка вида 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. Правда, если входная полоса шире октавы, желательно до ДПФ поставить фильтр и подавить гармоники, как вниз, так и вверх от исследуемой полосы. Это улучшит итоговый с/ш как по шуму, так и по спурам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 31 декабря, 2015 Опубликовано 31 декабря, 2015 · Жалоба Алгоритм Герцеля не подойдет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 31 декабря, 2015 Опубликовано 31 декабря, 2015 · Жалоба БПФ вычисляет либо всю полосу полностью, либо не вычисляет ничего. Для части спектра могут быть выгодны другие алгоритмы ДПФ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Для практического применения наверное лучше всего библиотека FFTW, там процедура расчета спектра сама определяет, как считать БПФ или ДПФ в зависимости от длины и от процессора, Matlab её использует для fft() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealth-coder 2 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Надо понимать, что дополнение нулями во временнОй области это просто ИНТЕРПОЛЯЦИЯ в частотной, а не повышение точности в смысле увеличения количества информации, 100500 миллионов дополнительных нулей никакой информации не несут, т.к. сгенерированы искусственно, а не получены из источника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 2 января, 2016 Опубликовано 2 января, 2016 (изменено) · Жалоба да, кстати для оценки именно монотонового сигнала, желательно кроме дополнения нулями наложить окно Ханна, оно по моему дает самое лучшее разрешение в спектре, ибо начало и конец сигнала обычно плохо стыкуются, за исключением когда генератор и АЦП синхронизированы и число периодов точно целое Изменено 3 января, 2016 пользователем gridinp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fourier 0 10 января, 2016 Опубликовано 10 января, 2016 (изменено) · Жалоба Всем спасибо за ответы! eugen_pcad_ru Алгоритм Герцеля не подойдет? Ну, наверное, можно и его использовать. Для начала, определив полосу сигнала one_eight_seven БПФ вычисляет либо всю полосу полностью, либо не вычисляет ничего. Для части спектра могут быть выгодны другие алгоритмы ДПФ. А какие? Я только Герцеля знаю. Ссылочками не поделитесь. stealth-coder Надо понимать, что дополнение нулями во временной области это просто ИНТЕРПОЛЯЦИЯ в частотной, а не повышение точности в смысле увеличения количества информации, 100500 миллионов дополнительных нулей никакой информации не несут, т.к. сгенерированы искусственно, а не получены из источника. Это понятно. Но насколько я понимаю, это самая эффективная интерполяция. Особенно для коротких сигналов. Вот примерчик. Точек в исходном сигнале, по моему или 16 или 32. Истинная частота - 0,231. На первом рисунке результат БПФ На втором интерполяция кубическими сплайнами На третьем - дополнением нулями. Кубические сплайны сильно смещают оценку Изменено 10 января, 2016 пользователем Fourier Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться