MATLAB的滑动滤波算法
对于滤波算法:这里不强调数学公式的推理,只要讲一下在工程中的应用,举个最简单的例子,假如有1000个数,4个为一组,那么一共有250组。取第,1,2,3,4个数取平均值,新的数组的第一个向量A的第一个数,A(1);之后取第,2,3,4,5个数的平均值,放入A(2);依次类推。 注意这里不是第1,2,3,4个数为一组,第2,3,4,5个数为一组,若这样则会损失大约750个数。
代码实例
clear all;
clc;
A=importdata('E:\MATLAB代码\toulan.txt');
xlswrite('E:\MATLAB代码\toulan.xlsx',A);
我这里以一个txt中的数据为例作为处理,如果是图像也一样的,但是图像的像素点是二维的,要放入矩阵中,而不是向量内。
importdata()函数的使用可以了解下,非常好用的一个函数,具体可以用help importdata在matlab的命令窗口中走一下,大致就是给一个文件的地址(filename),返回其中文件的内容。
xslwrite()这个函数暂时可以忽略,我是将txt文件导出的数据放到一个Excel表格中便于观察才写的。
B=A(:,7);
subplot(3,1,1)
plot(B);
title('原数据');
A是在上一个代码例子中从txt文件内得到的数据,我需要其中第七列的所有数据,并把它提取到B中,并用plot打印。
L=length(B);
i=1;
N=4;
for i=1:L-N
C(i)=mean(B(i:i+N-1));
end
subplot(3,1,2);
plot(C);
title('滤波后');
取B的长度,放入循环中,由于N=4,故取的是每4个数为一组。
注意for循环的范围,如果有1000个数,那么在996时循环就要停止,因为如果997+4=1001超出范围了,会报错的。
下面上一组数据,可能不是很明显,所以我做了一个滤波的对比图。