Jump to content

    
Sign in to follow this  
Sergey Makarov

Быстрое преобразование Фурье не для степени 2

Recommended Posts

Почитал все посты тредстартера. Не понял что надо найти. Во-первых, разумеется, при юзании БПФ/ДПФ сигнал должен быть хотя бы 1 период. То есть в 500 точках 40 мкс дискр. искать сигнал в 30 или 20 гц занятие бесполезное. Как и сигналы диапазона 0-51 гц. Разрешение каждого бина будет 50 гц. Хоть дополняй нулями, хоть не дополняй. То есть увидеть можно 50,100,150 гц сигналы, в реале это будут /грубо/ 25-75, 75-125, 125-175 и тд. Дополнение нулями (500->512) на младших гармониках (что нужно ТС) занятие бесполезное, даже вредное. Советчики этого метода пересказали что-то, о чём где-то прочитали не поняв сути и задания.

 

Вообще, если ТС нужны низкие частоты, то почему дискр. 40 мкс? Почему не 1 мс и с 500 сэмплами будет разрешение 2..500 гц. Тогда можно смело брать 512 отсчётов и не беспокоиться о точности периода, который всё равно точно не известен. У частотника наверняка будут и низкие частоты, ниже сетевой частоты, хотя конечно от нагрузки зависит.

 

Ну и, собственно, прежде чем что-то считать нужно чётко понимать что и где "искать". И есть ли там это что-то. А то можно в запале захотеть найти спектр одиночного импульса. При этом как говорится - флаг в руки.

Share this post


Link to post
Share on other sites
Добрый день!

Стоит задача осуществить быстрое преобразовние Фурье для 500 отсчетов. Аппаратно DSP поддерживает быстрое преобразование по модулю 2. Вопрос, как довести кол-во точек до 512? Достаточно ли заполнить недостающие значения нулями? Сильно ли исказится результат преобразования после такого допущения?

Не сильно, но исказится. Дополнение нулями во временной области), как следует из свойств ПФ приведет к тому, что полученный спектр будет являться сверткой настоящего спектра (т.е. спектра 500-отсчетного исходного сигнала) и ПФ от прямоугольного окна (s_i = 1, i=0:499 и s_i = 0, i=500:511). Спектр этого окна вы отлично знаете - это функция sinc. Поскольку окно очень широкое, то ширина функции sinc будет чуть шире одного отсчета. Другими словами, спектр после дополнения нулями "слегка размажется".

 

Share this post


Link to post
Share on other sites
Добрый день!

Стоит задача осуществить быстрое преобразовние Фурье для 500 отсчетов. Аппаратно DSP поддерживает быстрое преобразование по модулю 2. Вопрос, как довести кол-во точек до 512? Достаточно ли заполнить недостающие значения нулями? Сильно ли исказится результат преобразования после такого допущения? Если можно ссылкой на математическое обоснование поделитесь плз. Или все таки придется до 512 точек дополнять интерполировав существующие значения? Кто чем может помогите плз.

 

Если ДПФ используется для оценки СПМ, то вместо добавления 0 экстраполируйте по 6 отсчетов с каждого края и будет Вам счастье. Это явно дешевле интерполяции. За теоретическим обоснованием - к Марплу гл. 7.4. В качестве экстраполирующего можно использовать полосовой фильтр, если примерно известна полоса процесса, который анализируете.

Edited by andyp

Share this post


Link to post
Share on other sites
Почитал все посты тредстартера. Не понял что надо найти. Во-первых, разумеется, при юзании БПФ/ДПФ сигнал должен быть хотя бы 1 период. То есть в 500 точках 40 мкс дискр. искать сигнал в 30 или 20 гц занятие бесполезное. Как и сигналы диапазона 0-51 гц. Разрешение каждого бина будет 50 гц. Хоть дополняй нулями, хоть не дополняй. То есть увидеть можно 50,100,150 гц сигналы, в реале это будут /грубо/ 25-75, 75-125, 125-175 и тд. Дополнение нулями (500->512) на младших гармониках (что нужно ТС) занятие бесполезное, даже вредное. Советчики этого метода пересказали что-то, о чём где-то прочитали не поняв сути и задания.

 

Вообще, если ТС нужны низкие частоты, то почему дискр. 40 мкс? Почему не 1 мс и с 500 сэмплами будет разрешение 2..500 гц. Тогда можно смело брать 512 отсчётов и не беспокоиться о точности периода, который всё равно точно не известен. У частотника наверняка будут и низкие частоты, ниже сетевой частоты, хотя конечно от нагрузки зависит.

 

