我是matlab和信号处理方法的新手,但我试图在我拥有的一组数据上使用它的过滤器属性。我有一组在不同时间戳获得的幅度值。绘制图形时,我会得到一个波形,其中包含几个可以识别的峰值。然后我执行计算以得出每个连续峰值之间的时间,并且我想要消除每秒48-52个峰值范围内的速率。
一步一步处理这些数据的正确方法是什么?如果我想消除那些频率而不是简单地衰减它,那么带阻滤波器或陷波滤波器会更好吗?我完全迷失了为此进入过滤器所需的参数。请帮忙......
答案 0 :(得分:1)
周期图是可以的,但我建议改用pwelch。它做出了更合理的PSD估计,并且经过深思熟虑(Hann窗口,50%的段重叠等)。
如果你想要的是同样地去除宽带(例如48-52赫兹)中的信号,而不是一个单一且不变的频率,那么带阻滤波器是理想的。例如:
fs = 2048;
y = rand(fs*8, 1);
[b,a] = ellip(4, 2, 40, [46 54]/(fs/2));
yy = filter(b,a,y);
这将使用4阶椭圆带阻滤波器来过滤随机数据变量'y'。 filtfilt.m也是一个很好的功能;它会向前和向后应用滤波器,因此您可以获得两倍的滤波器动作,而不会出现相位滞后或分散。
答案 1 :(得分:0)
我目前正在做类似于你正在做的事情。 我正在处理来自惯性测量单元和电机驱动器的大量信号。它们都是异步获得的,即它们都具有非常不同的时间戳和非常不同的采集频率。
我做的第一件事是插入所有信号数据,以使所有信号具有相同的时间戳。您可以使用matlab函数 interp 来执行此操作。
在此之后,您将获得具有相同采样频率和时间戳的所有信号,这将有助于进一步分析。
好的,分析峰值频率可以做的另一件事是执行傅立叶变换。对于初学者,我建议使用周期图功能,而不是 fft 功能。
想象一下,您的信号是 x ,您的采样频率(插值后)是 Fs 。 您现在可以使用matlab中提供的函数 periodogram ,如下所示:
[P,f] =周期图(x,[],[length(t)],Fs);
这将给出信号的功率与频率。之后,您将能够绘制并查看信号的频率。换句话说,您可以看到产生获取信号的信号的频率。 以这种方式绘制数据:
积(F,P);或半决赛(f,P);
第二个与第一个相同,但是具有对数刻度。
在此分析之后,您可以使用过滤器设计和分析工具来设计过滤器。只需在matlab中输入 fdatool ,它就会打开设计窗口。选择滤波器类型,切割和通过频率,然后单击设计。这个工具非常直观。 设计完成后,您可以将过滤器导出到工作区。
最后,您可以使用信号中设计的滤镜来查看它是否符合您的要求。 使用函数过滤器 os filtfilt 。
在网页上搜索我写的函数的matlab帮助以获取更多详细信息。 还有很多例子可供使用。
我希望我能帮助你。 祝你好运。