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

 
 
> Простейший цифровой ФНЧ, для конечного массива точек
Ivan Kuznetzov
сообщение Jan 20 2011, 10:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Есть массив, в котором записаны значения с АЦП. Напряжения формируют некую "огибающую"

Платформа: STM32, сигнал - массив значений с АЦП в вольтах.

1)Подскажите фильтр (алгоритм на Си) чтобы сгладить(усреднить) значения в массиве?
2) Как определить характерные места у огибающей (резкое увеличение значения, резкий спад)



Сообщение отредактировал Ivan Kuznetzov - Jan 20 2011, 11:26
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Jan 21 2011, 11:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Код
/************************************************************************
*                                                                        *
*                   Библиотека для цифровой фильтрации.                    *
*                            Версия:     1.01.                                *
*                                                                        *
* Файл: fir.c        Дата создания: 08.07.2010г.                            *
*              Последние изменения: 08.07.2010г.                            *
* Сапего Александр Леонидович. (sapegoal@mail.ru)                        *
*                                                                        *
************************************************************************/

#include "stdint.h"

// Фильтр 2-го порядка исходя из формулы y0^ = a0*(x0+x2)+a1*x1 + b1*y0 + b2*y1 + c1*y0
// где a и b - коэффициенты, c - целая часть y0
// После выполнения производится сдвиг y.
// y1 -> y2, y0 -> y1, y0^ -> y0;
//
// В процедуру передаётся 2 параметра
// 1 - указатель на значения, в последовательности: x0,x1,x2,y0,y1,y2
// 2 - указатель на значения коэффициентов в последовательности: a0,a1,b1,b2,c1
// По финишу результат делится на 32768

struct    data_s
{
  int16_t        x[3],y[3];                                // Данные фильтра
};

struct    coef_s
{
  int16_t        a0, a1, b1, b2, c1;                        // Коэффициенты фильтра
};

void fir2_16(uint8_t * data, uint8_t * coef)
{
  struct data_s    *d_s;
  struct coef_s    *c_s;
  int32_t        acc;
  
  d_s = (struct data_s *) data;
  c_s = (struct coef_s *) coef;
  acc = (int32_t)(d_s->x[0] + d_s->x[2]) * (int32_t)c_s->a0;
  acc += (int32_t)d_s->x[1] * (int32_t)c_s->a1;
  acc += (int32_t)d_s->y[0] * (int32_t)c_s->b1;
  acc += (int32_t)d_s->y[1] * (int32_t)c_s->b2;
  acc >>= 15;
  acc += d_s->y[0] * c_s->c1;
  d_s->y[2] = d_s->y[1];
  d_s->y[1] = d_s->y[0];
  d_s->y[0] = acc;
}


Код
// Фильтр Баттерворта 4 порядка 1000 -> 100; 200  = -30 дб
//
// 1 звено y0 = 0,061885*(x0+x2) + 0,123770*x1 + 1,048600*y1 - 0,296140*y2
// Коэффициенты a0,a1,b1,b2,c1 = 2028, 4056, 1593, -9704, 1
// 2 звено y0 = 0,077956*(x0+x2) + 0,155913*x1 + 1,320910*y1 - 0,632739*y2
// Коэффициенты a0,a1,b1,b2,c1 = 2554, 5109, 10516, -20734, 1
//
int16_t            fltr_c1[5] = {2028, 4056, 1593, -9704, 1},
                fltr_c2[5] = {2554, 5109, 10516, -20734, 1};


Код
    fir2_16((uint8_t *)&lin[cnt_line].x[0],(uint8_t *)fltr_c1);// Первое звено фильтра
    fir2_16((uint8_t *)&lin[cnt_line].y[0],(uint8_t *)fltr_c2);// Второе звено фильтра


