Tuesday 20 March 2018

평균 필터 코드 인 c


샘플 윈도우가 필요없이 C로 이동 평균을 구현할 수 있습니까? 분할 대신 비트 이동을 허용하는 2의 거듭 제곱 인 창 크기를 선택하여 비트를 최적화 할 수 있음을 발견했습니다. 버퍼를 필요로하지 않는 것이 좋을 것입니다. 이전 결과와 새 샘플의 함수로만 새로운 이동 평균 결과를 표현하는 방법이 있습니까? 4 개의 샘플 창을 가로 지르는 예제 이동 평균을 정의하십시오. 새 샘플 eA를 추가하십시오 이동 평균은 재귀 적으로 구현 될 수 있지만, 이동 평균의 정확한 계산을 위해서는 합계에서 가장 오래된 입력 샘플 즉, 예제의 a를 기억해야합니다. 길이 N 이동 평균의 경우 계산할 때 yn은 출력 신호이고 xn 입력 신호 Eq 1은 재귀 적으로 쓰여질 수 있습니다. 그래서 당신은 항상 계산을 위해 샘플 x nN을 기억할 필요가 있습니다. Conrad Turner가 지적한 것처럼, 무한히 긴 지수 창을 대신 사용할 수 있습니다. 과거의 출력 만 put 및 현재 input. but하지만 이것은 표준 가중 이동 평균이 아니라 지수 가중 이동 평균입니다. 여기서 과거의 샘플은 더 작은 가중치를 가지지 만 적어도 이론적으로는 가중치가 점점 더 작아지는 것을 잊지 않습니다 과거의 샘플. 나는 쓴 GPS 추적 프로그램에 대한 개별 항목 메모리없이 이동 평균을 구현했습니다 .1 샘플로 시작하여 현재 평균을 얻으려면 1로 나눕니다. 그런 다음 anothe 샘플을 추가하고 2로 나눕니다. 평균 평균에 도달 할 때까지 계속됩니다. 이후에 매번 새로운 샘플을 추가하여 평균을 구하고 총 평균에서 평균을 제거합니다. 저는 수학자가 아니지만 이것은 좋은 방법 인 것 같았습니다. 그것을해라. 나는 그것이 진짜 수학 남자의 위를 돌릴 것 인 것이라고 상상했다. 그러나 그것은 그것을하는 것으로 받아 들여지는 방법 중의 1 개다. 그리고 그것은 잘 작동한다 단지 더 길게 당신이 따라 가고 싶어하는 것을 따라가는 것은 더 길다는 것을 기억해라. 그 중 대부분은 중요하지 않을 수 있습니다. 시간은 있지만 위성을 따라갈 때, 천천히 가면 흔적이 실제 위치에서 멀리 떨어져 나올 것입니다. 위성과 후미 점 사이에 간격이있을 수 있습니다. 분당 15 번 업데이트 된 길이를 선택했습니다. 적절한 스무딩을 얻고 스무딩 된 트레일 도트를 사용하여 실제 앉은 위치에서 너무 멀리 떨어지지 않도록하십시오. 11 월 16 일 23시에 03. 새 값을 볼 때마다 총 0, 카운트 0을 매번 초기화합니다. 그런 다음 하나의 입력 scanf, 하나는 총 newValue, 하나의 증가 카운트, 하나의 평균 총 카운트를 나눕니다. 이것은 모든 입력에 대해 이동 평균입니다. 마지막 4 개의 입력에 대해서만 평균을 계산하려면 4 개의 입력 변수가 필요합니다. 아마도 각 입력을 오래된 입력 변수에 복사 한 다음 새로운 이동 평균 4 개의 입력 변수의 합계를 4로 나눈 오른쪽 시프트 2는 모든 입력이 양의 값을 가졌을 때 좋을 것입니다. 2 월 3 일 15시 4 분 06 초. 이동 평균이 아닌 총 평균을 실제로 계산합니다. 계산해라. 새로운 입력 샘플의 영향이 더 커지면 더 작아집니다. Hilmar 2 월 3 일 15시 13 분 53. 귀하의 답변 2017 Stack Exchange, Inc. 이 방법은 당분간 향상시킬 수 있음을 알고 있습니다. 하지만 실제로 사용하는 것을 피하고 싶습니다. 검색하고 어떤 적합한 또는 읽을 예제를 찾을 수 없습니다. 기본적으로 데이터 샘플로 가장 최근의 1000 숫자를 사용하여 부동 소수점 스트림의 지속적인 스트림의 이동 평균을 추적하고 싶습니다. 이것을 달성하는 가장 쉬운 방법입니다. 순환 배열, 기하 급수 이동 평균 및보다 간단한 이동 평균을 사용하여 실험 한 결과 순환 배열의 결과가 내 요구에 가장 적합하다는 것을 알았습니다. Jun 12 12 at 4 38. 필요에 따라 간단하게 단순히 누적 변수를 만들고 코드가 각 샘플을 볼 때 코드는 누적기를 새 값으로 업데이트합니다. 0과 1 사이의 상수 알파를 선택하고 이것을 계산합니다. 의 값을 찾으려면 lpha 주어진 샘플의 효과가 약 1000 샘플에 대해서만 지속됩니다. 음, 이것이 내가 여기에 넣었으니, 이것이 실제로 당신에게 적합하다는 것을 실제로 확신하지 못합니다. 문제는 1000 지수 이동 평균 나는 부동 소수점 계산에서 언더 플로우없이 지난 1000 개의 숫자에 평균을 퍼뜨릴 알파가 있는지 확신하지 못합니다. 하지만 30 개의 숫자와 같은 더 작은 평균을 원한다면, 이것은 매우 쉽고 빠른 방법입니다 it. answ 4 월 1 일 4시 1 분 게시물 귀하의 게시물에 지수 이동 평균은 알파가 변수 수 있도록 허용합니다 그래서 이것은 초당 바이트 등 시간축 평균을 계산하는 데 사용할 수 있습니다 마지막 누적 기 업데이트 이후 시간이 더 1 초보다 길면 알파가 1 0이됩니다. 그렇지 않으면 마지막 업데이트 이후 알파가 사용되도록 할 수 있습니다 1000000 jxh 6 월 12 일 at 6 21. 기본적으로 부동 소수점 스트림의 진행중인 스트림의 이동 평균을 추적하려고합니다. 가장 최근의 1000 개의 숫자가 데이터 샘플입니다. e는 아래에 추가 된 요소가 합계를 계산하기 위해 비용이 많이 드는 ON traversal을 피하는 것으로서 요소를 업데이트한다는 것을 의미합니다. Total은 T와 다른 매개 변수로 지원됩니다. 예를 들어 길이가 1000이고 길이가 긴 경우 , char에 대한 int 또는 float s에 대한 double 값입니다. 이것은 numsamples가 INTMAX를 지나칠 수 있다는 점에서 약간의 결함이 있습니다. - 부호없는 long long을 사용하거나 여분의 bool 데이터 멤버를 사용하여 컨테이너 먼저 배열 주위의 numsamples를 주기적으로 채우고 pos. answered와 같은 무언가로 이름을 바꾼다. 5 월 19 일 void operator T sample은 void operator T sample이다. 6 월 8 일 14시 11 분 52 초. oPless ahhh well spotted 실제로 그것은 무효 연산자 T 샘플을 의미하지만 당연히 좋아하는 표기법을 사용할 수 있습니다. 고칠 것입니다. Tony D Jun 8 14 at 14 27. 다른 사람들이 언급했듯이, IIR 무한 임펄스 응답 필터를 고려해야합니다. FIR 유한 i 당신이 지금 사용하고있는 mpulse 응답 필터 더 많은 것이 있지만 언뜻보기 FIR 필터는 방정식이있는 명확한 컨볼 루션과 IIR 필터로 구현됩니다. 마이크로 컨트롤러에서 많이 사용하는 특정 IIR 필터는 단극 저역 통과 필터입니다. 간단한 RC 아날로그 필터에 해당하는 디지털 대부분의 응용 프로그램에는 사용중인 상자 필터보다 우수한 특성이 있습니다. 내가 만난 상자 필터의 대부분의 용도는 디지털 신호 처리 클래스에서주의를 기울이지 않은 사람의 결과입니다. 특정 특성을 필요로하는 결과로 노이즈로 알려진 고주파를 감쇄시키려는 경우 단극 저역 통과 필터가 더 좋습니다. 마이크로 컨트롤러에서 디지털 방식으로 구현하는 가장 좋은 방법은 대개입니다. 필름 - 필트 FF NEW - FILT. FILT는 영구 상태입니다. 이 필터를 계산하는 데 필요한 유일한 영구 변수입니다. NEW는 필터가이 반복으로 업데이트되는 새 값입니다. FF는 필터의 고밀도를 조정하는 필터 비율입니다. 이 알고리즘을 살펴보면 출력이 변경되지 않으므로 FF 0의 필터는 무한히 무겁습니다. FF 1의 경우 출력이 입력을 따라 가기 때문에 실제로 필터가 전혀 없습니다 유용한 값은 다음과 같습니다. 작은 시스템에서는 FF를 1 2 N으로 선택하여 FF로 곱셈을 N 비트만큼 오른쪽 시프트로 수행 할 수 있습니다. 예를 들어, FF는 1 16 일 수 있으며 FF로 곱하면 FF 4 비트 그렇지 않으면이 필터는 하나의 뺄셈과 하나의 덧셈을 필요로합니다. 숫자는 일반적으로 입력 값보다 더 많은 숫자 정밀도를 요구합니다. 아래의 별도 섹션에 나와 있습니다. 일반적으로 AD 읽기는 필요한 것보다 훨씬 빠르게 수행하고 이 필터들은 캐스 케이 딩 (cascaded) 이것은 직렬의 두 RC 필터의 디지털 등가물이며 롤오프 주파수보다 12dB 옥타브 감쇠합니다. 그러나 AD 판독의 경우 일반적으로 시간 영역에서 필터를 볼 때 더 관련이 있습니다 스텝 응답을 알려줍니다. 이것은 측정하는 것이 변화 할 때 시스템이 얼마나 빨리 변화 하는지를 알려줍니다. FF를 선택하고 캐스케이드하는 방법을 결정하는 이러한 필터의 설계를 용이하게하기 위해 필자의 프로그램 필터를 사용합니다. 계단식 필터의 각 FF에 대한 이동 비트 수 및 스텝 응답 및 기타 값을 계산합니다. 실제로 저는 래퍼 스크립트 PLOTFILT를 통해이를 실행합니다. 이것은 CSV 파일을 만드는 FILTBITS를 실행 한 다음 CSV 파일을 플롯합니다. 예를 들어 여기서 PLOTFILT 4의 결과입니다. 4. PLOTFILT에 대한 두 개의 매개 변수는 위에서 설명한 유형의 캐스 케이 딩 된 두 개의 필터가 있음을 의미합니다. 4의 값은 FF로 곱하기를 구현하는 시프트 비트의 수를 나타냅니다. 따라서 두 개의 FF 값은 1입니다 예를 들어, 입력이 순간적으로 변경되면 결합 된 필터의 출력이 새 필터의 90으로 고정됩니다. 값을 60 회 반복하면 95 회 정착 시간을 신경 쓰면 73 회 반복을 기다려야하고 50 회 정착 시간은 26 회 반복해야합니다. 녹색 추적은 단일 전체 진폭 스파이크의 출력을 보여줍니다. 노이즈 제거 단일 샘플이 출력에서 ​​2 5 이상의 변화를 일으키는 것처럼 보이지 않습니다. 파란 흔적은이 필터가 백색 잡음으로 수행하는 것의 주관적인 느낌을주는 것입니다. 이것은 정확히 무엇이 보장되는지를 보장하지 않기 때문에 엄격한 테스트는 아닙니다 PLOTFILT의 실행을 위해 화이트 노이즈 입력으로 선택된 임의의 숫자의 내용이었습니다. 얼마나 많이 부숴지며 얼마나 부드럽습니까? PLOTFILT, FILTBITS 및 기타 유용한 많은 정보를 제공합니다. 물건, 특히 PIC 펌웨어 개발에 대한 자세한 내용은 내 소프트웨어 다운로드 페이지에서 PIC 개발 도구 소프트웨어 릴리스에서 사용할 수 있습니다. 숫자 정밀도에 대한 추가. 나는 주석과 토론에 관심이 있다는 새로운 대답을 보았습니다. 이 필터를 구현하는 데 필요한 비트 수 FF로 곱하면 2 진 소수점 아래에 Log 2 FF 새 비트가 생성됩니다. 작은 시스템에서는 일반적으로 FF가 1 2 N으로 선택되므로이 곱셈은 오른쪽 시프트로 실제로 구현됩니다 따라서 N 값은 보통 고정 소수점 정수입니다. 이것은 프로세서의 관점에서 수학을 변경하지 않습니다. 예를 들어, 10 비트 AD 판독 값과 N 4 FF 1 16을 필터링하는 경우, 10 비트 정수 미만의 4 분수 비트 AD 판독 10 비트 AD 수치 때문에 16 비트 정수 연산을 수행하는 대부분의 프로세서이 경우에도 정확히 동일한 16 비트 정수 연산을 수행 할 수 있지만 AD 판독 값은 4 비트 씩 왼쪽으로 이동합니다. 프로세서는 차이를 알고 있지 않으며 전체 16 비트 정수에서 수학을 수행 할 필요가 없습니다. 12 4 개의 고정 소수점 또는 참 16 비트 정수 16 0 고정 소수점으로 간주되는지 여부에 관계없이 작동합니다. 당신은 N 개의 비트를 각 필터 극을 추가해야합니다. 위의 예에서 2의 두 번째 필터는 정보를 잃지 않기 위해 10 4 4 18 비트를 가져야합니다. 실제로 8 비트 컴퓨터에서 24 비트 값을 사용한다는 것을 의미합니다. 기술적으로는 2의 두 번째 폴만 더 넓은 값을 필요로 할 것이지만 펌웨어의 단순성을 위해 보통 필터의 모든 폴에 대해 동일한 표현과 코드를 사용합니다. 일반적으로 하나의 필터 극 작업을 수행하는 서브 루틴이나 매크로를 작성합니다. 서브 루틴이나 매크로가 특정 프로젝트에서 더 중요한지 여부에 따라 서브 루틴이나 매크로가 달라집니다. 어느 쪽이든, 저는 FILT를 업데이트하는 서브 루틴 매크로에 NEW를 전달하기 위해 스크래치 상태를 사용합니다. 새로운 스크래치 상태 NEW이 기능은 한 폴의 업데이트 된 FILT가 다음 폴의 NEW이므로 다중 폴을 쉽게 적용 할 수 있습니다. 서브 루틴 일 때 포인터가 FILT를 가리키는 것이 유용합니다. 업데이트 된 함수가 여러 번 호출되면 메모리의 연속 필터에서 서브 루틴이 자동으로 작동합니다. 매크로를 사용하면 각 반복에서 연산을 수행 할 주소를 전달하기 때문에 포인터가 필요하지 않습니다. 코드 예제. 여기에 예를 들어 PIC 18에서 설명한 매크로의 예입니다. 여기에는 PIC 24 또는 dsPIC 30 또는 33에 대한 유사한 매크로가 있습니다. 이 두 예제는 내 PIC 어셈블러 전 처리기를 사용하여 매크로로 구현됩니다. 매크로 시설에서. clabacchio 언급 했어야 할 또 다른 문제는 펌웨어 구현입니다. 한 번만 단극 로우 패스 필터 서브 루틴을 작성한 다음 여러 번 적용 할 수 있습니다. 실제로 필자는 보통 메모리에 포인터를 가져 와서 서브 루틴을 작성하는 등의 서브 루틴을 작성합니다 포인터를 연속적으로 쉽게 호출하여 다극 필터를 구현할 수 있습니다. Olin Lathrop Apr 20 12 at 15 03.1 답변을 많이 보내 주셔서 감사합니다. 이 IIR 필터를 사용하기로 결정했지만이 필터는 다음과 같이 사용되지 않습니다. Standard LowPass Filter. 이 값은 하드웨어에 따라 매우 다른 차원이되기 때문에 카운터 값의 평균을 구하고 특정 범위의 변경을 감지해야합니다. 이러한 하드웨어에 반응하려면 평균을 취하고 싶었습니다. 특정 변경 사항은 자동으로 sensslen 5 월 21 12 12 06. 당신은 평균 2,4,8,16,32 등 평균에 항목의 두 숫자의 힘으로 살 수 있다면 다음 나누기 쉽고 효율적으로 할 수 있습니다 그것은 비트 시프트로 할 수 있기 때문에 전용 분할없이 낮은 성능 마이크로 각각의 시프트 권리는 두 eg. The OP의 한 권력이다 그는 PIC16 및 그의 반지 버퍼에 대한 메모리 나누어 두 문제가 있다고 생각이 답변은 어렵지 않습니다. 메모리 문제는 해결하지 못했지만 SE 시스템은 부분 응답을 허용하고 사용자는 각 답변에서 무언가를 취하거나 다른 대답을 편집하고 결합 할 수 있습니다. 다른 대답 중 일부는 나누기 연산이 필요하기 때문에 그들은 PIC16 Martin 4 월 20 일 12시 13 분 01에 효율적으로 이것을 달성하는 방법을 보여주지 않기 때문에 비슷하게 불완전합니다. 다운 샘플링을하지 않으면 적은 메모리 요구량으로 진정한 이동 평균 필터 일명 boxcar 필터에 대한 해답이 있습니다. 계단식 적분기 - 콤 필터 (cascaded integrator-comb filter)라고 불리는 CIC 아이디어는 시간차가있는 적분기를 가지고 있으며, 주요 메모리 절약 장치는 다운 샘플링을 통해 이브를 저장하지 않아도된다는 것입니다 적분기의 값 다음 의사 코드를 사용하여 구현할 수 있습니다. 유효 이동 평균 길이는 decimationFactor statesize이지만 statesize 샘플 만 유지하면됩니다. statesize 및 decimationFactor가 2의 제곱수이면 분명히 더 나은 성능을 얻을 수 있습니다. 포스트와 필자는 이동 평균 필터를 사용하기 전에 항상 간단한 IIR 필터를 고려해야한다는 것에 동의한다. 박스 카 필터의 주파수 - 널을 필요로하지 않는다면 1 극 또는 2 극 로우 패스 필터가 잘 작동 할 것입니다. 반면에 샘플링 속도가 높은 입력을 받아 데시 메이션을 목적으로 필터링하고 저속 프로세스에서 사용하기 위해 평균화하면 CIC 필터 특히 stateize 1을 사용하고 이전의 적분기 값 하나만 있으면 ringbuffer를 피할 수 있다면 특히 찾고있는 것일 수 있습니다. 첫 번째 ord를 사용한 수학에 대한 심층 분석 erlin 필터는 Olin Lathrop이 이미 Digital Signal Processing 스택 교환기에서 설명한 것입니다. 예쁜 그림이 많이 포함되어 있습니다. 이 IIR 필터의 방정식은 정수입니다. 다음 코드를 사용하는 나누기는 정수로만 구현할 수 있습니다. 일부 디버깅이 필요할 수도 있습니다. 이 필터는 알파 값을 1 K로 설정하여 마지막 K 샘플의 이동 평균을 근사합니다. 앞의 코드에서 BITS를 LOG2 K로 설정하여이를 수행합니다. 즉 K 16의 경우 BITS를 4로 설정하고 K의 경우 4는 BITS를 2로 설정합니다. 필요한 경우 여기에 코드를 입력하고 수정하면됩니다. 대답 6 월 23 일 12시 4 분 04 초. 단극 저역 통과 필터 이동 평균 cutoff frequency CutoffFrequency 매우 간단하고, 빠르며, 훌륭하게 작동하며, 메모리 오버 헤드가 거의 없습니다. 모든 변수는 newInput에 전달 된 것을 제외하고는 필터 함수를 벗어나는 범위를가집니다. 참고 이것은 단일 단계 필터입니다. 여러 단계를 함께 계단식으로 선명도 필터 하나 이상의 스테이지를 사용하는 경우, DecayFactor를 보정하기 위해 Cutoff-Frequency와 관련하여 조정해야합니다. 그리고 분명히 필요한 것은 두 라인을 어디에나 배치하고, 자신의 기능을 필요로하지 않습니다. 이 필터에는 ramp-up 시간은 입력 신호의 평균을 나타냅니다. ramp-up 시간을 우회해야 할 경우 MovingAverage를 0 대신 newInput의 첫 번째 값으로 초기화하고 첫 번째 newInput이 이상 값이되지 않았 으면합니다. CutoffFrequency SampleRate는 0에서 0 사이의 범위를가집니다. 5 DecayFactor는 0과 1 사이의 값입니다. 보통 1에 가깝습니다. 단 정밀도 수레는 대부분의 경우 충분하지만 두 배를 선호합니다. 정수를 사용해야하는 경우 DecayFactor와 Amplitude Factor를 분수 정수로 변환합니다. 분자는 정수로 저장되고 분모는 2의 정수 배수이므로 필터 루프에서 분 할하지 않고 분모로 오른쪽으로 비트 시프트 할 수 있습니다. For 예를 들어, DecayFactor 0 99이고 정수를 사용하려는 경우 DecayFactor 0을 설정할 수 있습니다. 99 65536 64881 그리고 필터 루프에서 DecayFactor를 곱하면 언제든지 결과를 바꿀 수 있습니다. 자세한 내용은 다음을 참조하십시오. 재치 필터에 대한 19 장. 이동 평균 패러다임의 경우 DecayFactor 및 AmplitudeFactor를 사용자의 요구와 더 관련이있는 것으로 설정하는 다른 접근 방식으로 이전 6 개 항목 에테르, 이산 적으로, 당신은 6 개의 아이템을 추가하고 6으로 나누기 때문에, AmplitudeFactor를 1 6으로, DecayFactor를 1 0으로 설정할 수 있습니다 - AmplitudeFactor. answered 5 월 14 일 12시 22 분 55. 다른 누구도 유틸리티에 대해 철저히 주석을 달았습니다 IIR 대 FIR 및 2의 제곱 부분에 대해서 구현 세부 사항을 알려 드리고자합니다 아래는 FPU가없는 소형 마이크로 컨트롤러에서 잘 작동합니다 곱셈은 없으며 N을 2의 제곱으로 유지하면 모든 부분 단일 사이클 비트 시프 팅입니다. 기본 FIR 링 버퍼는 마지막 N 값의 실행 버퍼를 유지하고 버퍼의 모든 값의 SUM을 실행합니다. 새 샘플이 들어올 때마다 SUM에서 버퍼의 가장 오래된 값을 빼십시오 , 새 샘플로 바꾸고, SUM에 새 샘플을 추가하고, SUM N을 출력합니다. 수정 된 IIR 링 버퍼 마지막 N 개 값의 SUM을 계속 실행합니다. 새 샘플이 들어올 때마다 SUM - SUM N에 새로운 샘플, 출력 SUM N. answered 8 월 28 일 13시 13 분 45. 만약 내가 올바르게 읽는다면, IIR 필터는 빼는 값이 아니지만 가장 오래된 값은 빠져 나가고 있지만 이전 값의 평균값입니다. 1 차 IIR 필터는 확실히 유용 할 수 있지만 출력 모든주기 신호에 대해 동일합니다 10KHz 샘플 속도에서 20 스테이지 박스 필터에 100Hz 구형파를 공급하면 20 개의 샘플에 대해 균일하게 상승하고 30 일 동안 높게 나타나며 20 개의 샘플에 대해 균일하게 떨어지고 낮게 나타나는 신호를 생성합니다 30 A 1 차 IIR 필터 수퍼 캣에 대해 8 월 28 일 13시 15 분 31 초. 급격히 상승을 시작하고 입력 최대 근처가 아닌 점차적으로 떨어지는 웨이브를 얻을 때 급격히 떨어지기 시작하고 점차적으로 입력에서 가깝게 떨어지지만 최소 매우 다른 행동 supercat Aug 28 13 at 15 32. 하나의 간단한 이동 평균은 유용 할 수도 있고 유용하지 않을 수도 있습니다. IIR 필터를 사용하면 상대적으로 적은 수의 calc로 멋진 필터를 얻을 수 있습니다. 설명하는 FIR은 시간의 직사각형 - 주파수 - 그리고 당신은 사이드 로브를 관리 할 수 ​​없습니다. 그것은 좋은 대칭 튜너 블 FIR을 만들기 위해 정수 곱셈을 던질만한 가치가 있습니다. 만약 당신이 시계 진드기를 남겨 둘 수 있다면 Scott Seidman Aug 29 13 13 50. ScottSeidman No FIR의 각 스테이지가 단순히 그 스테이지에 대한 입력의 평균값과 이전에 저장된 값을 출력하고 하나가 숫자 범위를 가지면 입력을 저장하는 경우 multiplies가 필요하며 평균보다 합계를 사용할 수 있는지 여부 상자 필터보다 더 나은 응용 프로그램에 따라 1ms 총 지연 상자 필터의 단계 응답, 예를 들어, 불쾌한 d2 dt 스파이크있을 때 입력 변경 및 다시 1ms 나중에 있지만 가능한 최소있을 것입니다 dt는 총 1ms 지연을 가진 필터입니다. supercat Aug 29 13 at 15 mikeselectricstuff가 말하길, 정말로 메모리 요구량을 줄여야한다면, 임펄스 응답이 직사각형 펄스가 아닌 지수 함수가되는 것을 염두에 두지 마십시오. 기하 급수적으로 움직이는 애비뉴로 갈거야. 분노 필터 나는 그것들을 광범위하게 사용한다. 그 유형의 필터로는 어떤 버퍼도 필요 없다. 과거의 샘플을 저장해야한다. 하나 뿐이다. 따라서, 메모리 요구량은 N의 인자로 줄어든다. 그 부분에 대한 곱셈 부동 소수점 연산에 액세스 할 수 있다면 부동 소수점 곱셈 사용 그렇지 않으면 정수 곱셈 및 오른쪽으로 이동 그러나 우리는 2012 년에 있으며 컴파일러와 MCU를 사용하여 부동 소수점 숫자로 작업 할 수 있습니다. 더 많은 메모리가 효율적이고 빠르지 만 순환 버퍼에서 항목을 업데이트하지 않아도됩니다. 지수 적 임펄스 응답이 자연의 동작 방식과 잘 일치하기 때문에 자연스러운 것이라고 말할 수 있습니다. 대부분의 경우. inly와 supercat에 의해 거의 만져졌지만 다른 사람들에 의해 무시 된 것처럼 IIR 필터에 관한 한 가지 문제는 반올림이 N을 가정 할 때 어떤 부정확하고 잠재적 인 바이어스 절단을 초래한다는 것이다. 2의 거듭 제곱이며 정수 연산 만 사용하면 시프트 권한으로 인해 새 샘플의 LSB가 체계적으로 제거됩니다. 즉, 시리즈가 얼마나 오래 지속될 수 있는지를 평균값으로 간주하지 않습니다. 예를 들어, 시리즈 8,8,8,8,7,7,7,7,6,6을 줄이고 처음에는 평균이 실제로 8이라고 가정합니다. 주먹 7 샘플은 필터 강도에 관계없이 평균 7을 가져옵니다. 6 층 이야기 등등. 이제는 세리가 올라간다는 것을 생각해보십시오. 평균은 변화가 생길 때까지 평균 7에 머무를 것입니다. 물론, 1 2 N 2를 추가하여 바이어스를 보정 할 수는 있지만, 이 경우 정밀도 문제를 실제로 해결하지 못합니다. 감소하는 시리즈는 샘플이 8-1 2 N 2 일 때까지 영원히 머무를 것입니다. 예를 들어 N 4의 경우 0보다 큰 샘플은 평균을 유지합니다. 잃어버린 LSB의 누적기를 보유하는 것을 암시합니다. 그러나 코드를 준비 할 정도로 멀리 만들지는 않았습니다. 예를 들어 7,9,7,9가 평균 8 일 때와 같은 일련의 다른 사례에서 IIR 전력에 해를 끼치 지 않을지 확신 할 수 없습니다. Olin, 2 단계 캐스케이드에는 몇 가지 설명이 필요합니다. 각 반복에서 첫 번째 결과의 두 번째 값으로 평균값 2 개를 유지한다는 의미입니까?

No comments:

Post a Comment