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

Задача такая: измерение трёхфазного напряжения промышленной частоты.
Надо выделить из напряжения каждой фазы основную частоту,
и измерить её действующее значение и фазу.

Посоветуйте пожалуйста, с чего лучше начать изучение алгоритмов ЦОС.
Что почитать, какие сайты посмотреть.
анатолий
Я рекомендую начинающим книжку Отнес, Эноксон. Прикладной анализ временных рядов.
Там детально популярно объясняется и спектральный анализ с пом. ДПФ-БПФ.
Pavel_SSS
Цитата(Nikkolaj @ Mar 5 2012, 12:23) *
Добрый день.
Мне впервые досталась задача, для решения которой надо применить ЦОС.
Вообще с електроникой и контроллерами работаю давно.

Задача такая: измерение трёхфазного напряжения промышленной частоты.
Надо выделить из напряжения каждой фазы основную частоту,
и измерить её действующее значение и фазу.

Посоветуйте пожалуйста, с чего лучше начать изучение алгоритмов ЦОС.
Что почитать, какие сайты посмотреть.

А какую подготовку Вы имеете? Если ни разу ничем подобным Вы не занимались, потратьте полдня на эту книгу.
Юкио Сато «Обработка сигналов, первое знакомство»
Нигде более доступно азы не излагаются. За ней - Сергиенко, ну а потом - умные монографии.
Nikkolaj
to Pavel_SSS

Измерением занимаюсь давно, но ДПФ-БПФ ранее не занимался.

Спасибо за совет, посмотрю.

Цитата(анатолий @ Mar 5 2012, 12:26) *
Я рекомендую начинающим книжку Отнес, Эноксон. Прикладной анализ временных рядов.
Там детально популярно объясняется и спектральный анализ с пом. ДПФ-БПФ.



Спасибо за рекомендацию, посмотрю.
kovigor
Цитата(Nikkolaj @ Mar 5 2012, 15:52) *
Измерением занимаюсь давно, но ДПФ-БПФ ранее не занимался.


С ДПФ начните, это на порядок проще, чем БПФ. А результат вычисления тот же. По времени, правда, проиграете - БПФ считается гораздо быстрее. Зато сможете максимально быстро начать реализовывать проект и получить вполне ощутимый результат. В дополнение к тому, что вам посоветовали, могу еще указать на книгу Айфичера и Джервиса:

http://lord-n.narod.ru/walla.html

и книгу "Цифровая обработка сигналов" Ричарда Лайонса. Ну и базовую математическую подготовку еще никто не отменял ...
SPACUM
Цитата(Nikkolaj @ Mar 5 2012, 12:23) *
Задача такая: измерение трёхфазного напряжения промышленной частоты.
Надо выделить из напряжения каждой фазы основную частоту,
и измерить её действующее значение и фазу.

Многое зависит от требуемой точности. Или от необходимости определить реальную частоту напряжения промышленной частоты. Насчет книг согласен, но настоящее понимание у меня появилось только после реальных экспериментов с реальными АЦП и БПФ на реальном микропроцессоре. Графический экран и логарифмический масштаб тоже требуются. На начальном этапе обучения матлаб это заменяет плохо.
Как пример вопрос оценки реальной частоты вообще не поднимается в большинстве книг. Однако поискав в интернете по слову "estimation" (оценка) можно найти сотни публикаций с реальными рекомендациями.
Так что сначала должна быть база для экспериментов с трехканальным вводом на частоте раз в 20 выше частоты промышленной сети. А после уже книги и сами эксперименты.
kovigor
Цитата(SPACUM @ Mar 5 2012, 19:42) *
Как пример вопрос оценки реальной частоты вообще не поднимается в большинстве книг. Однако поискав в интернете по слову "estimation" (оценка) можно найти сотни публикаций с реальными рекомендациями.
Так что сначала должна быть база для экспериментов с трехканальным вводом на частоте раз в 20 выше частоты промышленной сети. А после уже книги и сами эксперименты.


