Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непопадание в бины ДПФ
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
kumle
Всем привет, встала задача измерять частотный выход сигнала на определенной частоте.
Сигнал для измерения подается на 24-х разрядное АЦП, а частота измерения приходит с тахометра.
Частота оцифровки сигнала 500 Гц, для ДПФ выбираю 500 выборок, значит разрешение по частоте 1Гц.

Все работает нормально пока с с тахометра приходят частоты кратные 1-у Герцу, но как только придет
скажем 20.5 Герц, то при одном и том же входном сигнале результат ДПФ получается несколько больше !
В качестве сигнала шум на входе АЦП.
Как тут быть, задача стоит выжать большую точность, поэтому применен 24-х битный АЦП.
dm.pogrebnoy
Думаю вам должно помочь улучшить ситуацию наложение окна на входные выборки. Правда выбор этого окна, для обеспечения наибольшей точности, дело не простое.
polyakovav
не вполне понятно, что измеряется - частота, амплитуда или еще что?
с какой точностью это нужно измерить, и что значит "частота измерения приходит с тахометра"?
kumle
Цитата(polyakovav @ Mar 20 2013, 16:21) *
не вполне понятно, что измеряется - частота, амплитуда или еще что?
с какой точностью это нужно измерить, и что значит "частота измерения приходит с тахометра"?



Измеряется амплитуда сигнала приходящего на АЦП, а частота на которой нужно измерить приходит с тахометра на вход внешнего прерывания МК, который и определяет частоту.
АЦП иоже внутри МК.

Еще непонятно почему результат ДПФ увеличивается при непопадании частоты. ведь уменьшаться должен !

Цитата(dm.pogrebnoy @ Mar 20 2013, 15:09) *
Думаю вам должно помочь улучшить ситуацию наложение окна на входные выборки. Правда выбор этого окна, для обеспечения наибольшей точности, дело не простое.



Оконную функцию еще не пробовал, интересно какова ее эффективность

Цитата(dm.pogrebnoy @ Mar 20 2013, 15:09) *
Думаю вам должно помочь улучшить ситуацию наложение окна на входные выборки. Правда выбор этого окна, для обеспечения наибольшей точности, дело не простое.



Оконную функцию еще не пробовал, интересно какова ее эффективность

Цитата(polyakovav @ Mar 20 2013, 16:21) *
с какой точностью это нужно измерить


С какой точностью измерять, это зависит от шумов, в отсутствии сигнала на АЦП.
Шум пока не могу измерить так как пока не совсем понимаю как.
fontp
QUOTE (kumle @ Mar 20 2013, 14:53) *
Всем привет, встала задача измерять частотный выход сигнала на определенной частоте.
Сигнал для измерения подается на 24-х разрядное АЦП, а частота измерения приходит с тахометра.
Частота оцифровки сигнала 500 Гц, для ДПФ выбираю 500 выборок, значит разрешение по частоте 1Гц.

Все работает нормально пока с с тахометра приходят частоты кратные 1-у Герцу, но как только придет
скажем 20.5 Герц, то при одном и том же входном сигнале результат ДПФ получается несколько больше !
В качестве сигнала шум на входе АЦП.
Как тут быть, задача стоит выжать большую точность, поэтому применен 24-х битный АЦП.



А зачем Вам ДПФ, если частота известна достаточно точно с тахометра?
Достаточно умножить сигнал на комплексную экспоненту известной частоты и просумировать (усредить).
Получите две амплитудные квадратуры, сложите как обычно сумму квадратов

Если частота известна абсолютно точно, и в сигнале отсутствуют другие гармоники (только шум), то полученная таким способом оценка амплитуды (и фазы, если необходимо) является оценкой максимального правдоподобия.
polyakovav
если понял правильно, сигнал с тахометра определяет моменты взятия выборки с АЦП?
каким образом сигнал на входе АЦП связан с тахометром?
kumle
Цитата(polyakovav @ Mar 20 2013, 17:01) *
если понял правильно, сигнал с тахометра определяет моменты взятия выборки с АЦП?
каким образом сигнал на входе АЦП связан с тахометром?


