Thursday 1 March 2018

이동 평균 필터 인 matlab에 코드


수요일 작성, 2008 년 10 월 8 일 20 04 최종 업데이트 일 목요일, 2013 년 3 월 14 일 01 29 필자 : Batuhan Osmanoglu 조회수 : 41577.Moving Average in Matlab. Offen 나는 소음을 약간 줄여야하는 데이터를 평균해야 할 필요가 있음을 자주 느낍니다. 내가 뭘 원하는지 정확히 몇 가지 기능을 썼다지만, 필터 기능에 내장 된 matlab에 꽤 잘 작동합니다. 여기에 대해 1D 및 2D data.1D 필터 평균을 쓸거야 필터 기능을 사용하여 실현 될 수 있습니다 필터 기능은 적어도 필요합니다 3 개의 입력 매개 변수는 필터 b의 분자 계수, 필터 a의 분모 계수 및 물론 데이터 X입니다. 실행 평균 필터는 간단히 정의 할 수 있습니다. 2D 데이터의 경우 Matlab s filter2 함수를 사용할 수 있습니다. 필터가 작동하는 방식에 대해 입력 할 수 있습니다. 여기서는 16 by 16 이동 평균 필터를 빠르고 간단하게 구현합니다. 먼저 필터를 정의해야합니다. 우리가 원하는 것은 모두 모든 이웃의 공헌도이기 때문에 우리는 재미를 사용할 수 있습니다. 우리는 신호의 일반적인 레벨 진폭을 변경하고 싶지 않기 때문에 256 16 16으로 모든 것을 나눕니다. 필터를 적용하기 위해 간단히 다음을 말할 수 있습니다. 아래는 SAR 간섭계 위상의 결과입니다. 이 경우 범위는입니다 Y 축 및 방위각은 X 축에 매핑됩니다. 필터의 범위는 4 픽셀, 방위는 16 픽셀입니다. MATLAB을 사용하여 행렬의 특정 열에 대한 3 일 이동 평균을 찾고 이동 평균을 그 행렬 내가 행렬의 맨 아래에서 맨 위로 3 일 이동 평균을 계산하려고합니다. 내 코드를 제공했습니다. 다음 행렬과 마스크를 제공합니다. conv 명령을 구현하려고했지만 오류가 발생했습니다. conv 명령 나는 행렬의 두 번째 열에서 사용하려고 시도했다. 원하는 행렬은 다음 행렬에 주어진다. 어떤 제안이 있으면 크게 감사 할 것이다. 행렬의 2 열에 대해서는 다음과 같이 3 일 이동 평균을 계산하고 행렬의 열 4에 나는 행렬을 원하는대로 이름을 바꾼다. 일러스트레이션을 위해서만 출력 17, 14, 11의 3 일 평균은 14 일, 14 일, 11 일, 8 일의 3 일 평균은 11 일, 11 일의 3 일 평균, 8, 5는 8이고 3 일 평균 인 8, 5, 2는 5입니다. 3 일 이동 평균에 대한 계산이 하단에서 시작하므로 4 열의 하단 2 행에는 값이 없습니다. 적어도 17, 14, 11까지 표시되지 않기 바랍니다. Aaron Jun 12 13 at 1 28. 만약 당신이 오류를 보여 주면 일반적으로 도움이 될 것입니다. 이 경우에 당신은 두 가지를하고 있습니다. 첫째, 당신의 회선은 3 또는 이동 평균의 길이로 나눌 수 있습니다. 둘째, c의 크기를 알 수 있습니다. C에 맞을 수는 없습니다. 이동 평균을 얻는 일반적인 방법은 같은 것을 사용하는 것입니다. 그러나 당신이 원하는 것처럼 보이지는 않습니다. 대신에 여러분은 몇 줄을 사용해야합니다. Download movAv m movAv2도 봅니다 - 가중치를 허용하는 업데이트 된 버전입니다. 설명 Matlab에는 movav라는 함수가 있습니다 g 및 tsmovavg Financial Toolbox에서의 시계열 이동 평균을 사용하여 movAv는 이러한 기본 기능을 복제하도록 설계되었습니다. 코드는 루프 내에서 인덱스를 관리하는 좋은 예를 제공합니다. 코드를 짧게 유지하기 시작하면 혼란 스러울 수 있습니다 이 프로세스를 명확하게 유지하는 것은 간단합니다 ..movAv는 일부 상황에서 시끄러운 데이터를 복구하는 데 사용할 수있는 간단한 이동 평균을 수행합니다. 이는 슬라이딩 시간대에 걸쳐 입력 y의 평균을 취하여 작동하며 크기는 n n이 클수록 n의 효과가 입력 벡터 y의 길이에 비례하여 부드럽게하는 양이 많을수록 효과적으로 로우 패스 주파수 필터를 생성합니다. 예제 및 고려 사항 섹션을 참조하십시오. n의 각 값은 입력 벡터의 길이를 기준으로합니다. 적절한 값을보기 위해 항상 다른 값을 테스트해볼 가치가 있습니다. n이 100이면 각 평균에서 n 포인트가 손실된다는 사실을 기억하십시오. 첫 번째 입력 벡터 99 점에는 100pt 평균에 대한 충분한 데이터가 들어 있지 않습니다. 평균을 스태킹하여 다소 피할 수 있습니다. 예를 들어 아래 코드와 그래프는 서로 다른 길이의 창 평균을 비교합니다. 단일 20pt 평균 두 경우 모두 20 점의 데이터가 손실됩니다. xaxis 생성 x 1 0 01 5 잡음 잡음 생성 4 잡음 인자 1, ceil numel x noiseReps, noiseReps, 1 잡음 변형 잡음, 1, 길이 잡음 noiseReps ydata 잡음 생성 y exp x 10 잡음 1 길이 x Perfrom 평균 y2 movAv y, 10 10 pt y3 movAv y2, 10 10 10 pt y4 movAv y, 20 20 pt y5 movav, 40 40 pt y6 movAv y, 100 100 pt 플롯 그림 플롯 x, y, y2, y3, y4, y5, y6 범례 Raw 데이터, 10pt 이동 평균, 10pt, 20pt, 40pt, 100pt xlabel x ylabel y title 이동 평균 비교 ..movAv m 코드 run-through 함수 출력 movAv y, n 첫 번째 줄은 함수 이름, 입력 및 출력을 정의합니다. 입력 x는 평균을 수행 할 데이터의 벡터 여야합니다. n은 평균을 수행하는 평균 포인트 수 여야합니다. 함수에 의해 반환 된 평균 데이터가 포함됩니다. 출력 출력 사전 할당 NaN 1, numel y n midPoint 라운드의 중점 찾기 n 2 함수의 주요 작업은 for 루프에서 수행되지만 시작하기 전에 두 가지가 준비됩니다. stari 출력은 NaN으로 미리 할당됩니다. 이 두 가지 목적을 달성했습니다. 먼저 Matlab이 수행해야하는 메모리 저글링을 줄이기 때문에 우선적으로 사전 할당이 일반적으로 좋은 방법입니다. 둘째, 평균 데이터를 다음과 같은 크기의 출력에 배치하는 것이 매우 쉽습니다. 입력 벡터 이것은 동일한 xaxis가 둘 다 나중에 사용할 수 있다는 것을 의미하며 플로팅에 편리합니다. 또는 NaN을 한 줄의 코드 출력 출력에서 ​​나중에 제거 할 수 있습니다. 변수 midPoint는 출력 벡터의 데이터를 정렬하는 데 사용됩니다 입력 벡터의 처음 9 포인트에 대해 10 포인트 평균을 취하기에 충분한 데이터가 없기 때문에 n 10, 10 포인트가 손실됩니다. 출력이 입력보다 짧으 므로 midPoint가 올바르게 정렬되어야합니다 출력을 미리 할당 할 때 생성 된 NaN 버퍼에 의해 입력과 동일한 양의 데이터가 손실되도록 입력이 유지됩니다. y 길이가 1 인 경우 - n abban보다 평균을 취할 인덱스 범위를 찾습니다. 계산 평균 산출량 a midPoint mean yab end for 루프 자체에서 입력의 각 연속 세그먼트에 대해 평균을 취합니다. 루프는 입력 y의 길이에서 손실 될 데이터를 뺀 길이 1까지 정의됩니다. n If 입력은 100 포인트 길이이고 n은 10입니다. 루프는 1에서 90까지 실행됩니다. 이것은 평균화 할 세그먼트의 첫 번째 인덱스를 제공합니다. 두 번째 인덱스 b는 단순히 n-1입니다. 따라서 첫 번째 반복에서, a 1 n 10 그래서 b 11-1 10 첫 번째 평균은 yab 또는 x 1을 취함 10이 세그먼트의 평균값은 단일 값으로 인덱스 a midPoint 또는 1 5 6.에 저장됩니다. 6. 두 번째 반복 , a 2 b 2 10-1 11 따라서 평균은 x 2 11에서 취해지고 출력 7에 저장됩니다. 길이 100의 입력에 대한 루프의 마지막 반복에서 평균은 91b 90 10-1 100이므로 x 91 100 이상이고 출력 95에 저장됩니다. 이 결과는 인덱스 1,5 및 96에서 n 개의 총 10 개의 NaN 값을 출력합니다. 예제 및 고려 사항 이동 평균은 일부 상황에서는 유용하지만 항상 최상의 선택은 아닙니다. 다음은 마이크가 최적이 아닌 두 가지 예입니다. 마이크 보정이 데이터 세트는 스피커에서 생성되고 알려진 선형 응답으로 마이크에서 녹음 된 각 주파수의 레벨을 나타냅니다. 스피커의 출력은 빈도를 조정할 수 있지만 보정 데이터로 이러한 변동을 수정할 수 있습니다. 출력은 보정의 변동을 고려하여 레벨을 조정할 수 있습니다. 원시 데이터에는 시끄러운 참고 사항이 있습니다. 즉, 빈도가 약간 변경되면 크거나, 이상한, 레벨에 대한 설명이 현실적인가 아니면 이것이 녹음 환경의 결과인지 여부이 경우에는 레벨 주파수 곡선을 부드럽게하는 약간의 변동 곡선을 제공하는 이동 평균을 적용하는 것이 합리적입니다 그러나이 예제에서 왜 최적이 아닌가? 더 많은 데이터가 더 좋을 것입니다 - 여러 개의 캘리브레이션을 평균 실행하면 시스템의 노이즈가 파괴되는 동안 파괴됩니다 dom과 덜 섬세한 디테일을 잃은 커브를 제공합니다. 이동 평균은 근사값 일 수 있으며, 실제로 존재하는 커브에서 더 높은 주파수 딥과 피크를 제거 할 수 있습니다. 사인파 사인파에서 이동 평균을 사용하면 두 포인트가 강조됩니다. 일반 평균을 수행하기 위해 합리적인 수의 포인트를 선택하는 문제. 간단하지만 시간 영역에서 진동 신호를 평균화하는 것보다 효과적인 신호 분석 방법이 있습니다. 이 그래프에서 원래의 사인파는 파란색으로 표시됩니다. 오렌지색 곡선으로 추가되고 플롯됩니다. 이동 평균은 원래의 웨이브를 복구 할 수 있는지 확인하기 위해 다른 수의 포인트에서 수행됩니다. 5와 10 포인트는 합리적인 결과를 제공하지만 더 많은 수의 포인트가 시작되는 곳에서는 노이즈를 완전히 제거하지 마십시오. 평균이 다른 단계에 걸쳐 확장됨에 따라 진폭 세부 정보가 손실됩니다. 웨이브가 0 주위를 오스틸하고 평균 -1 1을 의미합니다. 대안으로는 로우 패스 필터를 구성 할 수 있습니다 주파수 영역에서 신호에 적용되었지만, 이 기사의 범위를 넘어서는 세부 사항은 아니지만 잡음이 파 기본 주파수보다 상당히 높기 때문에이 경우에는 로우 패스 필터는 고주파 노이즈를 제거합니다.

No comments:

Post a Comment