%多点移动平均
close all;
clear all;
numSample=500; %采样精度为100
l=input(‘请输入用于平滑的窗口大小"n"‘);
if l>1 && l<50; %对输入变量控制
else error(‘您的输入有误!‘);
end;
t = linspace(0,pi/10,numSample); %创建向量
A=10;%信号幅值
p=0;%信号相位
s = A*sin(100 * t+p);%产生正弦信号
n=randn(1,numSample);%用高斯随机构造白噪声
y=s+n;%叠加白噪声
subplot(4,1,1);plot(t,s,‘r‘);
title(‘原信号‘);
subplot(4,1,2);plot(t,n,‘b‘);
title(‘白噪声信号‘);
subplot(4,1,3);plot(t,y,‘k‘);
title(‘叠加白噪声后信号‘);
%调用移动平滑函数
y=mov_average(numSample,l,y);%numSample为采样精度,窗口大小为n
subplot(4,1,4);plot(t,y,‘k‘);
title(‘n点移动平滑后‘);
function y=mov_average(numSample,n,f)
%mov_average是多点移动平滑函数
%numSample为采用精度
%n为用于平滑的窗口大小,其值应大于零且小于numSample
%f为需要进行移动平滑处理的函数
m=0;%m代表正在处理的点
while m<numSample-n+1;%采样点终止位置
m=m+1;
temp=0;%temp用于求n点函数值之和,此处将其清零
for p=0:1:n-1; %p为窗口内变量的增量
temp=temp+f(m+p) %n个点的数值总和
end;
f(m)=temp/n;%求均值
end;
y=f;%回代