【问题标题】:Filtering signal noise using Fourier Transforms and MATLAB使用傅里叶变换和 MATLAB 过滤信号噪声
【发布时间】:2014-12-03 08:33:34
【问题描述】:

因此,我收到了三个不同的 MATLAB(我使用的是 MATLAB R2014b)文件,其中包含噪声的信号。我只是简单地绘制了我为第一部分给出的值。例如,第一个信号的图如下所示。

然后,我对信号进行了傅立叶变换,并绘制了这些值,以确定噪声和信号在频谱中出现的位置。为了显示这一点,我在下面添加了第一个信号的绘图图像。

最后,我应该使用基本的 MATLAB 命令创建一个滤波器,并从信号图中滤除噪声,然后再次对信号进行傅里叶变换并绘制结果。过滤器部分看起来像这样......

b = fir1(n,w,'type');
freqz(b,1,512);
in = filter(b,1,in);

其中 n 是滤波器的阶数,w 是截止频率(截止频率除以采样率的一半),“类型”是影响低/高/停止/等的东西......所以,我的问题是如何确定我正在创建的过滤器的 n、w 和类型值应该是什么?!提前感谢您的帮助!

【问题讨论】:

    标签: matlab plot filter signals fft


    【解决方案1】:

    我相信你的高频成分是噪声,但它实际上取决于你的数据。

    看这个例子,

    Fs = 2000;
    L = 200;
    t = (0 : L - 1)/Fs;
    data = chirp(t,20,.05,50) + chirp(t,500,.1,700);
    subplot(411)
    plot(t,data,'LineWidth',2);
    title('Original Data') 
    N = 2^nextpow2(L);
    y = fft(data,N)/L;
    f = Fs/2 * linspace(0,1,N/2+1);
    subplot(412)
    plot(f,abs(y(1:N/2+1)))
    title('Spectrum of Original Data')
    b = fir1(40,2*[1 200]/Fs); 
    newd = filter(b,1,data);
    subplot(413)
    plot(t,newd)
    title('Filtered Data')
    newy = fft(newd,N)/L;
    subplot(414)
    plot(f,abs(newy(1:N/2+1)))
    title('Spectrum of Filtered Data')
    

    您可以使用b = fir1(40,2*[200 800]/Fs); 进行高通滤波器。

    【讨论】:

      【解决方案2】:

      如果第二个图是正确的,在 x 轴上,我可以假设:

      A.采样频率为 2000 Hz。

      B. “噪音”在低频。从原始信号看来,您还需要过滤低频基线。

      如果是这样,你需要高通滤波器,所以'type'='high'。

      顺序取决于您想要过滤器的清晰度。从图中看来,您可以使用 'n'=12 或 20。

      如果低频中的峰值确实是您要过滤的噪声,并且 1000Hz x 轴确实是奈奎斯特频率,则截止频率假设约为 0.1。

      【讨论】:

      • 啊,所以我完全理解你所说的一切,除了截止频率。它需要是精确值的 0.1。现在我有这个,b = fir1(20,100/(2000/2),'high'); freqz(b,1,512); in = filter(b,1,in); 我只是不明白截止频率实际上需要是多少。不过,在使用这段代码时,它几乎给了我一个流畅的情节。
      • 过滤够了吗?
      • 我不知道。看看你的时间信号 - 它过滤得足够吗?是不是过滤太多了?这取决于您的要求...
      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      相关资源
      最近更新 更多