【问题标题】:MATLAB filtering having little effectMATLAB 过滤效果不大
【发布时间】: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


【解决方案1】:

敲击声或敲击声是广谱的,产生的频率成分远高于 1 Hz 左右的重复率。因此任何线性带通或高通滤波器都无法完全去除这种广谱噪声。

【讨论】:

  • 我认为这几乎可以回答我的问题。由于在纯“抽头”上进行一些 FFT,我看到了很多频率,其中许多我认为是谐波,因此移除它们似乎相当不可能。
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多