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

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

Почитал все посты тредстартера. Не понял что надо найти. Во-первых, разумеется, при юзании БПФ/ДПФ сигнал должен быть хотя бы 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 отсчётов и не беспокоиться о точности периода, который всё равно точно не известен. У частотника наверняка будут и низкие частоты, ниже сетевой частоты, хотя конечно от нагрузки зависит.

 

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

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


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

Добрый день!

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

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

 

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


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

Не забывайте, что свёртка с sinc происходит при любом размере ПФ: как 500, так и 512.

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


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

Добрый день!

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

 

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

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

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


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

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

 

 

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


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

Только вот не понял как это " 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)

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

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


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

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

 

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

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

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


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

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

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

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


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

Тк. автор не ответил, отвечу за него. Время выборки = 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 Гц. Видимо уже мозг заклинило:)

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


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

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

 

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

 

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

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


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

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

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

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

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

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


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

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

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

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


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

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

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

 

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

 

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

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

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


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

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

Согласен.

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

 

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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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