sgolaygydF4y2Ba

Savitzky-Golay滤波器设计gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

bgydF4y2Ba= sgolay (gydF4y2Ba订单gydF4y2Ba,gydF4y2BaframelengydF4y2Ba)gydF4y2Ba设计了一个多项式阶Savitzky-Golay FIR平滑滤波器gydF4y2Ba订单gydF4y2Ba以及帧长gydF4y2BaframelengydF4y2Ba.gydF4y2Ba

bgydF4y2Ba= sgolay (gydF4y2Ba订单gydF4y2Ba,gydF4y2BaframelengydF4y2Ba,gydF4y2Ba权重gydF4y2Ba)gydF4y2Ba指定一个权重向量,gydF4y2Ba权重gydF4y2Ba,其中包含最小二乘最小化过程中使用的真实的正权重。gydF4y2Ba

例子gydF4y2Ba

[gydF4y2BabgydF4y2Ba,gydF4y2BaggydF4y2Ba= sgolay(gydF4y2Ba___gydF4y2Ba)gydF4y2Ba返回矩阵gydF4y2BaggydF4y2Ba微分滤波器。您可以将这些输出参数与前面的任何输入语法一起使用。gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

生成一个由0.2 Hz正弦波嵌入白高斯噪声组成的信号,每秒采样5次,持续200秒。gydF4y2Ba

Dt = 1/5;T = (0:dt:200-dt)';X = 5*sin(2*pi*0.2*t) + randn(size(t));gydF4y2Ba

使用gydF4y2BasgolaygydF4y2Ba为了平滑信号。使用21个样本帧和四阶多项式。gydF4y2Ba

Order = 4;框架= 21;B = sgolay(顺序,框架);gydF4y2Ba

计算信号的稳态部分通过卷积与中心行gydF4y2BabgydF4y2Ba.gydF4y2Ba

Ycenter = conv(x,b((框架+1)/2,:),gydF4y2Ba“有效”gydF4y2Ba);gydF4y2Ba

计算瞬态。用最后几行gydF4y2BabgydF4y2Ba对于启动和第一行gydF4y2BabgydF4y2Ba用于终端。gydF4y2Ba

ybegin = b(结束:1:(framelen + 3) / 2,:) * x (framelen: 1:1);yend = b ((framelen-1) / 2: 1:1,:) * x(结束:1:结束- (framelen-1));gydF4y2Ba

将瞬态信号和稳态信号连接起来,生成完整的平滑信号。绘制原始信号和Savitzky-Golay估计。gydF4y2Ba

Y = [ybegin;ycenter;yend];图([x y])图例(gydF4y2Ba嘈杂的正弦信号的gydF4y2Ba,gydF4y2BaS-G平滑正弦曲线gydF4y2Ba)gydF4y2Ba

生成一个由0.2 Hz正弦波嵌入白高斯噪声组成的信号,每秒采样4次,持续20秒。gydF4y2Ba

Dt = 0.25;T = (0:dt:20-1)';X = 5*sin(2*pi*0.2*t)+0.5*randn(size(t));gydF4y2Ba

使用Savitzky-Golay方法估计正弦波的前三个导数。使用25个样本帧和5阶多项式。将列除以的幂gydF4y2BadtgydF4y2Ba正确地缩放导数。gydF4y2Ba

[b,g] = sgolay(5,25);Dx = 0(长度(x),4);gydF4y2Ba为gydF4y2Bap = 0:3 dx (:, p + 1) = conv (x)的阶乘(p) / (dt) ^ p * g (:, p + 1),gydF4y2Ba“相同”gydF4y2Ba);gydF4y2Ba结束gydF4y2Ba

绘制原始信号、平滑序列和导数估计。gydF4y2Ba

情节(x,gydF4y2Ba“。”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节(dx)gydF4y2Ba从gydF4y2Ba传奇(gydF4y2Ba“x”gydF4y2Ba,gydF4y2Ba“x(平滑)”gydF4y2Ba,gydF4y2Ba“x””gydF4y2Ba,gydF4y2Ba“x”“”gydF4y2Ba,gydF4y2Ba“x”“”gydF4y2Ba)标题(gydF4y2Ba“Savitzky-Golay导数估计”gydF4y2Ba)gydF4y2Ba

输入参数gydF4y2Ba

全部折叠gydF4y2Ba

多项式顺序,指定为正整数。gydF4y2Ba

帧长度,指定为正奇数。的价值gydF4y2BaframelengydF4y2Ba必须大于gydF4y2Ba订单gydF4y2Ba.如果gydF4y2Ba订单= framelen-1gydF4y2Ba,则所设计的滤波器不产生平滑。gydF4y2Ba

称重矢量,指定为实正矢量。权重向量的长度等于gydF4y2BaframelengydF4y2Ba和用于执行最小二乘最小化。gydF4y2Ba

输出参数gydF4y2Ba

全部折叠gydF4y2Ba

时变FIR滤波器系数,指定为agydF4y2BaframelengydF4y2Ba——- - - - - -gydF4y2BaframelengydF4y2Ba矩阵。在平滑滤波器实现中(例如,gydF4y2BasgolayfiltgydF4y2Ba),最后gydF4y2Ba(framelen-1) / 2gydF4y2Ba行(每个FIR滤波器)在启动瞬态期间应用于信号,而第一行gydF4y2Ba(framelen-1) / 2gydF4y2Ba行在终端暂态期间应用于信号。中心行应用于处于稳态的信号。gydF4y2Ba

矩阵的微分滤波器,指定为矩阵。的每一列gydF4y2BaggydF4y2Ba微分滤波器是用于阶导数的吗gydF4y2Bap - 1gydF4y2Ba,在那里gydF4y2BapgydF4y2Ba是列索引。给定一个信号gydF4y2BaxgydF4y2Ba的长度gydF4y2BaframelengydF4y2Ba,你可以找到一个估计gydF4y2BapgydF4y2BathgydF4y2Ba阶导数,gydF4y2BaxpgydF4y2Ba的中值gydF4y2Baxp ((framelen + 1) / 2) =(阶乘(p)) * g (:, p + 1) * xgydF4y2Ba.gydF4y2Ba

算法gydF4y2Ba

Savitzky-Golay平滑滤波器(也称为数字平滑多项式滤波器或最小二乘平滑滤波器)通常用于“平滑”频率跨度(无噪声)较大的噪声信号。在这种类型的应用中,Savitzky-Golay平滑滤波器比标准的平均FIR滤波器表现得更好,后者倾向于过滤掉信号的高频内容和噪声的重要部分。gydF4y2Ba

您可以实现数据平滑来测量一个缓慢变化且被随机噪声损坏的变量。由于附近的点测量的基本值几乎相同,所以可以用周围数据点的局部平均值替换每个数据点。Savitzky-Golay滤波器是最优的,因为它们在将多项式拟合到每一帧噪声数据时最小化了最小二乘误差。gydF4y2Ba

参考文献gydF4y2Ba

[1]奥法尼迪斯,索福克勒斯J。gydF4y2Ba信号处理导论gydF4y2Ba.恩格尔伍德悬崖,新泽西州:普伦蒂斯大厅,1996年。gydF4y2Ba

[2]出版社,威廉。H, Teukolsky, S. A,维特林,W. A,弗兰纳里,B. P。gydF4y2BaC语言的数值公式:科学计算的艺术gydF4y2Ba.剑桥大学出版社,纽约,纽约,美国1992。gydF4y2Ba

扩展功能gydF4y2Ba

C/ c++代码生成gydF4y2Ba
使用MATLAB®Coder™生成C和c++代码。gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

R2006a之前介绍gydF4y2Ba