|
|
  |
Способы убрать шум (..апроксимировать), На ATMega обработать сигнал |
|
|
|
Apr 30 2011, 21:36
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 10-02-09
Пользователь №: 44 637

|
Доброе время суток! Встала задача обработать сигнал (сейчас он регистрируется самописцем) АТМегой АВР, точнее для начала убрать "бороду" и выделить линейный сигнал. Амплитуда (размах) шума будет порядка 100-200 мВ, "горба" сигнала - где то 1 В. С отделением сигнала от шума практически не сталкивался. Подскажите, пожалуйста, каким образов лучше это сделать. Пока в голову приходит только из АЦП меги (последовательного приближения) внешней обвеской сделать АЦП с двойным интегрированием, второй вариан - цифровой фильтр... Вот что то на подобие входного сигнала (именно эта картинка рисована мышкой в пэинте).
Сообщение отредактировал roman_golovenkov - May 1 2011, 10:17
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 30 2011, 23:44
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(roman_golovenkov @ May 1 2011, 01:36)  Встала задача обработать сигнал (сейчас он регистрируется самописцем) АТМегой АВР, точнее для начала убрать "бороду" и выделить линейный сигнал.
Подскажите, пожалуйста, каким образов лучше это сделать. Пока в голову приходит только из АЦП меги (последовательного приближения) внешней обвеской сделать АЦП с двойным дифференцированием, второй вариан - цифровой фильтр... Из внешней обвязке Вам максимум что нужно, так это простейший аналоговый RC фильтр 1-ого порядка. Все. Ах да, цифровой фильтр... Да, его тоже можно. Можно вместо аналогового, но лучше и то и другое  . У Вас, если верить картинке, спектры полезного сигнала и помехи разнесены на "космические" расстояния, в этом случае можно не заморачиваться Матлабом, окнами, оптимизацией и прочей фигней, а использовать банальный фильтр скользящего среднего. Порядок (длина фильтра) любая, какая Вам больше понравитсяподойдет. Формулы найдете в инете. Еще лучше использовать каскадное соединение нескольких таких фильтров (выход первого фильтра является входом второго и т.д.). Фильтры лучше реализовать по рекуррентной схеме. Вроде все. Ах да, частоту дискретизации после фильтрации можно понизить. Раз так в тыщу  .
|
|
|
|
|
May 2 2011, 17:02
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 10-02-09
Пользователь №: 44 637