Нет, моменты взятия выборки определяет МК, частота дискретизации постоянна 500 Гц

сигнал с тахометра и сигнал на входе ацп никак не связаны
сигнал с тахометра поступает на вход внешнего прерывания МК, так микроконтроллер считает период и узнает сигнал какой частоты ему выделять из сигнала приходящего на АЦП

Цитата(fontp @ Mar 20 2013, 16:58) *
А зачем Вам ДПФ, если частота известна достаточно точно с тахометра?
Достаточно умножить сигнал на комплексную экспоненту известной частоты и просумировать (усредить).
Получите две амплитудные квадратуры, сложите как обычно сумму квадратов

Если частота известна абсолютно точно, и в сигнале отсутствуют другие гармоники (только шум), то полученная таким способом оценка амплитуды (и фазы, если необходимо) является оценкой максимального правдоподобия.



Не подскажете как называется этот метод, я новичок в ЦОС, хотелось бы поподробней почитать.

Цитата(kumle @ Mar 20 2013, 17:18) *
Нет, моменты взятия выборки определяет МК, частота дискретизации постоянна 500 Гц

сигнал с тахометра и сигнал на входе ацп никак не связаны
сигнал с тахометра поступает на вход внешнего прерывания МК, так микроконтроллер считает период и узнает сигнал какой частоты ему выделять из сигнала приходящего на АЦП




Не подскажете как называется этот метод, я новичок в ЦОС, хотелось бы поподробней почитать.



По моему это и есть ДПФ
fontp
QUOTE (kumle @ Mar 20 2013, 17:54) *
Не подскажете как называется этот метод, я новичок в ЦОС, хотелось бы поподробней почитать.
По моему это и есть ДПФ


ДПФ это когда вы рассчитываете подобные суммы для всех независимых кратных фиксированых частот
А я Вам предложил считать на одной, той что с тахометра, не кратной. Это не ДПФ, это просто взятие квадратуры
Можно считать, что это перенос на нулевую частоту

Почему это хорошо? Может не самое простое обоснование, но в статье обосновывается именно как обойти дискретность
ДПФ при определении частоты (что Вам на самом деле не нужно, если частота известна по тахометру), как оптимально определить амплитуду и фазу, и приводятся оценки для достижимой точности

http://electronix.ru/forum/index.php?act=a...st&id=39182
thermit
Цитата
kumle:
По моему это и есть ДПФ


Похоже на дпф, но не дпф.
Это ких фильтр с импульсной х-кой равной комплексной экспоненте нужной частоты.
Можно ее на окно домножить. А можно вообще полосовой рекурсивный фильтр сделать.

fontp
QUOTE (thermit @ Mar 20 2013, 18:10) *
Похоже на дпф, но не дпф.
Это ких фильтр с импульсной х-кой равной комплексной экспоненте нужной частоты.
Можно ее на окно домножить. А можно вообще полосовой рекурсивный фильтр сделать.



Если есть синусовые помехи или сам сигнал периодический, но не синусовый, то спектральные окна использовать не только можно,
но даже и желательно. Просто чтобы исключить влияние спектрального хвоста от помехи. У функции sinc длинный хвост

А если гарантировано, что синусовой помехи больше нет - есть только один спектральный пик и шум - то прямоугольное окно оказывается оптимальным
TRILLER
Цитата(kumle @ Mar 20 2013, 18:18) *
Не подскажете как называется этот метод, я новичок в ЦОС, хотелось бы поподробней почитать.

