如何在matlab中进行曲线平滑?

时间:2012-10-20 11:21:32

标签: matlab signal-processing curve-fitting

Gradient Image

蓝色图是原始图(红色)的嘈杂图。有没有办法将蓝色绘图近似为近红色图?

4 个答案:

答案 0 :(得分:13)

让我们定义一个波浪函数:

x = 0:.1:20;
y1 = 5*sin(x) + 2*x - x.^2 +.3*x.^3 - .2*(x-15).^4 - 10*x.^2.*cos(x./3+12).^3 + .5*(x-12).^4;

并添加大量噪音:

r = randi(1000,1,201) - 500;
y2 = y1+r;

现在制作一维高斯滤波器,使用我们的函数对其进行标准化并convolve

g = gausswin(20); % <-- this value determines the width of the smoothing window
g = g/sum(g);
y3 = conv(y2, g, 'same')

让我们看看结果

figure;
hold on; 
plot(y1, 'r', 'linewidth', 3); 
plot(y2, 'b'); 
plot(y3, 'g', 'linewidth', 3);

红色原始功能,蓝色嘈杂版本,绿色平滑,“恢复”功能。

line graph of smoothed function

答案 1 :(得分:11)

另一个选择是使用&#39; smooth&#39;。我喜欢使用它,因为它是单行功能。使用@Junuxx先前答案的代码:

x = 0:.1:20;
y1 = 5*sin(x) + 2*x - x.^2 +.3*x.^3 - .2*(x-15).^4 - 10*x.^2.*cos(x./3+12).^3 + .5*(x-12).^4;
r = randi(1000,1,201) - 500;
y2 = y1+r;

现在申请顺利:

ys = smooth(x,y2,0.25,'rloess');
plot(x,y2,x,ys)

enter image description here

欲了解更多信息:

doc smooth

答案 2 :(得分:2)

只需添加其他选项:

在matlab的提示中使用cftool

enter image description here

答案 3 :(得分:2)

<a class="navbar-brand custm-navbar-brand" href="@Url.Action("Index", "Submission")"> <img src="@Url.Content("~/Content/images/eed-main-logo.png")" alt="E-Editorial Discovery" width="335" height="56"> </a> 需要信号处理工具箱

gausswin()需要曲线拟合工具箱

如果您没有这些工具箱,这里有一个简单的smooth()实现:

<强> smooth.m:

smooth()
{@ 1}}的

结果,使用@Junuxx代码:

enter image description here