MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#" onclick="window._kiq.push(['set', { 'event': 'Turn off MT' }]);">ここ</a>」をクリックしてください。

Dirk
0

Create a moving average

Dirk
さんによって質問されました 2013 年 6 月 28 日
最新アクティビティ Image Analyst
さんによって コメントされました 2017 年 11 月 30 日
Hi There, How can I calculate a moving average for a column of data. For instance i want to average the 50 points either side of each data point in my column. Thanks

  0 件のコメント

サインイン to comment.

6 件の回答

Andrei Bobrov
回答者: Andrei Bobrov
2013 年 6 月 28 日
 採用された回答

A - your data
L = filter(ones(101,1)/101,1,[A(:) zeros(50,1)]);
out = L(51:end);

  0 件のコメント

サインイン to comment.


Image Analyst
回答者: Image Analyst
2013 年 6 月 28 日
編集済み: Image Analyst
2013 年 6 月 28 日

For a 1D column vector:
movingAverage = conv(yourSignal, ones(101,1)/101, 'same');
For a 2D array of columns:
movingAverage = conv2(yourSignal, ones(101,1)/101, 'same');
If you don't want the central pixel to be included in the average and have ONLY the 50 on either side, use
kernel = ones(101,1)/100;
kernel(51) = 0;
movingAverage = conv(yourSignal, kernel, 'same');
Same for a 2D matrix except use conv2 instead of conv. conv() and conv2() are highly optimized and very fast.

  4 件のコメント

Image Analyst
2017 年 11 月 29 日
You divide by however many 1's there are in the kernel. If you don't then you're not getting the average. Remember the average is the sum divided by the number of elements in the sum. If you didn't have 101, then you'd simply be summing 101 values and the resulting image would be 101 times as bright rather than in the same intensity range as the original.
Nuchto
2017 年 11 月 30 日
So you could use ones(101,1) first, and onces it is convolved you can divide by 101?
Image Analyst
2017 年 11 月 30 日
Yes.

サインイン to comment.


回答者: Grzegorz Knor 2017 年 4 月 7 日

From MATLAB R2016a there is a function movmean which does not require additional toolboxes.

  1 件のコメント

Image Analyst
2017 年 4 月 7 日
True, and it offers some edge handling options ('shrink', 'discard', 'fill') that conv2() does not have.
conv2() also does not require any toolboxes because it's in base MATLAB.

サインイン to comment.


Marc
回答者: Marc
2013 年 6 月 28 日

If you have the financial toolbox, doc movavg()....
[Short, Long] = movavg(Asset, Lead, Lag, Alpha)

  0 件のコメント

サインイン to comment.


the cyclist
回答者: the cyclist
2013 年 6 月 28 日

This page of the MATLAB documentation has an example of using the filter() command to calculate a moving average:

  1 件のコメント

Dirk
2013 年 6 月 28 日
Thanks. The filter function is set to average data from the previous n measurements. Is there a simple way to specify a different averaging criteria? Thanks

サインイン to comment.


Jan
回答者: Jan
2013 年 6 月 28 日

There are many moving average filters in the FileExchange. Whenever a standard problem occurs, looking in the FEX is a good idea:

  0 件のコメント

サインイン to comment.



Translated by