АЦП. Разбор полётов
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Угу, ты сейчас нарвешься... И будешь писАть ВЕСЬ код, да еще и под CAVR...

- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: АЦП. Разбор полётов
Под CAVR не смогу.
Хотя... если немного покурить матчасть, то можно и написать. Но не буду, пусть просто кот немного тоже головой поразмыслит
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: АЦП. Разбор полётов
Аlex писал(а):Ну я и привёл простенький пример для простоты понимания
Простенький пример такой простенький. .
Аlex писал(а):пусть просто кот немного тоже головой поразмыслит
Вот в аналоговой ехнике хемы легко понимаю.Почти все, которые вижу могу быстро разложить на блоки и всё О.К. А в программах торможу -- не понимаю я их ещё. Да и лексику Сишную не особо знаю.
Re: АЦП. Разбор полётов
Да в этой Сишной ексике всего-то десятка два ператоров 
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: АЦП. Разбор полётов
Ну лексику я допустим могу в ближайшее время осилить -- еси там 20 слов, то мне ещё чуть-чуть осталось.А вот орфорафию -- правила написания. . .
Я просто НЕ МОГУ сформировать МЫСЛЬ в КОД!
Я просто НЕ МОГУ сформировать МЫСЛЬ в КОД!
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Прежде чем писать код, нужно понять архитектуру МК.
Поэтому я всегда рекламирую начало деятельности в этой области с АСМа.
Простота записи в Си очень обманчива.
Чтобы не напороть всякого хлама и быдлокода приходится вникать в структуру компилятора и прогнозировать выходной код. А тут то как раз и нужен АСМ.
Открывайте даташит и читайте. Тем более, что для АТМег на русском писано-переписано уже всего...
Будут КОНКРЕТНЫЕ вопросы по архитектуре, периферии и системе команд - обращайтесь.
Чудес не бывает. Даже для мигания светодиодом на одной ноге требуется курить даташит.
Поэтому я всегда рекламирую начало деятельности в этой области с АСМа.
Простота записи в Си очень обманчива.
Чтобы не напороть всякого хлама и быдлокода приходится вникать в структуру компилятора и прогнозировать выходной код. А тут то как раз и нужен АСМ.
Открывайте даташит и читайте. Тем более, что для АТМег на русском писано-переписано уже всего...
Будут КОНКРЕТНЫЕ вопросы по архитектуре, периферии и системе команд - обращайтесь.
Чудес не бывает. Даже для мигания светодиодом на одной ноге требуется курить даташит.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: АЦП. Разбор полётов
Это всё временно. Через "стадию клетки" все проходили.Я просто НЕ МОГУ сформировать МЫСЛЬ в КОД!
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: АЦП. Разбор полётов
КРАМ писал(а):Чудес не бывает. Даже для мигания светодиодом на одной ноге требуется курить даташит.
Мигалки я уже осилил. Продолжаю развитие!
Re: АЦП. Разбор полётов
КРАМ писал(а):Прежде чем писать код, нужно понять архитектуру МК.
Поддерживаю. И как само собой разумеющееся - должен быть детально продуман, а еще лучше прорисован алгоритм функционирования будущего дивайса. Насчет простоты - сам нарывался в прошлом на случаи, когда я понимал работу Сишного оператора не так, как разработчик компилятора
Re: АЦП. Разбор полётов
Здравствуйте, решил я тоже разобраться с этим вопросом как избавится от шумов. Правда меня больше интересует алгоритм, а не код
Но пока возникают вопросы.
Даже вот тут в самом начале, не как не могу понять каким образом буфер является фильтром. и как будет рассчитать его ачх и параметры. В прошлом семестре был курс цифровая обработка сигналов, но видимо что-то осталось не понятно или пробелы.
По читал ещё раз лекцию "синтез не рекурсивных фильтров методом весовых функций" Глинченко А.C ЦОС . Полагаю, что прямоугольное окно это весовая функция, но тогда что бы произвести фильтрацию сигналов надо взять свёртку сигнала и импульсной характеристики(ИХ)(sinc функции) но здесь об этом не слово или всё таки кольцевой буфер и есть ИХ? Тогда АЧХ фильтра будет выглядеть примерно sinc функцией ?
Но пока возникают вопросы.
...
Простейший КИХ ФНЧ - это КОЛЬЦЕВОЙ БУФЕР (прямоугольное окно).
Для его формирования нужно каждое преобразование писать в буфер нужной длины просто по кольцу (инкрементируя указатель по кругу). И ПОСЛЕ КАЖДОГО ИЗМЕРЕНИЯ, после занесения очередного измерения в буфер, находится сумма всех элементов массива-буфера и делится на длину буфера (сдвигом или делением, зависит от выбранной длины).
...
Даже вот тут в самом начале, не как не могу понять каким образом буфер является фильтром. и как будет рассчитать его ачх и параметры. В прошлом семестре был курс цифровая обработка сигналов, но видимо что-то осталось не понятно или пробелы.
По читал ещё раз лекцию "синтез не рекурсивных фильтров методом весовых функций" Глинченко А.C ЦОС . Полагаю, что прямоугольное окно это весовая функция, но тогда что бы произвести фильтрацию сигналов надо взять свёртку сигнала и импульсной характеристики(ИХ)(sinc функции) но здесь об этом не слово или всё таки кольцевой буфер и есть ИХ? Тогда АЧХ фильтра будет выглядеть примерно sinc функцией ?
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Да, импульсная характеристика ФНЧ КИХ с прямоугольным окном будет sinc функцией.