В смысле ? Трудно определить реальную частоту сигнала ? Лет 10 назад начинал с написания АОНа, сначала на ДПФ, потом на БПФ. Подавал на свою простейшую платку сигнал с Г3-118, от сотен Герц до килогерц, и довольно точно, с точностью до процента, а то и выше, определял частоту (деталей не помню за давностью лет). А начинал я все-таки с книги ("Радиотехнические цепи и сигналы" Баскакова, других просто не было под рукой). Без минимальной теор. подготовки экспериментировать нет смысла, т.е., начать придется все-таки с книг ...
Pavel_SSS
Цитата(kovigor @ Mar 5 2012, 21:49) *
В смысле ? Трудно определить реальную частоту сигнала ? Лет 10 назад начинал с написания АОНа, сначала на ДПФ, потом на БПФ. Подавал на свою простейшую платку сигнал с Г3-118, от сотен Герц до килогерц, и довольно точно, с точностью до процента, а то и выше, определял частоту (деталей не помню за давностью лет). А начинал я все-таки с книги ("Радиотехнические цепи и сигналы" Баскакова, других просто не было под рукой). Без минимальной теор. подготовки экспериментировать нет смысла, т.е., начать придется все-таки с книг ...

Баскакова по доброй воле невозможно читать, только под угрозой отчисления. А если серьезно - то классический курс, сухой но обстоятельный.
kovigor
Цитата(Pavel_SSS @ Mar 6 2012, 00:32) *
Баскакова по доброй воле невозможно читать, только под угрозой отчисления. А если серьезно - то классический курс, сухой но обстоятельный.


Потом были Рабинер и Гоулд, но это потом. Начиналось все именно с Баскакова. Но зато сколько удовольствия я получил, когда это все заработало sm.gif
Nikkolaj
Спасибо всем за советы и желание помочь.


Цитата
SPACUM
Так что сначала должна быть база для экспериментов с трехканальным вводом на частоте раз в 20 выше частоты промышленной сети. А после уже книги и сами эксперименты.

О базе для экспериментов.
Думаю что для начала можно отработать алгоритм и на одном канале,
не обязательно сразу браться за все три канала.
Сейчас у меня под руками есть:
стандартный генератор синусоидальных сигналов,
12 разрядный АЦП,
контроллер ATmega128 с LCD индикатором 2X16.
Неужели этого не хватит для начала ?
По крайней мере, для отработки алгоритма измерения действующего напряжения одной фазы.
Для отработки измерения сдвига фазы, наверное без второго канала уже не обойтись.
А три канала понадобятся уже в самом конце.
Или я заблуждаюсь?


Цитата
SPACUM
на частоте раз в 20 выше частоты промышленной сети.

Я правильно Вас понял,
что для измерения достаточно за период сети сделать 20 измерений мгновенных значений каждой фазы,
и обработать их по определённому алгоритму ?


Цитата
SPACUM
Многое зависит от требуемой точности.

Точность измерения действующего значения 1% вполне устроит.
Повидимому точность измерения будет сильно зависеть от количества измерений за период,
или она больше зависит от точности измерения мгновенных значений, т.е. от точности АЦП.
Для точности 1%, 20 измерений за период, и 12 разрядного АЦП будет достаточно?


Цитата
SPACUM
настоящее понимание у меня появилось только после реальных экспериментов с реальными АЦП и БПФ на реальном микропроцессоре.

Скажите, вычислительных возможностей контроллера ATmega128, при частоте 16МГц,
для такой задачи будет достаточно, или придётся осваивать ещё и сигнальный процессор?
При условии, что результат измерения нужно получать за каждый период сети.



Цитата
SPACUM
Графический экран и логарифмический масштаб тоже требуются.

Обьясните пожалуйста, почему обязательно будет нужен графический экран и логарифмический масштаб.
Без них никак нельзя обойтись?

Pavel_SSS
Цитата(Nikkolaj @ Mar 6 2012, 13:34) *
Спасибо всем за советы и желание помочь.



