Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите освоить алгоритм Герцеля
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
alexandr.krupnov
Формулу рассчёта к-той выборки я понял. Но не могу никак связать количество выборок в массиве с частотным спектром. Я недавно разобрался с БПФ, понял зачем нужны окна и что такое "размазывание" сигнала по спектру. Как избежать размазывания в алгортиме Герцеля и где об этом почитать?
Lmx2315
http://www.dsplib.ru/content/goertzel/goertzel.html
может будет полезно
andyp
Цитата(alexandr.krupnov @ Apr 10 2015, 13:44) *
Формулу рассчёта к-той выборки я понял. Но не могу никак связать количество выборок в массиве с частотным спектром. Я недавно разобрался с БПФ, понял зачем нужны окна и что такое "размазывание" сигнала по спектру. Как избежать размазывания в алгортиме Герцеля и где об этом почитать?


Алгоритм Герцеля - просто способ рассчета ДПФ для некоторых значений частот. Он выгоден, когда значения ДПФ для всех частот, кроме ограниченного набора, не интересуют. Если нужны окна, то их можно применять на входе Герцеля также как и на входе БПФ. Для этого, также как и в случае "полноценного" спектрального анализа, сигнал надо умножить на периодическую оконнную функцию.
alexandr.krupnov
Спасибо, понял сам. Частотный шаг для каждого коэффициента в алгоритме герцеля определяется так же как и при ДПФ/БПФ (Частота дискретизации/(2*N))
serjj
При реализации непрерывного Герцеля (всегда работает, всегда требуются данные на выходе преобразования) могут возникнуть проблемы с устойчивостью, т.к. в отличие от ДПФ Герцель суть БИХ фильтр. Если делается на ПЛИС нужно будет увеличивать разрядность на умножителе, т.к. незначительная ошибка в точности очень быстро разрастается в рекурсии. Для решения проблемы с устойчивостью вводят поправки а-ля "забывание", но там все так тонко, чуть чуть отходишь от исходной рекурсии - все разваливается rolleyes.gif (мне этот алгоритм показался больно уж "нежным" или это я такой криворукий)

в свое время делал по вот такой статье:
Нажмите для просмотра прикрепленного файла
eugen_pcad_ru
Алгоритм Герцеля принадлежит к числу так называемых алгоритмов полубыстрого преобразования Фурье, так как для расчета всего спектра требуется всего в 2 раза меньше операций, чем для обычного дискретного. В этом плане БПФ выигрывает.
1 Если Вам всё-таки нужно считать полный спектр, что неэффективно, поступаете так же, как с БПФ
2 Если Вам нужно посчитать какие-то отдельные гармоники (а вот здесь как раз АГ может дать выигрыш, но надо посчитать), то в целом можно обойтись и без окон. Выигрыш в производительности зависит от числа требуемых к нахождению гармоник и размера буфера.
3 АГ по сути является БИХ-фильтром, так что при реализации в целочисленной арифметике см. рекомендации выше.
andyp
Цитата(eugen_pcad_ru @ Apr 11 2015, 08:00) *
Алгоритм Герцеля принадлежит к числу так называемых алгоритмов полубыстрого преобразования Фурье, так как для расчета всего спектра требуется всего в 2 раза меньше операций, чем для обычного дискретного. В этом плане БПФ выигрывает.


Грубая оценка для выбора Герцель-FFT по комплексным сложениям - log(N)/2 бинов. N - длина требуемого DFT.
serjj
Цитата
Алгоритм Герцеля принадлежит к числу так называемых алгоритмов полубыстрого преобразования Фурье, так как для расчета всего спектра требуется всего в 2 раза меньше операций, чем для обычного дискретного. В этом плане БПФ выигрывает.
1 Если Вам всё-таки нужно считать полный спектр, что неэффективно, поступаете так же, как с БПФ
2 Если Вам нужно посчитать какие-то отдельные гармоники (а вот здесь как раз АГ может дать выигрыш, но надо посчитать), то в целом можно обойтись и без окон. Выигрыш в производительности зависит от числа требуемых к нахождению гармоник и размера буфера.
3 АГ по сути является БИХ-фильтром, так что при реализации в целочисленной арифметике см. рекомендации выше.

Алгоритм Герцеля наглядно показывает выигрыш когда нужно получить спектр на каждый входной отчёт. Для всего спектра получаем N умножений для Герцеля, N*log(N) - для FFT, N^2 - для DFT. И это на каждый входной отчёт. Но разрядность умножителей Герцеля должна быть выше (я делал почти в 2 раза) для того что бы показать теже характеристики что и в схемах без рекурсии. Но если нам нужно отслеживать спекральные компоненты числом M << N, то тогда для Герцеля получаем M умножений, а для FFT и DFT их число сохраняется. Тогда и выигрыш становится более очевидным. Для больших символьных скоростей этот алгоритм единственное решение для непрерывного отслеживания спектральных составляющих, т.к. Делать FFT на каждый отчёт при большой символьной задача нереализуемая.
eugen_pcad_ru
Краткое сравнение алгоритма с БПФ в приложении... Может пригодится.
alexandr.krupnov
Исходный сигнал - 1 кГц
Частота дискретизации - 16 кГц
массив из 16 выборок
Следовательно частотный шаг Sf = 16 / 16 = 1 кГц. то есть если я реализую алгоритм Герцеля по формуле
S(k) = W*v(N-1)-v(N-2)
v(N-1) = v(15) или v(14). То есть N = 0..15 или N = 1..16
И ещё
W = cos(a) - j*sin (a)
Но в алгоритме Герцеля у поворачивающего коэффициента W есть отрицательный множитель k, следует ли из этого
W = cos(a) + j*sin (a)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.