Moving Average
7 次查看(过去 30 天)
显示 更早的评论
I have a plot of residuals vs Distance and I want to run moving average window over it to capture the trend. My window should have a cos fun on both side and then reach the value of 1 between these two. I don't know how should I code it up?Thankss
0 个评论
回答(2 个)
Image Analyst
2012-3-28
Perhaps this demo will be instructive for you:
clc; % Clear the command window.
workspace; % Make sure the workspace panel is showing.
fontSize = 20;
% Make sample data
y = rand(1,100)
subplot(2, 2, 1);
plot(y);
grid on;
ylim([0 1]);
windowWidth = 15;
t = 1:windowWidth;
title('Y (the data)', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Give a name to the title bar.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
% Construct cosine kernel
kernel = cos(2*pi*(t - ceil(windowWidth/2))/ (2*windowWidth));
subplot(2, 2, 2);
plot(kernel);
grid on;
ylim([0 1]);
title('The cosine kernel', 'FontSize', fontSize);
% Normalize kernel so that mean of filtered data
% will be the same as the mean of the original data.
kernel = kernel / sum(kernel);
% Now filter the data with the normalized cosine kernel.
filtered_y = conv(y, kernel);
subplot(2, 2, 3);
plot(filtered_y);
grid on;
ylim([0 1]);
title('filtered y (the filtered data)', 'FontSize', fontSize);
2 个评论
Image Analyst
2012-3-28
No reason really. I'm just more familiar with conv() because of my optics background. I also use conv2 from habit even though there is imfilter that does the same thing without the flipping that convolution does. 'Course it doesn't matter for symmetrical kernels. I probably should use imfilter instead of conv2 because I think Jeff said he optimized that a great deal so that it's actually faster than conv2.
Daniel Shub
2012-3-28
Typically people use
doc conv
to do moving averages
6 个评论
Daniel Shub
2012-3-28
I couldn't find the c source for conv/conv2 r2011a. When there are a number of "identical" functions for solving a problem, I find my intuition is close to worthless. This isn't so bad since I don't spend much time optimizing or dealing with things that push numerical stability.
Jan
2012-3-28
FILTER handles complex signals and complex filter parameters. As far as I remember, conv2.c accepts real DOUBLEs only - perhaps SINGLEs in addition.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Statistics and Linear Algebra 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!