Интеграл в свертке - это СУММИРОВАНИЕ отсчетов с интервалом ЗАДЕРЖКИ (т.е. интервалом преобразования).

Оконные коэффициенты будут влиять на соотношение амплитуды основного и боковых лепестков.
В случае единичных коэффициентов получаем прямоугольное окно. Оно и дает обычное скользящее среднее.

Кольцевой буфер реализует скользящий во времени массив отсчетов для суммирования.

Интеграл в свертке - это СУММИРОВАНИЕ отсчетов с интервалом ЗАДЕРЖКИ (т.е. интервалом преобразования).

Оконные коэффициенты будут влиять на соотношение амплитуды основного и боковых лепестков.
В случае единичных коэффициентов получаем прямоугольное окно. Оно и дает обычное скользящее среднее.

Кольцевой буфер реализует скользящий во времени массив отсчетов для суммирования.
Re: АЦП. Разбор полётов
h(0),h(1) это я так полагаю что в вашем случае оконные коэффициенты которые равны единице или же ИХ ?
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Да, это оконные коэффициенты.
Когда они равны (единице), то массив может быть неупорядоченным, т.е. его начало может быть в любом месте. Знчит его заполнение может вестись по кругу без дальнейшего пересчета указателя адреса. При оконных функциях непрямоугольного вида заполнение все равно круговое, а вот обработка уже требует расчета указателя.
Когда они равны (единице), то массив может быть неупорядоченным, т.е. его начало может быть в любом месте. Знчит его заполнение может вестись по кругу без дальнейшего пересчета указателя адреса. При оконных функциях непрямоугольного вида заполнение все равно круговое, а вот обработка уже требует расчета указателя.
Re: АЦП. Разбор полётов
А куда ИХ делать ? Я почему-то понимаю что оконные коэффициенты это и есть их и тогда что бы найти ачх надо взять преобразование Фурье так ?
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Если оконная функция прямоугольная, то эти коэффициенты никуда девать не нужно, поскольку произведение элементов массива на единицу дает тот же самый массив.
А в случае непрямоугольности нужно умножать каждый элемент массива на свой оконный коэффициент и потом уже находить сумму этих произведений. Только как я уже ранее писАл, массив должен быть упорядоченным. Т.е. нужно умножать последний поступивший отсчет на нулевой коэффициент, предыдущий на первый и т. д.
Преобразование Фурье оперирует ДРУГИМИ коэффициентами. Внешне математика похожа, поскольку математические методы аналогичны.
Но в случае с преобразованием Фурье каждый фильтр требует коэффициентов, которые равны значению базисной функции в точке отсчета.
ЗЫ. Не путайте АЧХ и обработку сигнала. АЧХ - это графическое или аналитическое выражение комплЕксного коэффициента передачи четырехполюсника, а процесс фильтрации - это УМНОЖЕНИЕ этого коэффициента на значения входного сигнала с целью получения выходного.
А в случае непрямоугольности нужно умножать каждый элемент массива на свой оконный коэффициент и потом уже находить сумму этих произведений. Только как я уже ранее писАл, массив должен быть упорядоченным. Т.е. нужно умножать последний поступивший отсчет на нулевой коэффициент, предыдущий на первый и т. д.
Преобразование Фурье оперирует ДРУГИМИ коэффициентами. Внешне математика похожа, поскольку математические методы аналогичны.
Но в случае с преобразованием Фурье каждый фильтр требует коэффициентов, которые равны значению базисной функции в точке отсчета.
ЗЫ. Не путайте АЧХ и обработку сигнала. АЧХ - это графическое или аналитическое выражение комплЕксного коэффициента передачи четырехполюсника, а процесс фильтрации - это УМНОЖЕНИЕ этого коэффициента на значения входного сигнала с целью получения выходного.
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
Можно.
Только нужно не вообще задавать вопросы, а с некоторым усилием по их пониманию...
Скажем, нужно разобраться с тем, какой таймер в АВР запускает АЦП по переполнению. И инициализировать этот таймер, АЦП и их взаимное функционирование.
По поводу расчета тут уже писали...
Так что непонятно?
Только нужно не вообще задавать вопросы, а с некоторым усилием по их пониманию...
Скажем, нужно разобраться с тем, какой таймер в АВР запускает АЦП по переполнению. И инициализировать этот таймер, АЦП и их взаимное функционирование.
По поводу расчета тут уже писали...
Так что непонятно?
Re: АЦП. Разбор полётов
Если оконная функция прямоугольная, то эти коэффициенты никуда девать не нужно, поскольку произведение элементов массива на единицу дает тот же самый массив.
А в случае непрямоугольности нужно умножать каждый элемент массива на свой оконный коэффициент и потом уже находить сумму этих произведений. Только как я уже ранее писАл, массив должен быть упорядоченным. Т.е. нужно умножать последний поступивший отсчет на нулевой коэффициент, предыдущий на первый и т. д.
Это я понял
Преобразование Фурье оперирует ДРУГИМИ коэффициентами. Внешне математика похожа, поскольку математические методы аналогичны.
Но в случае с преобразованием Фурье каждый фильтр требует коэффициентов, которые равны значению базисной функции в точке отсчета.
это как-то не сильно понятно.
В общем я вспомнил как АЧХ фильтра найти, надо единичный импульс на вход фильтра подать и то что на выходе будет (ИХ) сделать преобразование Фурье.
ЗЫ. Не путайте АЧХ и обработку сигнала. АЧХ - это графическое или аналитическое выражение комплЕксного коэффициента передачи четырехполюсника, а процесс фильтрации - это УМНОЖЕНИЕ этого коэффициента на значения входного сигнала с целью получения выходного.
Да вроде бы не путаю.
Не много в LabVIEW по баловался на вход подал гауссовский шум со среднеквадратичным отклонением 0.5 и сложил его с цифрой 2 и пропустил его через такой фильтр с N=8 среднеквадратичное отклонение понизилось до 0.17.
Re: АЦП. Разбор полётов
Заинтриговали, блин. Нашёл остатки от своего старого исходника, с помощью которого когда-то мучил АЦП. Оказалось, что я старый садист - заставлял работать АЦП на тактовой частоте 9,6 МГц. На такой частоте вообще нельзя работать!
Сегодня я провёл лабораторную работу в соответствии с собственными рекомендациями: viewtopic.php?p=1372696#p1372696
Файл программы сгенерил с помощью CodeWizardAVR, после чего творчески осмыслил и "доработал напильником" - выкинул лишнее и вставил нужное. Подробности работы в комментариях в файле.
Тактовая частота АЦП - 18,75 кГц. На вход подавал 1,0000 вольт от батарейки. Результат выводил наружу в виде количества импульсов. Импульсы считал частотомером РЧЗ-07-0002.
Оказалось, что не всё так страшно. Если прицепить на вход АЦП RC цепочку (я использовал 10 кОм и 47 мкф), то даже без всякой обработки, результат преобразования АЦП болтается всего на 1 -3 единицы. С любой обработкой - вообще стоИт, как у молодого.
Но если отключить конденсатор, то беда.
без обработки 851 - 986
массив 8 значений 916 - 948
массив 16 значений 925 - 943
тупое суммирование 16 результатов 917 - 943
Странные результаты получились, когда на входе строгий ноль. Без обработки, и с обработкой типа скользящего среднего, на выходе болтается 1 - 2 единцы, т.е. нуля нет. При обработке тупым суммированием, как не странно, на выходе строгий 0. Не могу понять, в чём дело.
Исходники прилагаю. Файл adc8.c - обработка с размером буфера 8. Файл adcsum16.c - обработка тупым суммированием. Он не такой красивый, поскольку сделан из предыдущего.
Сегодня я провёл лабораторную работу в соответствии с собственными рекомендациями: viewtopic.php?p=1372696#p1372696
Файл программы сгенерил с помощью CodeWizardAVR, после чего творчески осмыслил и "доработал напильником" - выкинул лишнее и вставил нужное. Подробности работы в комментариях в файле.
Тактовая частота АЦП - 18,75 кГц. На вход подавал 1,0000 вольт от батарейки. Результат выводил наружу в виде количества импульсов. Импульсы считал частотомером РЧЗ-07-0002.
Оказалось, что не всё так страшно. Если прицепить на вход АЦП RC цепочку (я использовал 10 кОм и 47 мкф), то даже без всякой обработки, результат преобразования АЦП болтается всего на 1 -3 единицы. С любой обработкой - вообще стоИт, как у молодого.
Но если отключить конденсатор, то беда.
без обработки 851 - 986
массив 8 значений 916 - 948
массив 16 значений 925 - 943
тупое суммирование 16 результатов 917 - 943
Странные результаты получились, когда на входе строгий ноль. Без обработки, и с обработкой типа скользящего среднего, на выходе болтается 1 - 2 единцы, т.е. нуля нет. При обработке тупым суммированием, как не странно, на выходе строгий 0. Не могу понять, в чём дело.
Исходники прилагаю. Файл adc8.c - обработка с размером буфера 8. Файл adcsum16.c - обработка тупым суммированием. Он не такой красивый, поскольку сделан из предыдущего.
- Вложения
-
- adcsum16.c
- (6.89 КБ) 323 скачивания
-
- adc8.c
- (6.13 КБ) 298 скачиваний
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: АЦП. Разбор полётов
pokk писал(а):Если оконная функция прямоугольная, то эти коэффициенты никуда девать не нужно, поскольку произведение элементов массива на единицу дает тот же самый массив.
А в случае непрямоугольности нужно умножать каждый элемент массива на свой оконный коэффициент и потом уже находить сумму этих произведений. Только как я уже ранее писАл, массив должен быть упорядоченным. Т.е. нужно умножать последний поступивший отсчет на нулевой коэффициент, предыдущий на первый и т. д.
Это я понял
Преобразование Фурье оперирует ДРУГИМИ коэффициентами. Внешне математика похожа, поскольку математические методы аналогичны.
Но в случае с преобразованием Фурье каждый фильтр требует коэффициентов, которые равны значению базисной функции в точке отсчета.
это как-то не сильно понятно.
В общем я вспомнил как АЧХ фильтра найти, надо единичный импульс на вход фильтра подать и то что на выходе будет (ИХ) сделать преобразование Фурье.ЗЫ. Не путайте АЧХ и обработку сигнала. АЧХ - это графическое или аналитическое выражение комплЕксного коэффициента передачи четырехполюсника, а процесс фильтрации - это УМНОЖЕНИЕ этого коэффициента на значения входного сигнала с целью получения выходного.
Да вроде бы не путаю.
Не много в LabVIEW по баловался на вход подал гауссовский шум со среднеквадратичным отклонением 0.5 и сложил его с цифрой 2 и пропустил его через такой фильтр с N=8 среднеквадратичное отклонение понизилось до 0.17.
В том и дело, что путаете.
Вы подаете на вход функцию Дирака, а не реальный сигнал. В результате имеете не фильтрацию сигнала, а АЧХ...
Та же бодяга с шумом.