Если на пальцах, то ДПФ есть множество взаимокорреляционных функций вашего сигнала(от АЦП) и квадратур(sin и cos) с частотами 0, 1,..., 499 Гц.
Т.е. делая ДПФ вы находите степень корреляции сигнала аж с 500 гармониками на дискретных частотах. Но у вас ИЗВЕСТНА частота, на которой вы хотите оценить уровень сигнала. Поэтому достаточно посчитать взаимокорреляционную функцию только с одной квадратурой. Плюс, имея 24-х битую АЦП, вам надо генерировать квадратуру как минимум не меньшей разрядности. А это позволяет сгенерить её с очень большой точностью. Не считал сколько, но думаю точнее милигерц. Скорее всего с тахометра частота приходит с меньшей точностью biggrin.gif
И, как сказал fontp, это будет оценкой максимального правдоподобия.
А почитать, что есть ДПФ, прежде чем его делать можно в любой книге по ЦОС.
Alex11
Хотелось бы понять еще, точность чего необходимо обеспечить. Как уже было замечено, точность тахометра будет существенно ниже, чем точность, которую можно получить с ДПФ. Если использовать тахометр только чтобы оценить примерно гармонику с которой нужно работать, то алгоритм я бы предложил следующий. Домножаем входной сигнал на оконную функцию, делаем ДПФ, выбираем требуемую гармонику, считаем положение максимума с интерполяцией (чтобы получить более точное значение частоты, чем 1 бин), считаем сумму квадратов отсчетов в пределах гармоники (количество бинов определяется оконной функцией) и берем из нее корень - это будет амплитуда на данной частоте. Чтобы амплитуда соответствовала действительности нужно либо брать правильно отнормированную оконную функцию, либо калибровать прибор.
fontp


QUOTE (Alex11 @ Mar 20 2013, 21:40) *
Хотелось бы понять еще, точность чего необходимо обеспечить. Как уже было замечено, точность тахометра будет существенно ниже, чем точность, которую можно получить с ДПФ. Если использовать тахометр только чтобы оценить примерно гармонику с которой нужно работать, то алгоритм я бы предложил следующий. Домножаем входной сигнал на оконную функцию, делаем ДПФ, выбираем требуемую гармонику, считаем положение максимума с интерполяцией (чтобы получить более точное значение частоты, чем 1 бин), считаем сумму квадратов отсчетов в пределах гармоники (количество бинов определяется оконной функцией) и берем из нее корень - это будет амплитуда на данной частоте. Чтобы амплитуда соответствовала действительности нужно либо брать правильно отнормированную оконную функцию, либо калибровать прибор.


То что точность тахометра хуже чем бин ДПФ как раз не звучало, скорее наоборот, бин 1 гц, автор топика оценивает частоту по тахометру как 20.5, то есть точность тахометра по крайней мере 0.5
В общем, это вопрос, что точнее. Выше речь шла о другом- о ширине полосы фильтра.

Обычно с помощью интерполяции можно получить точность примерно на порядок выше чем бин ДПФ.
Точность зависит от уровня шума и числа отсчетов, но в любом случае интерполяцией два порядка получить тяжело, а три - невозможно
Если точность тахометра выше чем эта величина, то искать пик и проводить интерполяцию не надо.
Если нет, то тогда есть смысл искать пик и проводить интерполяцию вблизи максимума. При этом нет смысла обсчитывать все гармоники ДПФ, а только компоненты в интервале неопределенности показаний тахометра (скорее всего только три гармоники)
TigerSHARC
Прочитал первый пост и первое что пришло на ум: программное изменение частоты дискретизации полифазником или Фарроу...
fontp
QUOTE (TigerSHARC @ Mar 20 2013, 23:49) *
Прочитал первый пост и первое что пришло на ум: программное изменение частоты дискретизации полифазником или Фарроу...


Зачем так сложно? Достаточно согласованого фильтра, т.е. коррелятора с комплексной синусоидой известной частоты
kumle
Спасибо всем ответившим, пока что применил окно Блэкмана к выборкам, перед взятием ДПФ на искомой частоте. Результат превзошел все ожидания !!!
Но есть еще над чем работать !