Так например. ))
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ivan Kuznetzov   Простейший цифровой ФНЧ   Jan 20 2011, 10:37
- - Demeny   Цитата(Ivan Kuznetzov @ Jan 20 2011, 13:3...   Jan 20 2011, 11:21
- - Ivan Kuznetzov   Demeny, спасибо! функция уже заметно красивей ...   Jan 20 2011, 12:02
|- - AHTOXA   Цитата(Ivan Kuznetzov @ Jan 20 2011, 17:0...   Jan 20 2011, 13:27
- - Ivan Kuznetzov   AHTOXA, спасибо, действительно красивее! В...   Jan 20 2011, 13:55
|- - AHTOXA   Цитата(Ivan Kuznetzov @ Jan 20 2011, 18:5...   Jan 20 2011, 19:16
- - firstvald   Есть метод скользящего среднего, считается так: (...   Jan 20 2011, 14:18
|- - Ivan Kuznetzov   SasaVitebsk, поясните пожалуйста как пользоваться?...   Jan 21 2011, 14:24
|- - demiurg_spb   Пробегало давненько: ЦитатаКодu16_t Yavg; for...   Jan 21 2011, 14:47
|- - SasaVitebsk   Цитата(Ivan Kuznetzov @ Jan 21 2011, 17:2...   Jan 25 2011, 15:04
|- - Ivan Kuznetzov   SasaVitebsk, хотим! чем отличается от этого?   Jan 25 2011, 19:31
- - 777777   Цитата(Ivan Kuznetzov @ Jan 20 2011, 13:3...   Jan 23 2011, 10:58
|- - demiurg_spb   Цитата(777777 @ Jan 23 2011, 13:58) Если ...   Jan 24 2011, 10:20
- - _pv   Цитата(Ivan Kuznetzov @ Jan 20 2011, 16:3...   Jan 23 2011, 13:06
|- - SasaVitebsk   Цитата(_pv @ Jan 23 2011, 16:06) Кстати, ...   Jan 26 2011, 07:20
|- - _pv   Цитата(SasaVitebsk @ Jan 26 2011, 13:20) ...   Jan 26 2011, 15:29
|- - SasaVitebsk   Цитата(_pv @ Jan 26 2011, 18:29) не думаю...   Jan 26 2011, 21:14
- - GetSmart   В Саратове живут суровые профэссианалы   Jan 24 2011, 11:15
|- - 777777   Цитата(GetSmart @ Jan 24 2011, 14:15) В С...   Jan 24 2011, 13:04
- - Ivan Kuznetzov   Внесу ясность в суть дела. Речь идет о цифровом из...   Jan 25 2011, 13:24
|- - firstvald   Цитата(Ivan Kuznetzov @ Jan 25 2011, 16:2...   Jan 26 2011, 11:29
- - firstvald   Навсякий случай: FIR все же постабильнее, хотя и ...   Jan 26 2011, 15:38
- - ig_z   QUOTE (_pv @ Jan 23 2011, 15:06) Кстати, ...   Jan 27 2011, 11:54
|- - ViKo   Цитата(ig_z @ Jan 27 2011, 13:54) Так все...   Jan 28 2011, 08:48
|- - orthodox   Цитата(ViKo @ Jan 28 2011, 10:48) Из прив...   Jan 30 2011, 09:50
|- - ViKo   Цитата(orthodox @ Jan 30 2011, 11:50) Нес...   Jan 30 2011, 10:31
- - SasaVitebsk   Извиняюсь. Действительно IIR.   Jan 28 2011, 11:47
- - Ivan Kuznetzov   Еще вопрос по теме тонометра. Я сейчас использую д...   Jan 29 2011, 16:04
- - =AK=   Цитата(Ivan Kuznetzov @ Jan 20 2011, 21:0...   Jan 30 2011, 09:00
- - firstvald   Не , там напряжение ли или частота - все едино - п...   Jan 30 2011, 09:22
- - ViKo   http://search.analog.com/search/default.as...CG...   Jan 30 2011, 09:39


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

 


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


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