用Matlab分享一个软件低通滤波算法

前言:前一阵子学习了matlab的一些数据处理的基本操作,但是都没怎么用,很多操作忘记了,昨天晚上看到一个滤波算法思想感觉还不错,现在打算用Matlab来仿真看看具体效果怎样

正文:

代码如下:初次写Matlab的代码,可能里面很多不规范的操作,代码非常简单。

这里设置了1000个样本,并添加一些高斯噪声,然后做一个类似窗口滤波的操作

clear
t = linspace(1,1000,1000); %采样频率
sample = 1000 + randi(100,1000,1) - randi(100,1000,1); %设置一个样本并添加一定的扰动
filter_s = randi(1,1000,1);%设置一个数组记录滤波过程中的滤波结果,用于绘图
filter_c = 0.25; %设置滤波系数
filter_f = zeros(5,1); %定义一个滤波窗口
for i=1:1000 %循环采样并进行滤波
    filter_f(5)=sample(i) ;%把样本传进滤波器
    filter_s(i)=filter_f(1); %记录滤波过程中的滤波结果,用于绘图
    for j=5:-1:2 %滤波
        filter_f(j-1)=filter_f(j-1)+filter_c*(filter_f(j)-filter_f(j-1));
    end
end
plot(t,sample); %绘制样本数据图
hold on; %在原图继续绘制
plot(t,filter_s); %绘制滤波结果
xlabel('t'), ylabel('Data'); %给图添加标签
legend('Input Data','Filtered Data'); %两条曲线添加标签

然后仿真看结果:

用Matlab分享一个软件低通滤波算法_第1张图片

效果还行,对于一些毛刺能够滤除,而且波形还算比较连续平滑。

你可能感兴趣的:(Matlab)