реклама на сайте
подробности

 
 
> фильтрация аналоговых сигналов
KOT9RA
сообщение May 12 2012, 06:47
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 12-05-12
Пользователь №: 71 797



Доброго времени суток!

мне необходимо отфильтровать аналоговые сигналы методом скользящего среднего! сигнал подается на микроконтроллер. я использую ADUC842. написал программу, но не уверен что правильно реализовал метод скользящего среднего!
вот кусок кода, в котором происходит считывание сигналов преобразование их с помощью АЦП в код, далее код преобразуется в напряжение, и потом идет фильтрация:


ADCRead(3); //читаем порт P1.3 и запускаем АЦП
U21= (ADCDATAL+(ADCDATAH<<8))&0x0FFF; //снимаем код с АЦП
U11= U21/1638; //перевод кода в напряжение (FFF/2,5=1638.4) - для фильтрации
if(q==0)
{
Up1=Un1; //создание предыдущего зн-ия
q=1; //взводим флаг
}
else
{
Un1=Up1*(1-p)+ Un1*p; //фильтрация (р=1/n, где n-количество отсчетов)
Up1=Un1; //создание предыдущего зн-ия
U21=Un1*1638; //перевод обратно в код
}
на сколько я понимаю скользящее среднее используется для фильтрации данных которые заданны массивом. как это реализовать в данном случаи?

помогите пожайлуста! очень нужно!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kolia
сообщение May 14 2012, 13:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Вроде все верно, но код будет требовать большого времени для обработки, следует оптимизировать, убрать лишние переводы в напряжения и обратно, отойти от флоайпоинт операций

в идеале должно быть так (своего кода я не нашел давно делал...)

acc= acc+adc-mas_adc[n];
mas_adc[n] = adc;
if(++n>N)n=0;

return acc/N;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016