我有一个10 kHz的压力信号,有点吵。因此,我想使用抽取函数来降低采样率,从而降低噪声。
然而,我发现根据我作为函数输入的参数,可能会发生抽取函数略微降低信号的幅度以及噪声的幅度。因此,我想知道是否有人可以解释为什么会发生这种情况以确保我将来会正确使用decimate
作为示例,这里是使用不同参数进行抽取的相同信号的不同示例。在这里,我只是改变抽取因子r和Chebyshev I型低通滤波器n的顺序(标准滤波器用于抽取,n = 8)。
如果我使用n = 8(标准滤波器)且r = 4,则输出抽取信号(红色)与原始信号(蓝色)相比噪声降低但振幅减小:
figure;n = 8;r=4;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
实际上,滤波器的每个偶数阶(所以n = 2 * k,k€int)给出了相同的结果,而对于奇数阶(n = 2 * k + 1),振幅是守恒的:
图表,n = 9且r = 4:
figure;n = 9;r=4;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
同样,如果我将抽取因子增加到90
,情况也是如此n = 9且r = 90:
figure;n = 9;r=90;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
如果现在我将抽取因子增加到90以上,则对于任何抽取因子和任何滤波器顺序,幅度都会降低,但第3阶除外:
n = 9且r = 91(幅度降低):
figure;n = 9;r=91;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
n = 6且r = 100(幅度减小):
figure;n = 6;r=100;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
n = 3且r = 100(保守振幅!):
figure;n = 3;r=100;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
最后,对于非常大的抽取因子(> 500),无论我使用哪种顺序用于滤波器,振幅都是守恒的。我试图改变源向量的长度,这是正确的。
我确信我错过了关于过滤器如何工作以及这些参数如何影响输出的一些理论背景,但我觉得有点奇怪的是函数的输出可能是“错误的”(即这里较低信号的幅度以及噪声)仅取决于我使用的参数。
特别奇怪的是,Matlab在“帮助毁灭”中告诉你,为了在大抽取因子(即r> 13)下获得更好的结果,建议将r分解为其因子并且多次调用decimate。因此,对于1000的抽取因子,matlab建议将信号抽取2次,然后抽取5次3次(2 * 2 * 2 * 5 * 5 * 5 = 1000)。如果我这样做,源信号和抽取矢量之间的距离会增加更多,而直接比率为1000,输出信号具有相同的幅度!
与递归调用比较或直接与r = 1000,n = 6:
figure;n = 6;plot(TimeFyr,Pup,decimate(decimate(decimate(decimate(TimeFyr,4,n),10,n),5,n),5,n),decimate(decimate(decimate(decimate(Pup,4,n),10,n),5,n),5,n),'r')
figure;n = 6;r=1000;plot(TimeFyr,Pup,decimate(TimeFyr,r,n),decimate(Pup,r,n),'r')
有人可以帮忙吗?
答案 0 :(得分:0)
问题在于过滤器的选择。 Chebyshev 1,如果你正在使用它,它会在低频https://en.wikipedia.org/wiki/Chebyshev_filter衰减。 Chebyshev 2或Butterworth将是更好的选择,因为它们在通带中没有太多波纹。很高兴,请参阅Wikipedia有关过滤器的信息,这一点很清楚。是的,在进行抽取时,过滤器的选择非常重要。