Цитата(fontp @ Mar 20 2013, 21:06) *
То что точность тахометра хуже чем бин ДПФ как раз не звучало, скорее наоборот, бин 1 гц, автор топика оценивает частоту по тахометру как 20.5, то есть точность тахометра по крайней мере 0.5
В общем, это вопрос, что точнее. Выше речь шла о другом- о ширине полосы фильтра.

Обычно с помощью интерполяции можно получить точность примерно на порядок выше чем бин ДПФ.
Точность зависит от уровня шума и числа отсчетов, но в любом случае интерполяцией два порядка получить тяжело, а три - невозможно
Если точность тахометра выше чем эта величина, то искать пик и проводить интерполяцию не надо.
Если нет, то тогда есть смысл искать пик и проводить интерполяцию вблизи максимума. При этом нет смысла обсчитывать все гармоники ДПФ, а только компоненты в интервале неопределенности показаний тахометра (скорее всего только три гармоники)



Точность тахометра для меня не так важна. Потому что сигнал на АЦП приходит с датчика вибрации который закреплен на валу где и находится тахометр тоже, Поэтому Частота вибрации и будет равна частоте вращения вала
polyakovav
Цитата(kumle @ Mar 21 2013, 16:29) *
Точность тахометра для меня не так важна. Потому что сигнал на АЦП приходит с датчика вибрации который закреплен на валу где и находится тахометр тоже, Поэтому Частота вибрации и будет равна частоте вращения вала


Ну вот, наконец прояснили ситуацию!
Напиши Вы это вначале, дискуссия могла быть гораздо короче rolleyes.gif
Обратите внимание, аналоговый фильтр после датчика должен подавлять все частоты выше 250 Гц.
На АЦП эти частоты попадать не должны.
С износом подшипника верхние частоты в спектре будут расти и могут существенно повлиять на результат.
Для повышения точности диагностики можно учитывать гармоники частоты вращения. Обычно сигнал от дефекта имеет гребенчатый спектр.
Но чем больше гармоник будете учитывать, тем точнее нужно оценивать частоту с тахометра (ошибка по частоте пропорциональна номеру гармоники).
kumle
Теперь после применения окна появилась новая большая проблема: при изменении сдвига фаз между сигналом тахометра и сигнала который приходит на АЦП происходит изменение амплитуды моей спектральной составляющей!!! (хотя в теории сказано что сдвиг сигнала не влияет на амплитудный спектр!) В чем тут может быть дело? При отключении окна все становится нормально, на изменение фазы перестает реагировать !
Alex11
Быть такого не может. Вы когда амплитуду считаете, суммируете квадраты всех компонентов? И действительной и мнимой частей?
kumle
Цитата(Alex11 @ Mar 30 2013, 21:50) *
Быть такого не может. Вы когда амплитуду считаете, суммируете квадраты всех компонентов? И действительной и мнимой частей?


Да, как обычно, корень из суммы квадратов действ. и мнимой части.
Сам не пойму что за фигня проиодит!
polyakovav
Интересно было бы посмотреть на форму спектра.
kumle
Все, с изменением амплитуды при изменении фазы разобрался, проблема была чисто в программной ошибке.
При перемножении сигнала на окно блэкмана я неправильно умножил на самый первый и самый последний коэффициенты (которые равны нулю)!!!
tmtlib
Если кто забрёл в эту тему, возможно заинтересует:

Extracting precise frequencies from FFT Bins using phase change between frames
http://stackoverflow.com/questions/4633203...-between-frames

Применимо и для ДПФ. Проверено, метод работает и весьма не плохо. При точноп попадании в бин сдвиг фазы, например через 128 точек, можно подсчитать. Затем смотрим реальную фазу через 128 точек и делаем корректировку частоты с учётом сдвига фаз. Весь смысл в том, что если частота не попадает в бин, то фаза будет опережать/запаздывать и в пределе этот сдвиг - переход к следующему соседнему бину.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.