张志峰的博客

水滴石川,积少成多。

导航

Matlab编程实例(1) 移动平均

Posted on 2016-03-29 13:11  ╰★张志峰★╮  阅读(4821)  评论(0编辑  收藏  举报

MATLAB数字信号处理作业,把自己写的程序发上来..欢迎交流~

QQ 五幺九七九零六四
 
首先是任意点移动平均:
主程序:mov_average_main.m (运行)
函数:mov_average.m  (多点移动平均)
 
/////////mov_average_main.m///////////
%多点移动平均
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点移动平滑后');
 
///////mov_average.m /////////
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;%回代