О базе для экспериментов.
Думаю что для начала можно отработать алгоритм и на одном канале,
не обязательно сразу браться за все три канала.
Сейчас у меня под руками есть:
стандартный генератор синусоидальных сигналов,
12 разрядный АЦП,
контроллер ATmega128 с LCD индикатором 2X16.
Неужели этого не хватит для начала ?
По крайней мере, для отработки алгоритма измерения действующего напряжения одной фазы.
Для отработки измерения сдвига фазы, наверное без второго канала уже не обойтись.
А три канала понадобятся уже в самом конце.
Или я заблуждаюсь?



Я правильно Вас понял,
что для измерения достаточно за период сети сделать 20 измерений мгновенных значений каждой фазы,
и обработать их по определённому алгоритму ?



Точность измерения действующего значения 1% вполне устроит.
Повидимому точность измерения будет сильно зависеть от количества измерений за период,
или она больше зависит от точности измерения мгновенных значений, т.е. от точности АЦП.
Для точности 1%, 20 измерений за период, и 12 разрядного АЦП будет достаточно?



Скажите, вычислительных возможностей контроллера ATmega128, при частоте 16МГц,
для такой задачи будет достаточно, или придётся осваивать ещё и сигнальный процессор?
При условии, что результат измерения нужно получать за каждый период сети.




Обьясните пожалуйста, почему обязательно будет нужен графический экран и логарифмический масштаб.
Без них никак нельзя обойтись?

Точность 1 процент Вы прекрасно получите считая интервал между переходами сигнала через нуль тупо компаратором и усредняя это значение. Соответственно, потребуется очень мало ресурсов и не потребуется какого-либо изучения ЦОС.

Тут большее значение имеет то, как часто Вам надо получать результат измерения. Если раз в секунду - то считайте переходы через 0 и усредняйте. Если раз в миллисекунду - то тогда изучайте ЦОС...
SPACUM
Цитата(Nikkolaj @ Mar 6 2012, 13:34) *
Сейчас у меня под руками есть:
стандартный генератор синусоидальных сигналов,
12 разрядный АЦП,
контроллер ATmega128 с LCD индикатором 2X16.
Неужели этого не хватит для начала ?

Точность измерения действующего значения 1% вполне устроит.
Повидимому точность измерения будет сильно зависеть от количества измерений за период,
или она больше зависит от точности измерения мгновенных значений, т.е. от точности АЦП.
Для точности 1%, 20 измерений за период, и 12 разрядного АЦП будет достаточно?

Обьясните пожалуйста, почему обязательно будет нужен графический экран и логарифмический масштаб.
Без них никак нельзя обойтись?

1.Именно для Вашей задачи с Вашей точностью (если частоту определять не надо) пожалуй хватит. Взять данные за несколько периодов - умножить данные на синус - просуммировать - умножить данные на косинус - просуммировать - для амплитуды взять корень из суммы квадратов и извлечь корень - для фазы разделить меньшее на большее взять арктангенс и добавить пи/2 в зависимости от квадранта - сделать это 3 раза даже не прекращая ввод АЦП по прерываниям - это сделать можно. А какой период измерения нужен?

2.Вы хотели начать изучать ЦОС. По книгам трудно прочувствовать БПФ или фильтры и совершенно невозможно прочувствовать реальный АЦП. Графический экран БПФ логарифмический масштаб спектра и реальные измерения на своем АЦП - надо быть гением чтобы все понять по описаниям.

3.Совершенно не обязательно делать все на микропроцессоре. Достаточно связать Ваше устройство с ПК и сделать обработку там или воспользоваться готовыми программами.
Shivers
А есть ли какая то литература по алгоритмам ЦОС при реализации в железе?
Интересует конечно же не только FFT/DFT, и желательно чтобы было минимум теории и максимум схематехники. Возможно, какие то руководства/учебники по проектированию сигнальных процессоров, или наподобие.
kovigor
Цитата(Shivers @ Mar 6 2012, 16:00) *
А есть ли какая то литература по алгоритмам ЦОС при реализации в железе?
Интересует конечно же не только FFT/DFT, и желательно чтобы было минимум теории и максимум схематехники. Возможно, какие то руководства/учебники по проектированию сигнальных процессоров, или наподобие.


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