Ну и, собственно, прежде чем что-то считать нужно чётко понимать что и где "искать". И есть ли там это что-то. А то можно в запале захотеть найти спектр одиночного импульса. При этом как говорится - флаг в руки.

 

С вами согласен полностью, искать 30Гц сигналы в 500 точках с дискретой 40 мкс дело бесполезное, и не благодарное, хоть сколько угодно не дополняй данный массив нулями. Я это уже понял. Моделирование в МАТЛАБ все (или почти все) расставило на свои места. Только вот не понял как это " 1 мс и с 500 сэмплами будет разрешение 2..500 гц."? может все таки 50Гц?

 

 

Если ДПФ используется для оценки СПМ, то вместо добавления 0 экстраполируйте по 6 отсчетов с каждого края и будет Вам счастье. Это явно дешевле интерполяции. За теоретическим обоснованием - к Марплу гл. 7.4. В качестве экстраполирующего можно использовать полосовой фильтр, если примерно известна полоса процесса, который анализируете.

 

вобщем путем моделирования стало ясно, что добавление нулей к отсчетам функции с 500 до 512, приводит к смещению спектра. например для синусоидального 50Гц сигнала добавленного нулями частота максимальной гармоники стала равной 48,8Гц. Экспериментировал много, с сигналами разной частоты, всегда получал смещение. Да, после увеличения кол-ва отсчетов до большего значения добавлением нулей , максимумы спектра выделяются явнее, но частота этих максимумов уже не соответствует действительности.

 

 

Share this post


Link to post
Share on other sites
Только вот не понял как это " 1 мс и с 500 сэмплами будет разрешение 2..500 гц."? может все таки 50Гц?

Тк. автор не ответил, отвечу за него. Время выборки = 500 * 1мс = .5с. Самая медленная синусоида которая туда влезает F = 1/.5c = 2Гц. Это первая гармоника Фурье. А Ваши 50Гц будут 25й гармоникой.

Самое первое упоминание об БПФ на 500 точек было в этой книге, я тогда оттуда программу и взял. И все работало.

(http://www.knigonosha.net/tehnika/other_tehn/31-primenenie-teorii-chisel-v-cifrovoj-obrabotke.html)

Edited by SPACUM

Share this post


Link to post
Share on other sites
вобщем путем моделирования стало ясно, что добавление нулей к отсчетам функции с 500 до 512, приводит к смещению спектра. например для синусоидального 50Гц сигнала добавленного нулями частота максимальной гармоники стала равной 48,8Гц. Экспериментировал много, с сигналами разной частоты, всегда получал смещение. Да, после увеличения кол-ва отсчетов до большего значения добавлением нулей , максимумы спектра выделяются явнее, но частота этих максимумов уже не соответствует действительности.

 

при добавлении отсчетов по краям смещения спектра не происходит, немного повышается разрешение (ну те ширина колодца DFT была Fs/500, а стала Fs/512) и Ваша фиксированная частота как-бы "смещается", попадая в другие колодцы.

Edited by andyp

Share this post


Link to post
Share on other sites
Только вот не понял как это " 1 мс и с 500 сэмплами будет разрешение 2..500 гц."?

Это называется не "разрешение", а диапазон. А разрешение будет 2 Hz. То есть, вычислится спектр для частот 2, 4, 6... 500 Hz.

Share this post


Link to post
Share on other sites
Тк. автор не ответил, отвечу за него. Время выборки = 500 * 1мс = .5с. Самая медленная синусоида которая туда влезает F = 1/.5c = 2Гц. Это первая гармоника Фурье. А Ваши 50Гц будут 25й гармоникой.

Самое первое упоминание об БПФ на 500 точек было в этой книге, я тогда оттуда программу и взял. И все работало.

(http://www.knigonosha.net/tehnika/other_tehn/31-primenenie-teorii-chisel-v-cifrovoj-obrabotke.html)

Спасибо за ссылку:) а на счет диапазона я понял. Времени выборки 1 мс соотвествует частота 1кГц, диапазон частот представленных в спектре сигнала 1000/500*k, где k = 1...250, так как спектр симметричен относительно N/2, в данном случае 250, поэтому и получается 1000/500*250=500 Гц, последняя частота для 500 точек отсчетов.

 

при добавлении отсчетов по краям смещения спектра не происходит, немного повышается разрешение (ну те ширина колодца DFT была Fs/500, а стала Fs/512) и Ваша фиксированная частота как-бы "смещается", попадая в другие колодцы.

 

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

 

Это называется не "разрешение", а диапазон. А разрешение будет 2 Hz. То есть, вычислится спектр для частот 2, 4, 6... 500 Hz.

да спасибо, разобрался. я почему то подумал что мне пытаются сказать что 1мс и 500 отсчетов достаточно для диапазона входных сигналов 2..500 Гц. Видимо уже мозг заклинило:)

