데이터 필터 링 알고리즘 집합

52586 단어 알고리즘
데이터 처 리 를 하려 면, 네트워크 자원 을 이용 하여 각종 필터 방법 을 정리 하여 나중에 찾 아 볼 수 있 도록 해 야 한다.
글 목록
  • 1. 제한 폭 필터 법
  • 2. 중위 치 필터 법
  • 3. 산술 평균 필터 법
  • 4. 중위 치 평균 필터 법 (2, 3 결합)
  • 5. 제한 폭 평균 필터 법 (1, 3 결합)
  • 6. 전달 평균 필터 법
  • 7. 가중 전달 평균 필터 법 (6 - 개선 판)
  • 8. 소 거 필터 법
  • 9. 1 단계 지연 필터 법
  • 10. 칼 만 필터
  • 11. 기타 필터
  • (1), IIR 디지털 필터 (Infinite Impulse Response Filter)
  • (2), FIR 디지털 필터 (Finite Impulse Response Filter)
  • 1. 제한 폭 필터 법
    실현 절차:
  • 경험 법 에 따라 최대 편차 E 를 선택한다.
  • |value_now - value_before| <= E,value_now 유효 합 니 다. 그렇지 않 으 면 무효 이 며 버 립 니 다. 마지막 으로 valuenow = value_before。

  • 실행 프로그램:
    #define E 10    //value     90~110
    int value_init = 100;
    int filter(int value_now)
    {
           if ((value_now - value_before > E) || (value_before - value_now) > E)
           {
                  return value_before;
           }
           return value_now;
    }
    

    필터 장단 점: 장단 점: 우연 한 오 차 를 극복 할 수 있 습 니 다.부족: 주기 적 인 방 해 를 억제 할 수 없습니다.평활 도 차.
    2. 중위 값 필터 법
    실현 절차:
  • 연속 샘플링 N 회 (N 은 홀수)
  • 정렬 (정렬 알고리즘 선택)
  • 중간 값 만 취하 기
  • 실행 프로그램:
    #define N 5     //                  
    int filter(void)
    {
           int *buf = (int*)malloc(N * sizeof(int));
           char count, i, j, temp;
           for (count = 0; count < N; count++)
           {
                  buf[count] = get_val(); //       
                  delay();    //    
           }
           for (j = 0; j<N - 1; j++)        //      
           {
                  for (i = 0; i<N - j - 1; i++)
                  {
                         if (buf[i]>buf[i + 1])
                         {
                               temp = buf[i];
                               buf[i] = buf[i + 1];
                               buf[i + 1] = temp;
                         }
                  }
           }
           freebuf);       //     
           return buf[(N - 1) / 2];         //     
    }
    

    필터 의 장단 점: 장단 점: 우연 한 오 차 를 극복 할 수 있 습 니 다.천천히 변화 하 는 데이터 에 좋 은 필터 효과 가 있다.부족: 빠르게 변화 하 는 데이터 에는 적용 되 지 않 습 니 다.
    3. 산술 평균 필터 법
    실현 절차:
  • N 개의 데 이 터 를 추출 하여 평균 값 N 대 -- > 평활 도가 높 고 민감 도가 낮은 N 소 -- > 평활 도가 낮 으 며 민감 도가 높 은 보통, 유량 N = 12, 압력 N = 4, 액면, N = 412, 온도 N = 14
  • 실행 프로그램:
    #define N 10
    int filter(void)
    {
           int sum = 0, count;
           for (count = 0; count < N; count++)
           {
                  sum += get_val();    //        
                  delay();
           }
           return (sum / N);
    }
    

    필터 의 장단 점: 장점: 일반적으로 무 작위 방 해 를 가 진 신 호 를 필터 링 하 는 데 적용 되 며 신 호 는 이 평균치 부근 에서 상하 로 변동 한다.부족: 측정 속도 가 느 리 거나 데이터 계산 이 빠 른 실시 간 제어 에 적용 되 지 않 습 니 다.실행 메모 리 를 낭비 하 다.
    4. 중위 치 평균 필터 법 (2, 3 결합)
    실현 절차:
  • N 개의 데 이 터 를 샘플링 하고 정렬
  • 배열 의 머리 와 꼬리 를 제거 합 니 다 (최대 최소 치 제거)
  • 계산 (N - 2) 개수 의 평균 수
  • 실행 프로그램:
    #define N 12
    int get_val();		//         
    int filter()
    {
           char count, i, j;
           int buf[N];
           int sum = 0, temp;
           for (count = 0; count < N; count++)
           {
                  buf[count] = get_val();//     
                  delay();
           }
           for (i = 0; i < N - 1; i++)      //    
           { 
                  for (j = 0; j < N - j - 1; j++)
                  {
                         if (buf[i] > buf[i + 1])
                         {
                               temp = buf[i];
                               buf[i] = buf[i+1];
                               buf[i + 1] = temp;
                         }
                  }
           }
           for (count = 1; count < N - 1; count++)
           {
                    //         ,                 
                  sum += buf[count];   
           }
           return (sum / (N - 2));
    }
    

    필터 의 장단 점: 장단 점: 우연 한 펄스 성 방해;그 로 인 한 샘플링 값 편차 제거 가능;주기 적 인 간섭 에 좋 은 억제 작용 을 한다.평활 도가 높다.고주파 진동 에 적합 한 시스템.부족: 실행 메모리 낭비.
    5. 제한 폭 평균 필터 법 (1, 3 결합)
    실현 절차:
  • 데 이 터 를 제한 하고 효과 적 인 데이터 에 대해 평균 치 를 구한다.

  • 실행 프로그램:
    #define E 10         //     
    #define N 12        //      
    char value_init = 100;  //     
    char temp;
    char getval();          //         
    char filter(void)
    {
    	char i, value_now, value_before, sum, count = 0;
    	//count:             
    	char *buf = (char*)malloc(N * sizeof(char));
    	while (1)//         
    	{
    		temp = getval();
    		if ((temp - value_init >E) || (temp - value_init <E))
    		{
    			 temp = getval();
    			 count++;
    			 if (count == 5)
               {
    				 buf[0] = value_init;
    				 break;
    			  }
    	    }
    		else
    		{
    			buf[0] = temp;            //            
    			break;
    		}
    	}
    	for (i = 1; i < N; i++)     //        
    	{
    		value_now = getval();     //            
    		if ((value_now - buf[i - 1]) > E || (buf[i - 1] - value_now) > E)
    		{
    			buf[i] = buf[i - 1];        //          
    		}
    		else
    			buf[i] = value_now;           //      
    	}
    	for (i = 0; i < N; i++)
    	{
    		buf[i] = buf[i + 1];
    		sum += buf[i];
    	}
    	return (sum / N);
    }
    

    필터 의 장단 점: 장단 점: 제한 폭 + 필터 의 장점.부족: 실행 메모리 낭비.
    6. 전달 평균 필터 법
    실현 절차:
  • N 개의 데 이 터 를 (FIFO) 대기 열 로 보고 샘플링 한 데 이 터 를 가장 먼저 대기 열 에 들 어간 데 이 터 를 교체 한 다음 에 평균 값 을 구한다.

  • 실행 프로그램:
    #define N 12
    int buf[N];         //    ,  N   
    static char i = 0;
    int get_val();
    int filter(void)
    {
           char count;
           int sum = 0;
           if (i == N) i = 0; 
           //         ,                        (FIFO)
           buf[i++] = get_val();
           for (count = 0; count < N; count++)
                  sum += buf[count];
           return(sum / N);
    }
    

    필터 의 장단 점: 장점: 주기 적 인 간섭 에 좋 은 억제 작용 을 하고 평활 도가 높다.고주파 진동 에 적용 되 는 시스템.부족: 감도 가 낮 음;우연히 나타 난 펄스 성 간섭 에 대한 억제 작용 이 비교적 떨어진다.펄스 방해 로 인 한 샘플링 편차 제거 가 쉽 지 않다.펄스 방해 가 비교적 심각 한 경우 에는 적용 되 지 않 는 다.실행 메모 리 를 낭비 하 다.
    7. 가중 전달 평균 필터 법 (6 - 개선 판)
    실현 절차:
  • 현재 시각 에 가 까 울 수록 권 리 는 커진다.(새로운 샘플링 값 을 주 는 권 계수 가 클 수록 민감 도 는 높 지만 신호 평활 도 는 낮다.)
  • 실행 프로그램:
    #define N 12
    const char coe[] = { 1,2,3,4,5,6,7,8,9,10,11,12 };      //     
    const char sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12;//  
    //              
    char filter()
    {
           char i;
           char value_buf[N];
           int sum = 0;
           for (i = 0; i < N; i++)
           {
                  value_buf[i] = get_val();//      
                  delay();
           }
           for (i = 0; i < N; i++)
                  sum += value_buf[i] * coe[i];
           return sum / sum_coe;
    }
    

    필터 의 장단 점: 장단 점: 비교적 큰 순 체 후 시간 상수 가 있 는 제어 대상 에 적용 된다.샘플링 주기 가 비교적 짧 은 시스템.부족: 순 체 후 시간 상수 가 비교적 작고 샘플링 주기 가 비교적 길다.변화 가 느 린 신 호 는 시스템 이 현재 방 해 받 는 심각 성 을 신속하게 반응 하지 못 하고 필터 효과 가 떨어진다.
    8. 떨 림 필터 법
    실현 절차:
  • 필터 계산 기 를 설정 합 니 다.
  • 매번 샘플링 값 을 현재 유효 값 과 비교 합 니 다. 샘플링 값 = = 현재 유효 값 이 있 으 면 이전 유효 값 을 되 돌려 줍 니 다.만약 샘플링 값! =현재 유효 치 는 계수기 + 1 이 며 계수기 가 > = 상한 N (넘 침) 인지 판단 합 니 다.계수기 가 넘 치면 이번 값 을 현재 유효 값 으로 바 꾸 고 계수 기 를 청소 합 니 다.

  • 실행 프로그램:
    #define N 12
    char get_val();
    char filter()
    {
           char count = 0;
           char value_now;
           char value_before = get_val();       //         
           while (value_now != value_before)
           {
                  value_before = value_now;
                         count++;
                  if (count >= N)
                         return value_now;
                  delay();//    
                  value_now = get_val();//         
           }
           return value_before;
    }
    

    필터 의 장단 점: 장단 점: 변화 가 느 린 피 측 매개 변수 에 대해 비교적 좋 은 필터 효과 가 있 으 며 임계값 부근 컨트롤 러 의 반복 적 인 개폐 / 닫 기 점프 나 모니터 의 수치 떨 림 을 피 할 수 있 습 니 다.부족: 빠르게 변화 하 는 매개 변수 에 적합 하지 않 습 니 다.계수기 에 넘 치 는 샘플링 값 이 방해 값 이 라면 방해 값 을 유효 값 으로 가 져 옵 니 다.
    9. 1 단계 지연 필터 법
    실현 절차:
  • 1 단계 저 통 필터 법 은 이번 샘플링 값 과 지난번 필터 출력 값 을 가중 시 켜 효과 적 인 필터 값 을 얻어 출력 이 입력 에 피드백 작용 을 하도록 한다.

  • 실행 프로그램:
    #define thresholdValue 10           //   
    #define N 10                            //   
    float dataArr[N] = { 99,102,108,89,98,86,89,90,93,105 };        //       
    char flag0 = 0, flag1 = 0;                  //              
    float abs(float first, float second)        //        
    {
           float abs_val;
           if(first>second)
           {
                  abs_val = first - second;
                  flag1 = 0;
           }
           else
           {
                  abs_val = second - first;
                  flag1 = 1;
           }
           return abs_val;
    }
    
    void filter(void)
    {
           char i = 0, filterCount = 0, coeff = 0;  //filterCount:        coeff:    
           float Abs = 0.00;
           for (i = 1; i < N; i++)
           {
                  Abs = abs(dataArr[i - 1], dataArr[i]);
                  if (!flag1^flag0)     //  
                  {
                         filterCount++;
                         if (Abs >= thresholdValue)
                         {
                               filterCount += 2;
                         }
                         if (filterCount >= 12)
                               filterCount = 12;
                         coeff = 20 * filterCount;   //        
                  }
                  else//  
                         coeff = 5;
                  //      
                  if (flag1 == 0)//         
                         dataArr[i] = dataArr[i - 1] - coeff*(dataArr[i - 1] - 
    dataArr[i]) / 256;
                  else
                         dataArr[i] = dataArr[i - 1] + coeff*(dataArr[i - 1] - 
    dataArr[i]) / 256;
                  filterCount = 0;
                  flag0 = flag1;
           }
    }
    
    

    필터 의 장단 점: 장점: 주기 적 인 간섭 에 좋 은 억제 작용 을 한다.파동 주파수 가 비교적 높 은 장소 에 적용 된다.부족: 위상 지연;감도 가 낮다.지연 정 도 는 a 값 의 크기 에 달 려 있다.필터 주파수 가 샘플링 주파수 의 1 / 2 보다 높 은 간섭 신 호 를 제거 할 수 없다.
    10. 칼 만 필터
    실현 절차:
  • 실시 간 으로 협 방 차 를 바 꾸 어 시스템 을 수정 한다.

  • 실행 프로그램:
    /*------------------------------------------------------------------------------
    |  Kalman Filter equations                                           
    |                                                                        
    |  state equation                                                  
    |  x(k) = A·x(k-1) + B·u(k) + w(k-1)                                
    |          B·u(k)=0(            )    
    |                                                                                   
    |  observations equation    (       )         
    |  z(k) = H·x(k) + y(k)                          
    |                                                 
    |  prediction equations                                     
    |  x(k|k-1) = A·x(k-1|k-1) + B·u(k)               
    |  P(k|k-1) = A·P(k-1|k-1)·A^T + Q                
    |                                                 
    |  correction equations                                     
    |  K(k) = P(k|k-1)·H^T·(H·P(k|k-1)·H^T + R)^(-1)  
    |  x(k|k) = x(k|k-1) + K(k)·(z(k) - H·x(k|k-1))   
    |  P(k|k) = (I - K(k)·H)·P(k|k-1)     
    ------------------------------------------------------------------------------*/
    
    /*
    x P      ,         ;K      ;
    Q R               。
    x P          ,                    。
        ,P      0,               
    R       ,           ,    
    (Q R         ,      ,     )
    Q:    ,Q  ,      ,       
    R:    ,R  ,      ,       
    */
    
    #define KalmanQ 0.000001
    #define KalmanR 0.0004
    
    static double KalmanFilter(const double ResourceData, double ProcessNoiseQ, double MeasureNoiseR)
    {
           double R = MeasureNoiseR;
           double Q = ProcessNoiseQ;
           static double x_last=-60;
           double x_mid = x_last;
           double x_now;
           static double p_last=1;
           double p_mid;
           double p_now;
           double K;
           x_mid = x_last;                        //x_last=x(k-1|k-1),x_mid=x(k|k-1)
           p_mid = p_last;                        //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=    
           K = p_mid / (p_mid + R);
           x_now = x_mid + K*(ResourceData - x_mid);
           p_now = (1 - K)*p_mid + Q;
           p_last = p_now;
           x_last = x_now;
           return x_now;
    }
    

    필터 의 장단 점: 장점: 센서 소음 과 과정 소음 등 을 처리 할 수 있다.부족: 운동 목표 가 장시간 가 려 질 때 목표 추적 을 잃 어 버 리 는 경우 가 있 습 니 다.
    11. 기타 필터
    (1), IIR 디지털 필터 (Infinite Impulse Response Filter)
    재 귀 필터, 즉 IIR 디지털 필터 로 말 그대로 피드백 이 있 습 니 다.
    (2) FIR 디지털 필터 (Finite Impulse Response Filter)
    유한 단위 충격 응답 필터 라 고도 부 르 며 비 재 귀 형 필터 라 고도 부 르 며 디지털 신호 처리 시스템 에서 가장 기본 적 인 부품 으로 임 의 주파수 특성 을 확보 하 는 동시에 엄격 한 선형 주파수 특성 을 가 질 수 있 으 며 단위 샘플링 응답 은 유한 하고 길 기 때문에 여과 기 는 안정 적 인 시스템 이다.따라서 FIR 필 터 는 통신, 이미지 처리, 패턴 인식 등 분야 에서 광범 위 하 게 응용 되 고 있다.선형 위상 이 있 고 디자인 하기 쉽다 는 장점 이 있 지만 IIR 필터 에 비해 더 많은 매개 변수 가 필요 하기 때문에 DSP 는 더 많은 계산 시간 이 필요 하고 DSP 의 실시 간성 에 영향 을 미친다.
    성능 적 으로 IIR 필터 전달 함 수 는 영점 과 극점 두 조 의 조절 가능 한 요 소 를 포함 하고 극점 에 대한 유일한 제한 은 단위 원 내 에 있다.따라서 비교적 낮은 단계 로 높 은 선택성 을 얻 을 수 있 고 사용 하 는 저장 장치 가 적 으 며 계 산 량 이 적 고 효율 이 높다.그러나 이 고 효율 은 상위 의 비 선형 을 대가 로 한다.선택성 이 좋 을 수록 위상 비 선형 이 심각 하 다.FIR 필터 전달 함수 의 극점 은 원점 에 고정 되 어 움 직 일 수 없 으 며 영점 위 치 를 바 꾸 어 성능 을 바 꿀 수 밖 에 없다.따라서 높 은 선택성 에 도달 하려 면 반드시 높 은 단 계 를 사용 해 야 한다.같은 필터 설계 기준 에 대해 FIR 필터 가 요구 하 는 단 계 는 IIR 필터 보다 5 - 10 배 높 을 수 있 으 며 그 결과 원가 가 높 고 신호 지연 도 비교적 크다.선형 위상 요구 에 따라 IIR 여과 기 는 반드시 전체 네트워크 를 추가 하여 위상 보 정 을 해 야 하 며, 마찬가지 로 필터 의 단계 와 복잡성 을 크게 증가 시 켜 야 한다.반면 FIR 필 터 는 엄격 한 선형 위상 을 얻 을 수 있다.
    구조 적 으로 IIR 필 터 는 반드시 귀속 구 조 를 이용 하여 극점 을 설정 하고 극점 의 위 치 를 단위 원 내 에 확보 해 야 한다.유한 한 글자 의 장 효 응 으로 인해 연산 과정 에서 계 수 를 반올림 처리 하여 극점 의 오프셋 을 일 으 킬 것 이다.이런 상황 은 때때로 안정성 문 제 를 일 으 키 고 기생 진동 까지 일으킨다.반면 FIR 필 터 는 비 재 귀 구 조 를 사용 하면 이론 적 으로 나 실제 적 인 유한 정밀도 연산 에서 안정성 문제 가 존재 하지 않 기 때문에 주파수 특성 오차 도 적다.또한 FIR 필 터 는 빠 른 푸 리 엽 변환 알고리즘 을 사용 할 수 있 으 며 같은 단계 의 조건 에서 연산 속도 가 훨씬 빠르다.
    또한 IIR 필 터 는 디자인 이 간단 하지만 주로 세그먼트 상수 특성 을 가 진 필 터 를 디자인 하 는 데 사용 된다. 예 를 들 어 저 통, 고역, 대역 통과 대역 저항 등 은 아 날로 그 필터 의 구 조 를 벗 어 나 지 못 한다.한편, FIR 필 터 는 훨씬 유연 해 야 한다. 특히 그 는 디지털 마이크로미터 나 힐 포 터 변환기 등 특수 한 응용 에 적응 하기 쉬 워 서 더욱 큰 적응성 과 넓 은 응용 분 야 를 가진다.
    위의 간단 한 비 교 를 통 해 IIR 과 FIR 필터 가 각각 장점 이 있 기 때문에 실제 응용 할 때 여러 가지 측면 에서 고려 하여 선택해 야 한다.사용 요 구 를 보면 위상 에 대한 요구 가 민감 하지 않 은 장소, 예 를 들 어 언어 통신 등 은 IIR 을 선택 하 는 것 이 적당 하 다. 그러면 경제적 이 고 효율 적 인 특징 을 충분히 발휘 할 수 있다.이미지 신호 처리, 데이터 전송 등 파형 으로 정 보 를 가 진 시스템 은 선형 위상 에 대한 요구 가 높다.조건 이 있 으 면 FIR 필 터 를 사용 하 는 것 이 좋다.물론 실제 응용 에 서 는 더 많은 요 소 를 고려 해 야 할 수도 있다.
    2. IIR 과 FIR 을 막론하고 단계 가 높 을 수록 신호 지연 이 크다.또한 IIR 필터 에서 단계 가 높 을 수록 계수 의 정밀도 요구 가 높 습 니 다. 그렇지 않 으 면 유한 한 글자 길이 의 오 차 를 초래 하여 극점 을 단위 원 밖으로 옮 기기 쉽 습 니 다.따라서 단계 선택 에 있어 서 는 종합 적 으로 고려 된다.
    참조 주소: 10 대 필터 링 알고리즘 프로그램 대전 (Arduino 정제 오류 없 음) How a Kalman filter works, in pictures IIR 필터 와 FIR 필터 의 차이 점 및 연계 zz IIR 과 FIR 필터 의 비교 및 차이 점

    좋은 웹페이지 즐겨찾기