1

我有 y 和 x:-180:30:179 的 12 个数据点。在我绘制我的数据后,它看起来像一个锯齿形图案并且不平滑。为了平滑它,我在 30 度(即 +/-15 度)处应用了一个移动的纵向窗口。我怎样才能一次将其向前移动一个度数,以便纵向窗口像 [-15,15]、[-14,16]、[-13,17]、...那样变化?

到目前为止,这是我的代码

 %y=data %12datapoint 
 y=[90, 65, 60, 53, 70, 82, 65, 38, 44, 71, 77, 64];
 sum=0;                                                                    
 for x=-180:30:179
    for k=1:30
        sum=sum+y(x-15+k);
    end
    avg(x)=sum/30;
    sum=0;                                                                
  end
4

1 回答 1

0

我可能试图在字里行间阅读太多。但听起来你并没有真正要求移动平均线。听起来你想要平滑或插值你的“之字形”线。如果这是正确的,您可以执行以下操作:

y=[90, 65, 60, 53, 70, 82, 65, 38, 44, 71, 77, 64];
x = -180:30:179;

newX = -180:1:179; %Every degree
y_spline = interp1(x,y,-180:1:179,'spline');
y_pchip = interp1(x,y,-180:1:179,'pchip');

l(1) = plot(x,y,'Color',[0 0 1],'Marker','s');hold on
l(2) = plot(newX,y_spline,'r');
l(3) = plot(newX,y_pchip,'g');
grid on; legend(l,{'Orig','spline','pchip'});

绘图示例

选择插值方法……否则我可能完全误读了您的问题。

于 2017-10-23T18:21:38.517 回答