|
Большое всем спасибо за помощь! Сделал вывод, что следует использовать RC фильтр 1 порядка + скользящего среднего (читал, что при использовании цифрового все равно на до аналоговый с частотой среза равной частоте дискретизации). А АЦП двойного интегрирования не следует? Чем плох? И еще одна загвоздка, обрабатывать придется сигнал и другого типа (рис прилагается), Но первый нужный пик появляется за долисекунды (примерно 0,1) - на этой же частоте и дальнейшие шумы. Нужно снять амплитуды первого пика и вершины горба. Я думаю может примениь такой алгоритм: без фильтров снимаем первый пик, когда после появляется резкий скачок вниз - включаем цифровой фильтр, но тогда не получится подключить аналоговый фильт (который на частоту дискретизации) (( И andron86, что значит 1-10 нФ?
Сообщение отредактировал roman_golovenkov - May 2 2011, 17:04
Эскизы прикрепленных изображений
|
|
|
|
|
May 3 2011, 16:32
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531

|
Цитата(roman_golovenkov @ May 2 2011, 21:02)  И еще одна загвоздка, обрабатывать придется сигнал и другого типа (рис прилагается) 1.Для Вашего сигнала наиболее подходит аналоговый фильтр Бесселя. Сделайте его на частоту 10 Гц 3-го или 4-го порядка и попробуйте. Если сильно форму карежит - увеличьте частоту среза. Если шумов много - уменьшите. Так делают в кардиографах. 2.Если хочется чего-нибудь цифрового советую применить 24 разрядный сигма-дельта АЦП там фильтр на половину частоты дискретизации уже встроен так что норм Вы не нарушите. К сожалению он не Бесселя, поэтому частоту дискретизации придется выбрать немного повыше и доделать все в цифре. 3. Как правило встроенный АЦП для точных измерений неприменим, несколько младших бит только шумы, но вопрос точности не поднимался. 4. Обратите внимание на частоты 50 и 100Гц может их придется вырезать до АЦП, особенно если они выше половины частоты дискретизации а фильтра нет. 5. Вообще правильный ответ дается при приложении уже оцифрованного сигнала и его спектра.
--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
|
|
|
|
|
May 7 2011, 14:30
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 10-02-09
Пользователь №: 44 637

|
Цитата(EvgenyNik @ May 5 2011, 14:04)  Начинать надо с анализа - что является причиной шума. Эти сигналы идут с хемилюминографа (ФЭУ), и по факту - это не шум. Просто нужно "усреднить " данные, получить достаточно линейный график.
|
|
|
|
|
May 14 2011, 22:15
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 10-02-09
Пользователь №: 44 637

|
Написал код для фильтра простого скользящего среднего. Покритикуйте, пожалуйста, мож что не правильно. Перед прошивкой хорошоб от ошибок избавиться (кол-во сэмплов avgLenght) буду подбирать на месте, практически. На этой неделе цель оцифровать сигнал без фильтра, с аналоговым rc. и передать по uart на комп (записать в файл, например эксель, если получится, пока не знаю как  ) Хорошо б и цифровой опробовать. ЗЫ: Обрабатываю пока первую картинку. CODE #include <mega16.h>
#include <delay.h>
#include <stdio.h>
unsigned char i = 0; float adc_data_volt; const float k = 0.0025; int avgLenght = 30; float mass[avgLenght];
//Ring initialisation service routing void initRing () { unsigned int i; for (i = 0; i < avgLenght; i++); { mass[i] = 0; } }
//Filter service routing float movingAverage (float data_in) { static int i = 0; int j,k; float avg = 0.0; int indexBegin = (i - avgLenght) < 0 ? 0 : (i - avgLenght); for (k = indexBegin; k < (avgLenght - 1); k++) { mass[k] = mass[k+1]; } mass[avgLenght-1] = data_in; for (j = 0; j < avgLenght; j++) { avg += mass[j]; } i++; return avg = avg/avgLenght; }
// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { i++; if (i == 3) { i = 0; ADCSRA = 0xCE;
};
}
#define ADC_VREF_TYPE 0xC0
//#define NON_FILTER #define D_FILTER
#ifdef NON_FILTER // ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { unsigned int adc_data; // Read the AD conversion result adc_data = ADCW; adc_data_volt = adc_data*k; printf ("%f; ", adc_data_volt); } #endif
#ifdef D_FILTER interrupt [ADC_INT] void adc_isr(void) { unsigned int adc_data; float data_out; // Read the AD conversion result adc_data = ADCW; adc_data_volt = adc_data*k; data_out = movingAverage(adc_data_volt); printf ("%f; ", data_out); } #endif
Сообщение отредактировал roman_golovenkov - May 14 2011, 22:16
|
|
|
|
|
May 16 2011, 16:37
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 4-10-06
Из: Ukraine
Пользователь №: 20 949

|
Цитата(roman_golovenkov @ May 2 2011, 20:02)  Большое всем спасибо за помощь!
Сделал вывод, что следует использовать RC фильтр 1 порядка + скользящего среднего (читал, что при использовании цифрового все равно на до аналоговый с частотой среза равной частоте дискретизации). А АЦП двойного интегрирования не следует? Чем плох?
И еще одна загвоздка, обрабатывать придется сигнал и другого типа (рис прилагается), Но первый нужный пик появляется за долисекунды (примерно 0,1) - на этой же частоте и дальнейшие шумы. Нужно снять амплитуды первого пика и вершины горба. Я думаю может примениь такой алгоритм: без фильтров снимаем первый пик, когда после появляется резкий скачок вниз - включаем цифровой фильтр, но тогда не получится подключить аналоговый фильт (который на частоту дискретизации) ((
И andron86, что значит 1-10 нФ? Есть такой фильтр, как медианный. Предназначен для устранения импульсных помех. Можно попробовать Ваш сигнал пропустить через него, в результате вы будете иметь сигнал без импульса (меряем горб). Если из исходного вычесть полученный после медианного фильтра, то будем иметь сигнал ввиде импульса, который дальше Вы измеряете (возможно прийдется скорректировать фазочастотную характеристику).
Сообщение отредактировал lux - May 16 2011, 16:39
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|