P.S. А без теории тут делать нечего, в принципе. Так что придется хоть немного в нее вникнуть, благо она не слишком сложна ...
ivan219
Вместо ДПФ лучше воспользоваться Герцелем. Результат то же но хранить коэффициенты Cos и Sin не нужно. Да и вычислитель но чуть лучьше.
Pavel_SSS
Цитата(Nikkolaj @ Mar 6 2012, 13:34) *
Спасибо всем за советы и желание помочь.



О базе для экспериментов.
Думаю что для начала можно отработать алгоритм и на одном канале,
не обязательно сразу браться за все три канала.
Сейчас у меня под руками есть:
стандартный генератор синусоидальных сигналов,
12 разрядный АЦП,
контроллер ATmega128 с LCD индикатором 2X16.
Неужели этого не хватит для начала ?
По крайней мере, для отработки алгоритма измерения действующего напряжения одной фазы.
Для отработки измерения сдвига фазы, наверное без второго канала уже не обойтись.
А три канала понадобятся уже в самом конце.
Или я заблуждаюсь?



Я правильно Вас понял,
что для измерения достаточно за период сети сделать 20 измерений мгновенных значений каждой фазы,
и обработать их по определённому алгоритму ?



Точность измерения действующего значения 1% вполне устроит.
Повидимому точность измерения будет сильно зависеть от количества измерений за период,
или она больше зависит от точности измерения мгновенных значений, т.е. от точности АЦП.
Для точности 1%, 20 измерений за период, и 12 разрядного АЦП будет достаточно?



Скажите, вычислительных возможностей контроллера ATmega128, при частоте 16МГц,
для такой задачи будет достаточно, или придётся осваивать ещё и сигнальный процессор?
При условии, что результат измерения нужно получать за каждый период сети.




Обьясните пожалуйста, почему обязательно будет нужен графический экран и логарифмический масштаб.
Без них никак нельзя обойтись?

Действующее значение (корень суммы квадратов) не вычисляйте - вычисляйте средневыпрямленное (сумма модулей деленная на число измерений) и умножайте на поправочный коэффициент. Если сделать число измерений равным степени двойки, то деление можно заменить сдвигом результата сложения.
Насчет частоты - как я уже и писал 50 герц измеряйте путем вычисления времени между переходами через 0. Лет десять назад я делал такой приборчик на ПИКе, как раз он мерил частоту, напряжение, показывал порядок фаз...
Лучше для экспериментов используйте звуковую карту компьютера - запишите сигнал, далее его обрабатывайте в Матлабе или Симулинке.
Главная операция, которая есть в DSP и которой нет в контроллерах - это умножение с накоплением в аккумулятор повышенной разрядности, а также возможность производить арифметические операции с насыщением и округлением результата. Не знаю, есть ли в Атмеге это, если нет, то Вам тяжело будет реализовывать алгоритмы ЦОС на ней.
Nikkolaj
Спасибо всем за ответы.
Вы правы, вначале надо изучить теорию, этим и займусь.

Цитата
SPACUM Дата Mar 6 2012, 15:12
А какой период измерения нужен?

Результат надо получать за каждый период сети, т.е. 20мс.


Цитата
SPACUM Дата Mar 6 2012, 15:12
3.Совершенно не обязательно делать все на микропроцессоре. Достаточно связать Ваше устройство с ПК и сделать обработку там или воспользоваться готовыми программами.

Да, Вы правы, действительно делать обработку на ПК удобнее.
Так и сделаю.
О каких готовых программах обработки Вы пишете, и где их можно посмотреть?
SPACUM
Цитата(Nikkolaj @ Mar 12 2012, 19:34) *
О каких готовых программах обработки Вы пишете, и где их можно посмотреть?

В основном это Матлаб и Симулинк. Можете скачать или купить. Но я разбираюсь в ЦОС только потому, что их не использую. Если привыкнете к ним - не сделаете ничего нового. Будет чистый соблазн состряпать все из готовых блоков не думая и не разбираясь.

В моей области делается прибор на микропроцессоре для сбора информации и оперативной диагностики. К нему пишется программа на ПК для хранения множества измерений и уточненной диагностики по изменениям во времени.

