【发布时间】:2013-10-19 16:37:11
【问题描述】:
我希望有人能够告诉我为什么没有过滤对我的应用程序有帮助。
我有一个 MEMS 麦克风来监测一个小腔室的压力,该腔室的远端有一层薄膜。该设备放置在人体肌肉上,当我弯曲所述肌肉时,膜会受到干扰,从而在腔室中产生压力差,麦克风会拾取该压力差。因此,通过弯曲肌肉,我可以看到很好的活动峰值。然而,这种方法很容易受到噪声的影响,包括运动伪影和其他不良伪影。
我感兴趣的肌肉活动在 10Hz 以上和 100Hz 以下,所以我试图带通(或至少高通)噪声。如果我点击该设备,或者如果我将设备放在我的前臂上部并点击我的手腕,我会明白这是一个非常低频的噪音,在 1Hz/2Hz 的某个区域,但我无法得到摆脱这种噪音!
我正在使用 MATLAB 进行处理。通常我以 1KHz 采样这个麦克风,但我目前将它连接到 5KHz 采样率的 DAQ。我非常想摆脱这种低频噪声,但我尝试的任何尝试似乎都没有任何区别,很难看出滤波器在做什么。它肯定会衰减信号,但不能消除我想要的噪音。我并不期待完美的结果,但肯定比我看到的要好。
我使用了很多方法在 MATLAB(手动和 fdatool)中创建过滤器,以及不同类型的过滤器(Butterworth、Chebyshev、Elliptic)都没有帮助。我担心我想要的 10Hz 频率可能太接近我要过滤掉的噪音,并且无法充分衰减噪音。
任何想法、代码示例或建议都会非常有帮助。
【问题讨论】:
-
包括您尝试过的确切代码,如果可能的话,请提供一些数字,以便我们提供更好的帮助。原则上,低通滤波器应该是您所需要的。您使用了哪个截止频率?
-
你的意思是高通吗?我无法发布我与 fdatool 一起使用的代码,因为它会根据我提供的参数自动生成过滤器,但我尝试过的手动方法在这里:filtCutOffHigh = 10; [b, a] = 黄油(1, (2*filtCutOffHigh)/(1/(1/fs)), 'high');过滤数据 = filtfilt(b, a, originalData); filtCutOffLow = 100; [b, a] = 黄油(1, (2*filtCutOffLow)/(1/(1/fs)), 'low'); filtersData = filtfilt(b, a, originalData);
-
是的,对不起,高通
-
嗯,它似乎对我有用。我使用了 10 秒的 1-Hz 加 20-Hz 正弦波: fs = 5000; t = 1:1/fs:10;原始数据 = sin(1*2*pit) + sin(20*2*pit);并且您的巴特沃斯高通滤波器或多或少会消除 1-Hz 信号
-
1.与信号相比,噪声有多强?过滤器并不神奇。例如,如果 originalData = 1000*sin(1*2*pit) + sin(20*2*pit);
标签: matlab signals filtering signal-processing