zoukankan      html  css  js  c++  java
  • matlab进行FIR滤波器设计(一)

    来源:https://blog.csdn.net/leokingszx/article/details/80041910

      在实际的应用中,有时需要使用FIR根据完成一些特定功能,比如近似一阶RC低通电路的响应,等等。如何确定FIR滤波器的系数呢?http://www.360doc.com/content/17/0518/21/1832721_655109467.shtml 中有这么一段话:    FIR滤波器很简单,它实际上是一个全零点模型(MA滑动平均模型),滤波器系数只包含滑动平均的B,而自回归的A=1。滤波过程就是X和B的卷积,再联系滤波器的原理,容易知道,FIR滤波器的系数B就是滤波器的冲激响应h。    因此它的设计就简单了,只要设定滤波器的频率响应H,进行ifft后就得到冲激响应h,把h直接作为滤波器系数B对原信号滤波即可。可有如下的例子:%此函数是filter函数的标准示例,体现了使用滤波器进行波形处理的思路和写法。
    %其功能是实现低通滤波。
    clc;clear;
    Fs = 2048;            % Sampling frequency                   
    T = 1/Fs;             % Sampling period      
    L = 1024;             % Length of signal
    t = (0:L-1)*T;        % Time vector
    f1 = 100;
    f2 = 700;
    S1 = sin(2*pi*f1*t)+sin(2*pi*f2*t);
    % figure(1);plot(1000*t(1:50),(S1(1:50)));
    figure(1);fft_test(1, Fs, 1024, S1);title('低通滤波前');

    jieshu = 150;
    Window=boxcar(jieshu+1);
    Num1=fir1(jieshu,[0.001 0.3], Window);
    a= [1];
    imp = [1; zeros(jieshu, 1)];
    h1 = filter(Num1, a, imp);

    w = conv(S1,h1);
    %标记有***的是另外一种方法。事实上直接对原序列filter也行。
    % w = filter(Num1,a, S1);  %***
    %
    S2 = w(jieshu/2:1024+jieshu/2);
    figure(2);fft_test(1, Fs, 1024, S2);title('低通滤波后');

    % figure(2);fft_test(1, Fs, 1024, w);title('低通滤波后'); %***

    Num1即为低通滤波的冲激响应。filter函数直接了当的一边实现了FIR滤波器,一边进行了滤波。同时,zzz = fft(Num1);
    plot(abs(zzz));可得:对Num1FFT可得如上的图,可见Num1确实是已知的频率响应的频谱的ifft的结果,与最开始的结论想吻合。
    ————————————————

  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/MCSFX/p/12049930.html
Copyright © 2011-2022 走看看