Учитывая ограниченность Вашего первичного прибора рекомендую написать на ПК на Билдере программу обработки и визуализации и связать Ваш прибор с ПК для начала по COM. Таким образом и микропроцессор и ПК будут объектом Вашей деятельности.
Nikkolaj
Спасибо за ответ, подумаю как это сделать.
TigerSHARC
Цитата(Nikkolaj @ Mar 12 2012, 19:34) *
Результат надо получать за каждый период сети, т.е. 20мс.

РЗиА? РАС?
Для получения 1% погрешности на столь коротком временном интервале необходим адаптивный алгоритм, так как спектр ферье при изменении частоты сети даже в маленьких пределах даст погрешность.
Когда-то считал в матлабе - максимальная погрешность при интервале изменения частоты 45-55Гц составила порядка нескольких процентов.

А вообще нужно иметь ТЗ(хотябы составленное вами для себя же) и задаться значением входного сигнала (в пром сетях далеко не чистый синус).
Nikkolaj
Да, я понимаю что при изменении частоты в диапазоне 45 - 55Гц,
ДСП даст погрешность существенно выше, чем 1%.
Поэтому я планировал помимо измерения, следить за частотой,
и соответственно, периодически корректировать время между отсчётами.
Интересно, при каком изменении частоты, нужно начинать коррекцию.

К сожалению, я пока не знаю что такое адаптивный алгоритм.
Это то, что я написал, или что то другое?

Да, Вы правы, в пром сетях действительно далеко не чистый синус.
TigerSHARC
Цитата(Nikkolaj @ Mar 13 2012, 15:09) *
Да, я понимаю что при изменении частоты в диапазоне 45 - 55Гц,
ДСП даст погрешность существенно выше, чем 1%.
Поэтому я планировал помимо измерения, следить за частотой,
и соответственно, периодически корректировать время между отсчётами.
Интересно, при каком изменении частоты, нужно начинать коррекцию.

К сожалению, я пока не знаю что такое адаптивный алгоритм.
Это то, что я написал, или что то другое?

Да, Вы правы, в пром сетях действительно далеко не чистый синус.

Обычно ваша задача решается путём применения "алгоритма герцеля(БИХ-фильтр для вычисления одного отсчёта фурье)" или "ДФП и ресемплер - фильтр дробной задержки)" или "оконное взвешивание, но тогда придётся взять выборку периодов в 20 сначала а потом скользящим окном вычислять многоточечное БФП, получая результат каждые 20мс".
навскидку тут герцель предпочтительней.
Адаптивный алгоритм в вашем случае - это когда вы по изменению частоты вы меняете коэффициенты фильтра (ресемплера или Герцеля) для нужного шага сетки частот фурье преобразования и тогда ваша искомая амплитуда не "растёчётся" из-за изменения частоты сети.
petrov
Цитата(SPACUM @ Mar 13 2012, 00:59) *
В основном это Матлаб и Симулинк. Можете скачать или купить. Но я разбираюсь в ЦОС только потому, что их не использую. Если привыкнете к ним - не сделаете ничего нового. Будет чистый соблазн состряпать все из готовых блоков не думая и не разбираясь.


Не надо бредовые мифы распространять.
TigerSHARC
Согласен с предыдцщим постом. Matlab меня выручает часто когда надо на скорую руку посмотреть погрешность того или иного метода.
mad_physicist
Цитата(SPACUM @ Mar 13 2012, 03:59) *
В основном это Матлаб и Симулинк. Можете скачать или купить. Но я разбираюсь в ЦОС только потому, что их не использую. Если привыкнете к ним - не сделаете ничего нового. Будет чистый соблазн состряпать все из готовых блоков не думая и не разбираясь.

если работа ведётся в рамках конкретного проекта и на горизонте маячит необходимость зашить матлабовскую модель в железо, никакого соблазна состряпать из готовых блоков не будет. напишешь все блоки сам и ещё будешь удивляться - надо же, как замудрили эти встроенные функции, у меня-то проще и понятней.
а по поводу бездумного использования блоков: некоторые из них не тривиальны даже в использовании, не то что в понимании. в них без хорошего теоритического знания не разобраться

з.ы. матлаб исключительно удобен для отладки алгоритмов
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.