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的结果,与最开始的结论想吻合。
    ————————————————

  • 相关阅读:
    复制延迟排查
    [学习笔记]贪心
    主从复制延时判断以及脚本
    [学习笔记]尺取法
    RESET MASTER 和RESET SLAVE 命令的使用方法 注意事项
    女神(goddess)——组合数学
    主从同步设置的重要参数log_slave_updates
    埃及分数&&The Rotation Game&&骑士精神——IDA*
    多源复制开关复制命令和监控
    万圣节后的早晨&&九数码游戏——双向广搜
  • 原文地址:https://www.cnblogs.com/MCSFX/p/12049930.html
Copyright © 2011-2022 走看看