Share this post


Link to post
Share on other sites
я могу быть и не прав, но моделирование в матлабе мне показало что результат ДПФ одинаков для сигнала добавленного нулями либо только в конец массива, либо симметрично с каждой стороны.

 

амплитуда ДФТ будет одинаковой. фаза - изменится. Задержка во временной области соответствует умножению ДФТ на комплексную экспоненту

 

в догонку к предыдущему - сдвиг фазы будет зависеть от частоты и величины задержки (те фактически изменится наклон фазовой характеристики)

Share this post


Link to post
Share on other sites

Господа/Товарищи!

А дробный ДПФ/БПФ никто не видел? Мне вот понадобилось (особено для малых N [16..256]). В частности хотелось бы определять промежуточные дробные частоты с веществ. значениями 0.5, 0.25, 0.75 и др. от 1/T.

Знаю точно, что дробный ДПФ работает не хуже целого по части нахождения пиков гармоник. Испытывал на медленном алгоритме. Но вдруг есть побыстрее.

Edited by GetSmart

Share this post


Link to post
Share on other sites

А что такое дробный ДПФ?

Если надо определять коэффициенты с "дробными частотами" (между бинами), то дополняйте сигнал нулями и берите обычное ДПФ. Обычное ДПФ при желании можно слегка ускорить, выкинув из вычислений дополняемые нули, но не сильно. Это называется pruned FFT.

Share this post


Link to post
Share on other sites
Обычное ДПФ при желании можно слегка ускорить, выкинув из вычислений дополняемые нули, но не сильно. Это называется pruned FFT.

Что-то про ДПФ не понял. Зачем его замедлять, а потом ускорять? Для БПФ это понятно.

 

Дробный ДПФ/БПФ - это вычисление спектра частот 1.5, 2.5, 3.5 и т.д., в том числе и с любыми вещественными долями. Вообще, вся "ортогональщина" гармоник Фурье это только в идеале. И даже на бесконечности никаких улучшений. В реале чаще всего гармоники не кратные и не совсем ортогональные друг другу.

 

У меня стоит задача. Взять 16 или 32 сэмпла с одним синусом внутри, но на фоне большого шума. По сути, если в спектре есть самый высокий пик, то это предположительно мой синус. И нужно узнать из этих 16 сэмплов поточнее частоту синуса (до 1/8 бина для начала хватит). Но штука в том, что если частота синуса некратна бину (изначально я её не знаю и не могу предугадать), то в обычном БПФ/ДПФ пик на спектре может отклоняться от реального значительно (возможно до 0.7 или до 0.5 от реала). Однако, дробный ДПФ (возможно и дополненный нулями БПФ и перенормированный) может показывать пики спектра ближе к реальным.

Edited by GetSmart

Share this post


Link to post
Share on other sites
Знаю точно, что дробный ДПФ работает не хуже целого по части нахождения пиков гармоник. Испытывал на медленном алгоритме. Но вдруг есть побыстрее.

Согласен.

Похоже выше 7й гармоники дополнение нулями работает удовлетворительно. А ниже нужны особые методы.

У меня еще и шумы, так что менее 2000 точек мне неинтересно, а больше долго.

А для 30 точек без шума может метод барона Прони подойдет?

Ничего другого по вопросу в литературе не встречал.

Еще мне кажется для частот в начале спектра Фурье и в конце спектра Фурье предел Крамера-Рао недостижим с запасом.

И для Вашего случая особенно. А у Вас получилось близко?

Share this post


Link to post
Share on other sites
А для 30 точек без шума может метод барона Прони подойдет?

Барон де Прони(Гаспар Рише) был другом Наполеона и одним из основоположников метрической системы мер.

Имя барона Гаспара де Прони входит в список 72 имён на Эйфелевой башне. Он действительно разработал

свой метод спектрального анализа при котором вычислялись истинные амплитуды и частоты и не было

никакой спектральной утечки. Соответствующая программа на ФОРТРАНе приведена в книге

С.Л. Марпл-мл. "Цифровой спектральный анализ и его приложения" (гл. 11). Сигнал приближался

затухающими синусоидами. Этот метод применяется не везде из-за большого объема расчетов.

Однако результат восхитительный.

Никогда о нём не слышал. Будем почитать.

 

И для Вашего случая особенно. А у Вас получилось близко?

Скорее нет. Хотя в 32 точках всего 16 гармоник и я затрудняюсь правильно ответить.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this