【问题标题】:How can filter data to remove noise in matlab?如何在matlab中过滤数据以去除噪声?
【发布时间】:2013-03-22 10:17:17
【问题描述】:

我有 2 个包含 800000 个系统输入和输出数据样本的数组。一种在 0 到 10 伏之间工作的烤箱中的系统。采样时间为 0.001s。

我必须确定这个系统的模型,但首先,鉴于数据显然很脏,我想过滤掉噪音。

如何使用 Matlab 的系统识别工具箱做到这一点? 此外,如何估计截止频率以消除噪声?

提前谢谢你。

PS:鉴于这有点跑题了,请把你的答案here@谢谢。

【问题讨论】:

  • 如果你能解释你将如何用铅笔在纸上解决这个问题,请这样做并寻求在 Matlab 中实现它的帮助。如果你不能,你可能是在寻求跑题的帮助,你可能会在dsp.stackexchange.com获得更好的运气
  • 听起来您需要对 DSP 进行基本介绍。正如高性能标记所说,这有点离题,但这是一本很好的入门书(在线,免费),供学习 DSP 的人使用dspguide.com/pdfbook.htm
  • 好吧,抱歉,实际上我不确定这是问问题的正确地方。顺便说一句,谢谢你的提示:)

标签: matlab


【解决方案1】:

截止频率直接由您的采样时间或采样频率给出。 您的采样频率是 1/(采样时间)并且必须至少是感兴趣的最高频率的 2 倍: http://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem

f_s = 1/T_s >= 2*f_cutOff

如果您的采样频率真的足够高,您可以简单地进行相同的频域处理。最简单的方法是查看频域(使用函数 fft() )。并首先检查您有高噪声组件的位置。然后过滤掉这些分量(归零),然后将其转换回时域(使用函数 ifft() )。

【讨论】:

  • 这不是过滤数据的好方法。频率的不连续性很容易在时域中扰乱您的信号,并且使用这种技术生成的 FIR 滤波器(除非在非常特殊的情况下)往往会“振铃”。
  • 一般来说你是对的,但这取决于噪声频率分量的实际分布方式。在它们非常频繁(与数据相比)并且没有别名的情况下,这种方法就足够了。
【解决方案2】:

在最简单的情况下,噪声被建模为白高斯分布。如果你估计噪声能量,你可以通过调用

noise = A*randn(1,N); 

这里,A 是幅度,N 是样本数。然后只取这个信号的 fft 并从输入信号的 fft 中减去它,然后取反 fft (ifft)

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 2012-09-18
    • 2011-10-15
    • 1970-01-01
    • 2022-10-04
    • 2013-08-01
    • 2016-06-28
    • 2019-06-03
    • 2015-07-10
    相关资源
    最近更新 更多