• 数字信号处理实验(六)——FIR滤波器的设计


    一、四种线性相位FIR滤波器的振幅响应

    1、自编函数

    [Hr,w,a,L]=hr_type1(h)(P256)  % h偶对称,N为奇数,h(n)=h(N-1-n)
    [Hr,w,a,L]=hr_type2(h) (P257) % h偶对称,N为偶数,h(n)=h(N-1-n)
    [Hr,w,a,L]=hr_type3(h) (P257) % h奇对称,N为奇数,h(n)=-h(N-1-n)
    [Hr,w,a,L]=hr_type4(h) (P257) % h奇对称,N为偶数,h(n)=-h(N-1-n)

    2、一个demo

    image

    clear all;close all;clc
    addpath(genpath(pwd)); % 添加当前文件夹下所有路径
    
    %% 
    % 题1. 线性相位 FIR 滤波器的特性:
    %% (2)已知滤波器的系统函数如下所示,用以上已编好的函数,确定滤波器的振
    % 幅响应Hr(w)以及零点位置:
    h1_n = [-4,1,-1,-2,5,6,5,-2,-1,1,-4];     % 偶对称,N=11
    h2_n = [-4,1,-1,-2,5,6,6,5,-2,-1,1,-4];   % 偶对称,N=12
    h3_n = [-4,1,-1,-2,5,0,-5,2,1,-1,4];      % 奇对称,N=11
    h4_n = [ -4,1,-1,-2,5,6,-6,-5,2,1,-1,4];  % 奇对称,N=12
    
    new_figure('线性相位FIR滤波器');
    subplot(2,2,1);
    [Hr,w]=hr_type1(h1_n);
    plot(w/pi, abs(Hr));
    title('第一类线性相位滤波器');
    xlabel('w/pi');
    
    subplot(2,2,2);
    [Hr,w]=hr_type2(h2_n);
    plot(w/pi, abs(Hr));
    title('第二类线性相位滤波器');
    xlabel('w/pi');
    
    subplot(2,2,3);
    [Hr,w]=hr_type3(h3_n);
    plot(w/pi, abs(Hr));
    title('第三类线性相位滤波器');
    xlabel('w/pi');
    
    subplot(2,2,4);
    [Hr,w]=hr_type4(h4_n);
    plot(w/pi, abs(Hr));
    title('第四类线性相位滤波器');
    xlabel('w/pi');

     

    二、窗函数法

    1、窗函数设计参考指标

    image

    2、窗函数设计方法一:

    (1)根据实际阻带衰减指标,来确定所使用的窗函数。Matlab提供了几个函数来实现这些窗函数。

       W=boxcar(N);            % 矩形窗         -21dB
       W=triang(N);            % 三角窗         -25dB
       W=hanning(N);           % 汉宁窗         -44dB
       W=hamming(N);           % 海明窗         -53dB
       W=blackman(N);          % 布莱克曼窗     -74dB
       W=kaiser(N,beta);       % 凯泽窗         -80dB

    (2)根据过渡带来计算出N值。

    例: 通带截止频率wp, 阻带截止频率ws,已知为汉宁窗:N=3.1*2*pi/(ws-wp);

     

    (3)求出理想的hd(n)。可使用ideal_lp(P185)来实现理想低通滤波器的冲激响应。

    例:由ideal_lp来实现理想带阻滤波器的冲激响应。

    hd=ideal_lp(wc1,N)+ideal_lp(pi,N)-ideal_lp(wc2,N);

     

    (4)求得所设计的FIR滤波器的单位抽样响应:

    h=hd.*w

     

    (5)一个demo:

    image

    clear all;
    wp=0.2*pi;
    Rp=0.25;
    ws=0.3*pi;
    As=50;
    
    wd = ws-wp;
    N = ceil(6.6*pi/wd);
    wn = (wp+ws)/2;
    
    %
    hd = ideal_lp(wn,N+1);
    w_ham=(hamming(N+1))';
    h = hd.*w_ham;
    figure(2)
    freqz(h,1,512)

     

     

    3、窗函数设计方法二:

    (1)根据实际阻带衰减指标,来确定所使用的窗函数。

    (2)根据过渡带来计算出N值。

    (3)利用Matlab所提供的函数fir1,来实现fir滤波器。

    h=fir1(N,wn,’ftype’,windows(N+1))
    
    ›对于高通滤波器和带阻滤波器,N必须为偶数,N+1为奇数
    
    ›‘ftype’指的是:’low’,’bandpass’,’high’,’stop’
    
    ›设计的滤波器为N阶

    (4)一个demo

    image

    %example6.2.3
    clear all;
    wp=0.2*pi;
    Rp=0.25;
    ws=0.3*pi;
    As=50;
    
    wd = ws-wp;
    N = ceil(6.6*pi/wd);
    wn = (wp+ws)/2;
    b=fir1(N,wn/pi,hamming(N+1));
    figure(1)
    freqz(b,1,512)

     

    三、频率抽样法:

    1、根据给定的N值和过渡点来求得Hd(k) 。

    2、利用DFT反变换求的所需的h(n)。

    h=real(ifft(H,N));

     

    image

    clear all;
    N=40;
    T1=0.5925;
    T2=0.1099;
    
    alpha=(N-1)/2;
    l=0:N-1;
    wl=(2*pi/N)*l;
    
    hrs=[zeros(1,5),T2,T1,ones(1,7),T1,T2,zeros(1,9),T2,T1,ones(1,7),T1,T2,zeros(1,4)];
    k1 = 0:floor((N/2-1));
    k2 = floor(N/2)+1:N-1;
    angh = [-alpha*(2*pi)/N*k1,0,alpha*(2*pi)/N*(N-k2)];
    H=hrs.*exp(j*angh);
    h=real(ifft(H,N));
    
    figure()
    freqz(h,1,512)
    [db,mag,pha,grd,w]=freqz_m(h,1);
    [hr,ww,a,L]=hr_type2(h);
    
    figure()
    subplot(2,2,1),stem(wl(1:21)/pi,hrs(1:21)),title('H(k)')
    subplot(2,2,2),stem(l,h),title('冲激响应')
    subplot(2,2,3),plot(ww/pi,hr);grid;title('幅度响应')
    subplot(2,2,4),plot(w/pi,db),axis([0,1,-80,10]),grid,title('幅频响应(db)')
  • 相关阅读:
    瑞士军刀DLib的VS2015编译
    win10编译libpng
    win10编译zlib
    win10编译jpeglib
    Hough Transform直线检测
    html+css简单的实现360搜索引擎首页面
    HTML和css简单日常总结
    MySQL中的分区(六)KEY分区
    CentOS 8 安装vsftpd 服务器
    linux负载过高 排查方法及说明 附:Centos安装iostat
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/5095466.html
Copyright © 2020-2023  润新知