低通滤波-matlab低通滤波-Savitzky-Golay卷积平衡算法原理,以及MATLAB的实现

Savitzky-Golay卷积平滑算法是一种改善的移动平滑方法,用于数据流的去噪。该算法在滤波的同时保持信号的形状和宽度不变,特别适合处理拉曼光谱等数据。通过最小二乘法求解滤波系数,MATLAB实现的代码示例展示了其去噪效果,窗口大小影响平衡和去噪程度。较大的窗口虽能提供更好的平滑效果,但可能无法处理边界噪声。
摘要由CSDN通过智能技术生成

Savitzky-Golay卷积平衡算法是移动平滑算法的改进,又称为移动窗口最小二乘多项式平滑,最初是由Savitzky和Golay在1964年提出,被广泛应用于数据流平滑去噪,最大特点是在滤波的同时可以确保信号的形状,宽度不变。

使用平滑滤波器对信号滤波时,实际上拟合了信号中的低频成分,而将高频成分平滑出去,如果噪声在高频段,那么滤波的结果就是去除了噪声,如果噪声在低频段,那么滤波的结果就是留下了噪声,是一种低通滤波器。SG平滑滤波的效果随着选取窗口的不同而不同。

拉曼光谱的原理

原理中的关键是利用最小二乘求出常数项系数C,他的求解方式可以看博客介绍最小二乘法和惩罚最小二乘法原理,在这篇博客中我令B=(XT * X)-1 *XT。B为滤波系数矩阵,由且仅由X矩阵决定,根据系数矩阵即可获得S-G平滑拟合方程。

系数矩阵B的MATLAB实现代码为

function [ filter_matrix ] = S_Gtest(  n,k )
%S-G 平滑一般方法-n点k-1次平滑
%Input: -n,滤波带宽,即原始数据点个数,一般要求为奇数
%       -k,拟合多项式最高次幂+1
%Output:-S-G滤波系数矩阵
m=(n-1)/2;
X=[];
for i=0:(n-1)
    for j=0:(k-1)
        X(i+1,j+1)=power(i-m,j);
    end
end
filter_matrix=X*inv(X'*X)*X';
end

然后再主函数中调用,测试数据可以从这里下载,我提供的测试数据数2048个。

y11=S_Gtest(21,4);
y12=zeros(1,2048);
for j=0:2027
   temp_X= y10(1+j:21+j)';
   hgg=(y11*temp_X);
   hgd=hgg(11);
   y12(1,11+j)=hgd-20;
end
ysg = sgolayfilt(y10,5,7)-10;
figure
plot(y10)
hold on
plot(ysg,'k')
plot(y12,'b');
legend('污染信号','原始信号','MATLAB提供sgolayfilt','s-g21*4平衡滤波')

通过窗口的不断向前平滑,实现对整个波形噪声的去除,得出如下的图形,为了方便观察我把数据上下平移,

MATLAB实现的效果图

从图中可以看出窗口在21时去噪效果已经很好,一般来说窗口值越大越平衡,缺点就是左右两端没有实现去噪。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值