精华内容
下载资源
问答
  • 【FPGA教程案例1】基于FPGA的串行FIR滤波器设计与实现
    2022-03-26 22:55:39

    FPGA教程目录

    MATLAB教程目录

    ---------------------------------------------------------------------------------------

    0.完整源码获得方式

    方式1:微信或者QQ联系博主

    方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

    1.软件版本

    vivado2019.2、MATLAB2021a

    2.本算法理论知识

            FIR(Finite Impulse Response)滤波器是一种有限长单位冲激响应滤波器,又称为非递归型滤波器。FIR 滤波器具有严格的线性相频特性,同时其单位响应是有限长的,因而是稳定的系统,在数字通信、图像处理等领域都有着广泛的应用。FIR 滤波器是有限长单位冲击响应滤波器。直接型结构如下:

    更多相关内容
  • FIR滤波器主要有直接型、级联型、线性相位型: 15 FIR滤波器的设计方法 17 设计框架 19 Matlab软件导出需要的滤波器系数过程 19 Modelsim仿真 20 打开软件 20 打开工程 21 编译 21 选择仿真文件 22 开始仿真 25 仿真...
  • FIR滤波器(内含完整的MATLAB代码)
  • 本资料归于网络整理,仅供参考学习用。如有侵权,请联系删除!! qq:1391074994 1. 资料都是有论文和程序的,程序大部分是quartus的工程,有几个是ise或者...里面有5个FIR滤波器的程序 8/16(verilog/vhdl)阶的都有。
  • FIR滤波器

    2021-09-24 14:15:01
    FIR滤波器

    FIR滤波器定义

    FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,一个 M M M阶FIR滤波器的定义如下:
    y ( n ) = ∑ k = 0 M − 1 h ( k ) x ( n − k ) y(n)=\sum_{k=0}^{M-1}h(k)x(n-k) y(n)=k=0M1h(k)x(nk)
    其系统函数为:
    H ( w ) = ∑ k = 0 M − 1 h k e − j w H(w)=\sum_{k=0}^{M-1}h_ke^{-jw} H(w)=k=0M1hkejw
    FIR滤波器的特点:

    1)只存在零点,不存在极点,系统比较稳定。

    2)有限长的序列容易设计为对称结构(偶对称和奇对称),对称结构的滤波器具有线性相位的特点。

    3)与IIR滤波器相比,滤波器阶数比较高。

    窗函数设计FIR滤波器

    窗函数法

    从理想滤波器的频域响应出发,利用逆傅里叶变换求出理想滤波器的时域响应,由于理想滤波器是非因果的,所以理想滤波器时域响应是无限长的,无法实现的,窗函数方法就是用有限长的窗函数对理想滤波器时域响应进行截取。

    理想低通滤波器响应

    理想低通滤波器的频域响应为,
    H ( w ) = { 1 , ∣ w ∣ < w c 0 , o t h e r w i s e H(w) =\begin{cases} & 1 , |w| < w_c\\ & 0, otherwise \end{cases} H(w)={1,w<wc0,otherwise

    其中 w c w_c wc为低通滤波器截止频率,进行傅里叶逆变换,

    h ( n ) = 1 2 π ∫ − w c w c e j w n d w = 1 2 j n π e j w n ∣ − w c w c = 1 n π s i n ( w c n ) = w c π s i n c ( w c n π ) \begin{aligned}h(n) &= \frac{1}{2\pi}\int_{-w_c}^{w_c}e^{jwn}dw \\ &= \frac{1}{2jn\pi}{e^{jwn}} |_{-w_c}^{w_c} \\ &= \frac{1}{n\pi}sin(w_cn)\\ &= \frac{w_c}{\pi}sinc(\frac{w_cn}{\pi})\end{aligned} h(n)=2π1wcwcejwndw=2jnπ1ejwnwcwc=nπ1sin(wcn)=πwcsinc(πwcn)

    其中, n ∈ ( − ∞ , ∞ ) n \in(-\infty,\infty) n(,), s i n c ( x ) = s i n ( π x ) π x sinc(x)=\frac{sin(\pi x)}{\pi x} sinc(x)=πxsin(πx)

    窗函数截取

    利用窗函数 w ( n ) w(n) w(n)对理想低通滤波器时域响应进行截取,只取其中的主要部分。最简单的窗函数就是矩形窗,选取的区间保持原样,其余区间丢掉,但矩形窗的旁瓣比较高。不适合利用。
    除了矩形窗,常见的窗函数有hanning、hamming、Blcakman等窗函数。
    1)hanning窗:
    w ( n ) = 0.5 + 0.5 c o s ( 2 π n / M ) , 0 ≤ n ≤ M − 1 w(n)=0.5+0.5cos(2\pi n/M), 0 \leq n \leq M-1 w(n)=0.5+0.5cos(2πn/M),0nM1
    2)hamming窗:
    w ( n ) = 0.54 + 0.46 c o s ( 2 π n / M ) , 0 ≤ n ≤ M − 1 w(n) = 0.54 + 0.46cos(2\pi n/M), 0 \leq n \leq M-1 w(n)=0.54+0.46cos(2πn/M),0nM1
    3)blackman窗:
    $w(n) = 0.42 - 0.5cos(2\pi n/M) + 0.08cos(4\pi n/M) ,\ 0 \leq n \leq M-1 $
    下图例举了常用窗函数的特点。
    在这里插入图片描述

    频率采样法

    首先给出期望的频率响应 H d ( w ) H_d(w) Hd(w),再利用fir滤波器的系统函数 H ( w ) H(w) H(w)去逼近期望的频率响应,利用优化的方法求解fir滤波器的系数,存在多种不同的优化准则,这里使用的优化其实和波束优化是一样的,感兴趣的可以看我之前写的波束优化相关的程序。

    FIR滤波器系统函数为:

    H ( w ) = ∑ k = 0 M − 1 h k e − j w = ∑ k = 0 M − 1 h k c o s ( k w ) + j ∑ k = 0 M − 1 h k s i n ( k w ) \begin{aligned}H(w)&=\sum_{k=0}^{M-1}h_ke^{-jw} \\ &=\sum_{k=0}^{M-1}h_kcos(kw) + j\sum_{k=0}^{M-1}h_ksin(kw)\end{aligned} H(w)=k=0M1hkejw=k=0M1hkcos(kw)+jk=0M1hksin(kw)
    可以看出系统函数是周期共轭对称函数,所以优化时只需要设计优化 0 ≤ w ≤ π 0\leq w \leq \pi 0wπ区间就可以了。

    最大最小准则

    最大最小准则是指通带内与期望响应的纹波的最大值 δ 1 \delta_1 δ1最小化,同时限制频率响应小于 δ 2 \delta_2 δ2
    频率区间 [ 0 , π ] [0,\pi] [0,π]频率采样为 N N N个点, N N N要远大于滤波器长度 M M M。根据通带截止频率和阻带开始频率对频率区间进行划分为通带区间 [ 0 , w p ] [0,w_p] [0,wp]和阻带区间 [ w s , π ] [w_s,\pi] [ws,π]
    m i n i m i z e ( δ 1 ) minimize(\delta_1) minimize(δ1)
    subject to:
    m a x ( a b s ( H ( w k ) − H d ( w k ) ) ) , 0 ≤ w k ≤ w p a b s ( H ( w k ) ≤ δ 2 , 0 ≤ w k ≤ w p max(abs(H(w_k)-H_d(w_k))),0 \leq w_k \leq w_p \\abs(H(w_k) \leq \delta_2,0 \leq w_k \leq w_p max(abs(H(wk)Hd(wk))),0wkwpabs(H(wk)δ2,0wkwp

    更多的准则可以参考波束优化的书籍《传感器阵列波束优化设计与应用》,原理都是一致的。

    程序仿真

    窗函数设计法

    %% window function approximation 
    fc = 1/2;                     %% w_c/pi
    n = floor(6.2/(0.15 * fc));   
    n = floor(n/2) * 2 + 1;       % set window len to old
    w = hamming(n);
    idx = 0:(n - 1);
    idx = idx - (n - 1)/2 ;
    idx = idx(:);
    h = fc * sinc(fc * idx).* w;
    figure
    freqz(h)
    

    频率采样法

    fc = 1/2;                     %% w_c/pi
    n = floor(6.2/(0.15 * fc));   
    N = floor(n/2) * 2 + 1;       % set window len to old
    n = (N - 1)/2;
    
    w = linspace(0,pi,360);
    A = [ones(360,1) 2*cos(kron(w',[1:n]))];
    w_pass_end = 0.5 * pi;
    w_stop_start = 0.7 * pi;
    pass_dB = 0;
    stop_dB = -30;
    
    idx = find((w >=0) & (w<= w_pass_end));
    A_pass = A(idx,:)
    H_pass = 10^(stop_dB/20) * ones(length(idx),1);
    
    idx = find((w >=w_stop_start) & (w<= pi));
    A_stop = A(idx,:)
    H_stop = 10^(stop_dB/20) * ones(length(idx),1);
    
    cvx_begin
        variable d
        variable h(n+1,1);
        
        minimize (d)
        subject to
            max(abs(A_pass*h - H_pass)) <=d
            abs(A_stop*h) <= H_stop;
    cvx_end
    
    h = [flipud(h(2:end));h];
    figure
    freqz(h)
    

    代码链接
    github仓库

    参考

    https://ccrma.stanford.edu/~jos/sasp/FIR_Digital_Filter_Design.html
    https://blog.csdn.net/suijue9389/article/details/87900091
    鄢社锋, 马远良. 传感器阵列波束优化设计及应用[M]. Ke xue chu ban she, 2009.

    展开全文
  • 基于 Matlab 的 FIR 滤波器设计 摘 要 在数字控制系统中输入信号中所含的干扰对系统的性能会产生很大的影响 因此需要对输入信号进行处理已提取有用信号本设计研究基于MATLAB 的 FIR 数字滤波器的设计是基于应用...
  • 窗函数FIR滤波器

    2018-01-19 10:35:01
    用 MATLAB实现FIR滤波器设计,包含各种窗函数滤波图。
  • 文中研究了FIR滤波器窗函数算法的基本思想给出了在定点DSP芯片上实现FIR数字滤波器的设计方法, 并给出了仿真结果。  0 引言  数字信号处理现已在通信与信息系统、信号与信息系统、自动控制、需达、军事、航空...
  • 基于matlab FPGA verilog的FIR滤波器设计

    千次阅读 2020-05-24 14:36:04
    今天和大侠简单聊一聊基于matlab FPGA verilog的FIR滤波器设计,话不多说,上货。 本次设计实现8阶滤波器,9个系数,由于系数的对称性,h(0)=h(8),h1(1)=h(7),h(2)=h(6),h(3)=h(5),h(4)为中间单独一个系数。...

    ​大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

    今天和大侠简单聊一聊基于matlab FPGA verilog的FIR滤波器设计,话不多说,上货。

    本次设计实现8阶滤波器,9个系数,由于系数的对称性,h(0)=h(8),h1(1)=h(7),h(2)=h(6),h(3)=h(5),h(4)为中间单独一个系数。根据公式:

     

    实现框图:

     

    推导出当系数N为偶数时,例如N=4:y(n)=h(0)*{x(0)+x(n-3)}+h(1)*{x(n-1)+x(n-2)}

    当系数N为奇数时,例如N=5:

    y(n)=h(0)*{x(0)+x(n-1)}+h(1)*{x(n-1)+x(n-3)}+h(2)*x(n-2)
     

    1、用matlab生成和量化滤波器系数

     

    设置参数后,点击“Design Filter”按钮,“file”—“export”,把滤波器系数导出到workspace,如下图:

    执行命令:Num=Num’ ,把滤波器系数拷贝到文件COFFICIENT.dat中。

    量化系数:在matlab中运行quantization.m
     

    2、说明

    用matlab程序sin_1MHz_gen.m生成正弦波波形表,改变变量f0 = 1.5e6可以生成不同频率的波形。把第一个周期的波形数据存入signal_1m.dat文件中,存入的数据个数为Fs/Fo的最小正整数之比的分子,比如Fs=25MHz,Fo=0.3MHz,Fs/Fo=250/3(Fs=25/24MHz),则存入文件signal_1m.dat的波形数据个数为开头的250个数据。相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<250)。仿真时signal_1m.dat放在仿真目录下
     

    3、滤波器的multisim仿真

    运行matlab,用sin_1MHz_gen.m产生5MHz(f0 =5e6)正弦波信号,Fs/Fo=5,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<5)。

    仿真的波形如下图(fir滤波器的输入输出信号):

     

    运行matlab,用sin_1MHz_gen.m产生1MHz(f0 =1e6)正弦波信号,Fs/Fo=25,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<5)相应的改为if(i0<25)。

    仿真的波形如下图(fir滤波器的输入输出信号):

    由此可见FIR对带外信号起到衰减的作用。

     

    部分代码:

    后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

    大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

    展开全文
  • 实验五 用窗口法设计FIR滤波器 一、实验目的 了解一个实际滤波器设计过程,加深掌握用窗口法设计FIR滤波器的原理和窗函数对滤波器性能的影响。 二、基本原理 设所希望得到的滤波器的理想频率响应为。那么FIR滤波器...
  • FIR数字滤波器设计

    2022-03-29 10:36:34
    今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器、频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方法设计FIR滤波器。话不多说,上货。这里也超链接了上、中两篇,方便参考学习。FIR...

    今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇。今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器、频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方法设计FIR滤波器。话不多说,上货。

    这里也超链接了上、中两篇,方便参考学习。

    FIR数字滤波器设计(上)

    FIR数字滤波器设计(中)

    d83075b149cb5fd960050bec9310aad0.gif

    数字滤波器的输入输出均为数字信号,信号通过数字滤波器后,可以改变频率成分的相对比例或滤除某些频率成分。数字滤波器可以分为IIR数字滤波器和FIR数字滤波器。

    本篇只介绍FIR数字滤波器的设计,可以根据所给定的频率特性直接设计FIR数字滤波器。FIR数字滤波器在保证幅度特性满足要求的同时,能够做到严格的线性特性。

    本篇采用了窗函数法、频率采样法以及基于firls函数和remez函数的最优化方法设计FIR滤波器。对FIR滤波器进行了详细的理论分析,并且对应于每种方法都给出了设计实例。通过编写MATLAB语言程序,运行程序,得到幅频和相频特性图。

    对于窗函数和firls函数设计的滤波器,还通过建立Simulink系统模块进行仿真,观察滤波器滤波情况。

    FIR数字滤波器设计

     FIR数字滤波器的设计方法有窗函数法、频率采样法和基于firls函数和remez函数的最优化方法。MATLAB语言中的数字信号处理工具箱,提供了一些滤波器的函数,使FIR滤波器的运算更加方便和快捷。

    在MATLAB中提供的滤波函数有fir1(),此函数以经典的方法实现加窗线性相位FIR数字滤波器设计,可以设计出低通、高通、带通和带阻滤波器;fir2函数设计的FIR滤波器,其滤波的频率特性由矢量f和m决定,f和m分别为滤波器的期望幅频响应的频率相量和幅值相量。

    Firls()和remez()的基本格式用于设计I型和II型线性相位FIR滤波器,I型和II型的区别是偶函数还是奇函数。freqz()用于求数字滤波器的频率响应。并且提供了各种窗函数的函数,比如,hamming()是海明窗函数,hanning()是汉宁窗函数,kaiser()是凯泽窗函数,使在设计的过程中,不用自己重新设计窗函数。

    Simulink是MATLAB众多工具包中的一员,对于建模,Simulink提供了一个图形化的用户界面(GUI)。Simulink包括一个复杂的由接收器、信号源、线性和非线性组件以及连接件组成的模块库。定义完一个模型后,就可以通过Simulink的菜单或者在MATLAB的命令窗口输入命令对它进行仿真。使用Scopes或者其他的显示模块,可以在运行仿真时观察到仿真的结果。另外,还可以在仿真时改变参数,并且立即就可看到变化。

    一、窗函数法设计FIR滤波器

    设我们所要设计的FIR滤波器的传输函数是 7619e34bbe6ecded196cd4f1f0be3986.png6165c01d6453f29a09d731c3f8abf4e7.png 是与其对应的单位脉冲响应,因此

    636a284cd01a1b6acb515a071fea7189.png(3-1)

    35cc0d44e4be20756fd7c743753544b5.png (3-2)

    如果我们能够在e53c5dc7c6ec5c887928ff61a694ed43.png已知的情况下,求出983eb514311309cb84117e06cb5ecb6a.png,经过Z变换可得到滤波器的系统函数。通常情况下理想数字滤波器的单ee5ce436025fae6f4854d1e5aca4a97a.png位脉冲相应是无限长的,且是非因果序列。获得有限脉冲响应滤波器的一种可能方法是对26ebe9622c628a11718b0ddfd29c5ccb.png截取一段fa9b4fdb87b54214556c2d8ce718725b.png来近似代替9435d8e98627804625344c8e79d5546b.png,可是这样会改变原来的滤波器指标,出现吉布斯效应误差。

    窗函数法就是用被称为窗函数的有限加权序列w(n)来修正式(1)的傅里叶基数以求得要求的有限脉冲响应序列a8b27e3a0fb6458a2746bbe32b9fdfff.png,即:

                              a94e43697a4ecc1ab7efc33d56468cb6.png(3-3)

    w(n)是有限长序列,当n<0或n>N-1时,w(n)=0。

    这种方法的重点在于选择某种合适的窗函数。要求窗函数主瓣宽度尽可能窄,以获得最小的过渡带;旁瓣相对值尽可能小,以使得通带波纹小,并且阻带衰减大。

    下面介绍几种常用的窗函数:

    1、矩形窗(Rectangle Window)

                                251832b55a7c446ffc61412d11948614.png(3-4)

    其频率函数为:

    e36e80efe619f1a056c9c5705b0146e5.png(3-5)

    2、三角形窗(Bartlett Window)

    ef812ddd37b4102177a3993a5cc86dd0.png(3-6)

    其频率函数为:

    3b3fe5c6589f10524db27d8b42e018b4.png(3-7)

    3、汉宁(Hanning)窗,又称升余弦窗

    f03b9ac58a28f4f8e2b4a419b2e32e56.png(3-8)

    利用傅里叶变换得到频率函数为:

    1841858d7c5c9a7f4ecb69fd889a7331.png(3-9)

    当 9f6ff22332e787c0dd3d01303ca5e4ef.png 时,c7697de50eff82b669120791723a4ce9.png,所以窗函数的幅度函数为:

                8cfa2038b4cd65ea46832cf06f88afcf.png (3-10)

    4、汉明(Hamming)窗,又称改进的升余弦窗

    c6c7d82524f84e340117501bfdb5f8a5.png(3-11)

    其幅度函数为:

    531f064658d30aa570bdfe1a54e2410c.png(3-12)

    5、布莱克曼(Blankman)窗,又称二阶升余弦窗

    5beafa1da9c40351a9e85f9539958b5f.png(3-13)

    其幅度函数为:

     e4b2e80209be39f08d5f0060dceb2916.png(3-14)

    6、凯泽(Kaiser)窗

    352c36816fb304190bdb02844a285250.png(3-15)

    其中:β是一个可自由选择的参数,f240fc9ed5a2e968020914c072848a1d.png是第一类修正零阶贝塞尔函数。

    上述窗函数的基本参数如下表:

    c2b9985d4c712ca835c225142be6222d.png

    窗函数法设计滤波器的步骤:

    1)根据技术要求确定等待求值滤波器的单位取样响应7d047b8ed3fabef959e4edcada0ea1bb.png

    2)根据对过渡带和阻带衰减的要求,选择窗函数的形式,并估计窗口长度N。

    3)计算滤波器的单位取样响应9116d35b5ae12e2123ef9e00b3249246.png

                                f08603fc9f5bd86d721c32d6bcb981d4.png(3-16)

    上式中,25361de962200be32df1453e4d4b01ad.png 是前面所选择好的窗函数。

    4)检验技术指标是否满足要求。根据下式计算:

    cc4e2d004213d85802d51a7e12dae365.png(3-17)

    如果不满足要求,根据具体情况重复步骤(2)(3)(4)步,直到满足要求为止。

    本篇以一个FIR滤波器的设计为例说明如何使用MATLAB设计数字滤波器。

    设计实例:用窗函数法设计线性相位FIR低通数字滤波器,要求通带截止频率Wp=0.4*81b5bc68cac4f281a7fc3ae3e8bb4f4a.png,阻带截止频率Ws=0.5*02c6ceb6bbfb796ff16d3bd1da0dfd65.png, 通带衰减不大于3db,阻带衰减不小于40db。

    1、程序如下:

    Wp=0.4*pi;
    Ws=0.5*pi;
    Wdel=Ws-Wp;
    N=ceil(8*pi/Wdel);
    Wn=(0.4+0.5)*pi/2;
    window=hanning(N+1);
    b=fir1(N,Wn/pi,window);
    freqz(b,1,512)

    程序执行后所得幅频和相频如下图所示:

    36bf63ecb48657eb45548bb10d0972f9.png

    2、用Simulink仿真对窗函数设计的低通滤波器进行滤波:

    FIR低通滤波器的Simulink仿真模块图如下所示:

    c01d42d382d38aae26b985d8f5be5b13.png

    输入信号:s(t)=sin(30πt)+sin(56πt)+sin(70πt)

    数字滤波器参数设置:已知滤波器的阶数n=80。

    首先在Filter Type中选择lowpass;

    在Design Method选项中选择FIR Window,接着在Window选项中选取hann;指定Filter Order项中的Specify order为80;

    采样频率Fs=100Hz,截止频率Fc=22.5HZ。

    设置完以后点击窗口下方的Design Filter,在窗口上方就会看到所设计滤波器的幅频响应和相频响应曲线。

    设计界面如下图所示:

    32313d641617458245c818b877701594.png

    信号源参数设置:三个信号源的频率分别是15Hz、28Hz、35Hz :

    759071954c43f3321424b937ddef5710.png

    运行仿真,得波形如下图所示:

    15HZ信号波形如下:

    8d8de0c6ad68b8f7d989a292332ce922.png

    28HZ信号波形如下:           

    df5e4cd90eaf18b4ccbeffee83b97dfd.png

    35HZ信号波形如下:

    bf9d2201bf000a2d735f1fb3e2dace9d.png

    滤波前的叠加波形如下:         

    e9f81f740249a730634f82b46312c3aa.png

    滤波后波形如下:   

    abd4918ef8445bd8492de07e08b14f79.png

    由上图可知,15Hz、28Hz、35Hz叠加后通过截止频率为22.5HZ的FIR低通滤波器,输出与15Hz信号波形相似,其它的高频被阻隔。

    二、频率采样法设计FIR滤波器

    1、对理想滤波器的系统函数111d8e770e8d0339965d36ec0c9a75c8.png进行频率采样以得到系统的理想频响70fd626589120d3f222d32fcb4b06204.png的等间隔采样值H(k)。

    H(k)实际上是所要求的滤波器的单位采样响应(h(n))的离散傅里叶变换(DFT),如下关系式:

    958ceaba640239c9597c894d75c90e54.png (3-18)

    51b681641646070978d2524eb763446a.png  (3-19)

    为了减小H(k)的通带边缘由于抽样点的变化而引起的起伏振荡,可以增加过渡点,加宽过渡带以减小通带的起伏。

    每一个抽样值产生一个与a713e35dd5bfcdadab6134e1257e54d4.png 成正比,并位移aed902588d4e8b261cdd5ce3e50ddeb9.png的频率响应,而H(k)与内插函数的线性组合就是FIR滤波器的频率响应,增加一点过渡可以使阻带衰减提高到-44~54dB,二点过渡衰减-65~75,三点过渡衰减-85~95dB。

    如果不能使过渡带太宽,同时要求增大阻带衰减,可以增加取样点数N,但这样会增加计算量、延时和误差。

    频率取样型FIR滤波器设计步骤:

    (1)给定理想滤波器频率响应31d518050d1efda000213bc44d138343.png

    (2)根据过渡带宽和阻带衰减确定过渡点数和h(n)的长度N。

    9be59532dfc7c6582a1b57629857437e.png (3-20)

    (3)由IFFT计算IDFT得到:             

    6188c20966708acdd2feea83a5cb3642.png (3-21)

    设计实例:

    频率采样法设计一个带通滤波器,

    满足:低阻带边缘:w1s=0.2*efc5dcb30295784a70913369fedecdbe.png;低通带边缘:w1p=0.35*102d5691a6b913aaefd8df32678a11b6.png;高通带边缘:w2p=0.65*90469e107b221ceaf038f2c37f03f289.png;高阻带边缘:w2s=0.8*037f1b62128a5f0e8d6e9b50be963469.png。设计过渡带中的频率样本值为t1和t2,取t1=0.109021,t2=0.59417456。

      设计程序如下:

    M=40;
    al=(M-1)/2;
    l=0:M-1;
    t1=0.109021;
    t2=0.59417456;
    Hrs=[zeros(1,5),t1,t2,ones(1,7),t2,t1,zeros(1,9),t1,t2,ones(1,7),t2,t1,zeros(1,4)];
    k1=0:floor((M-1)/2);
    k2=floor((M-1)/2)+1:M-1;
    angh=[-al*(2*pi)/M*k1,al*(2*pi)/M*(M-k2)];
    H=Hrs.*exp(j*angh);
    h=real(ifft(H,M));
    freqz(h,1,512,1000)

    实验得幅频相频特性如下图所示:

    6dc30a7134bd913951daab22b1c965dd.png

    三、最优化方法设计FIR数字滤波器

    MATLAB信号处理工具箱提供了通用的工具函数firls和remez,采用不同的优化方法可以设计最优滤波器和多频带滤波器。

    firls是fir1和fir2函数的扩展,其基本设计准则是利用最小二乘法使期望的频率响应和实际的频率响应之间的整体误差最小。

    Remez函数则利用Parks-McClellan算法设计线性相位FIR滤波器。

    该算法能使期望频率响应和实际频率响应之间的最大误差最小。Firls函数设计的滤波器在频率响应上出现等波纹,因此也叫等波纹滤波器。

    函数firls、remez调用的语法规则相同。

    1) firls。

    其调用格式为:

    b=firls(n,f,a)

    b=firls(n,f,a,w)

    b=firls(n,f,a,’ftype’)

    b=firls(n,f,a,w,’ftype’)

    该函数用于设计n阶FIR滤波器,其幅频特性由f和a向量确定,f是频率点向量,其范围为0~1,是递增向量;a是指定频率点的幅度响应,与f必须同长度;b为函数返回的滤波器系数,长度为n+1,且具有偶对称关系:b(k)=-b(n+2-k),  k=1,2,…,n+1;

    b=firls(n,f,a,w)则使用权系数w给误差加权。

    b=firls(n,f,a,w,’ftype’)调用形式中,参数’ftype’用于指定所设计的滤波器类型,ftype=Hilbert,为奇对称的线性相位滤波器。

    返回的滤波器系数满足b(k)=-b(n+2-k),  k=1,2,…,n+1;ftype=differentiator,则采用特殊加权技术,生成奇对称的线性相位滤波器,使低频段误差大大小于高频段误差。

    2) 函数remez的基本调用格式为:b=remez(n,f,a)。

    其中各项意义同函数firls所述。

    设计实例:

    分别使用函数firls和remez函数设计20阶带通滤波器,阻带频率为ws1=0.3*b09afce5978fc9c9ae1a68dc77f42493.png,ws2=0.7*3d0029c6f44019c13e23beea60d39cd3.png,通带频率为wp1=0.4*ca7aa0fed8eebcd4c2ff3f1ceaf37cd0.png,wp2=0.6*2b9ce0725c5de57c3be21faa1f4b2c2a.png,并画出幅频特性曲线。

    1、程序如下所示:

    f=[0 0.3 0.4 0.6 0.7 1];
    m=[0 0 1 1 0 0];
    n=20;
    b=firls(n,f,m);       %firls函数设计FIR数字滤波器
    [h,w]=freqz(b);     
    bb=remez(n,f,m);     %remez函数设计FIR数字滤波器
    [hh,w]=freqz(bb);
    axes('position',[0.2 0.2 0.5 0.5]); 
    plot(w/pi,abs(h),'b:',w/pi,abs(hh),'r-');
    xlabel('frequency');
    ylabel('magnitude');
    grid on;

    实验得幅频相频特性如下图所示:

    a785ddc4694046e7cfb054632ebf72be.png

    2、用Simulink仿真对用firls函数设计的带通滤波器进行滤波:

    仿真模块如下:

    85df74f17c1a02f85b2864bed98ddd69.png

    输入信号:s(t)=sin(20πt)+sin(50πt)+sin(90πt)

    数字滤波器参数设置:已知滤波器的阶数n=20。

    首先在Filter Type中选择bandpass;

    在Design Method选项中选择FIR least-squares;

    指定Filter Order项中的Specify order为20;

    采样频率Fs=100Hz,Fstop1=15HZ,Fpass1=20HZ,Fpass2=30HZ,Fstop2=35HZ。

    设置完以后点击窗口下方的Design Filter,在窗口上方就会看到所设计滤波器的幅频响应曲线。

    设计界面如下图所示:

    f8a0c5e22430be10f94929d40e53fa56.png

    信号源参数设置:三个信号源的频率分别是10Hz、25Hz、45Hz :

    818ad695fee4efeda7c9cdab0eea7d69.png

    运行仿真,得波形如下图所示:

    (1)10HZ信号波形如下所示:

    e9d4272c26e09eae70fea534dc85cfc3.png

    (2) 25HZ信号波形如下所示:        

    3735be0a2b1a27ec03b0c1372c391a0f.png

    (3)45HZ信号波形如下所示:

    7a96146e0c8a27e50c94f0ce6fb4bb6e.png

    (4)滤波前波形如下所示:

    f53348bba61291ad36f26b655bd87083.png

    (5)滤波后波形如下所示:

    ba709b637c473b0d03ec486f65dda216.png

    由以上波形可知,10Hz、25Hz、45Hz叠加后通过通频带为20Hz~30Hz的FIR带通滤波器,输出与25Hz信号相似,低频和高频部分被阻隔。

    3e66af03ef705bfee73d3f7e2b286e2a.gif

    第三篇就到这里,本篇在数字滤波器的设计过程中,采用的设计方法是基于MATLAB的数字滤波器的设计。设计过程中充分发挥了MATLAB语言编程效率高的特点以及Simulink仿真能力强的特点,完成各种计算与图形绘制工作,使得数字滤波器的设计变得简便快捷。通过FIR数字滤波器的设计实例,说明如何利用MATLAB来完成数字滤波器的设计,设计结果的各项性能指标均达到指定要求,Simulink仿真验证了设计方法的正确性。本篇所述设计过程简便易行,具有很好的实际运用意义。

    END
    展开全文
  • 用频率采样法设计FIR滤波器

    千次阅读 2021-04-21 22:30:16
    有限长脉冲响应(FIR)数字滤波器由于设计灵活,...用窗函数法进行FIR滤波器设计的相关问题,目前的教材讲解较为细致,这里不再赘述。本文主要探讨用频率采样法设计FIR数字滤波器的相关问题,主要包括设计原理、性能...
  • 文章研究基于 FPGA、采用分布式算法实现 F IR滤波器的原理和方法 ,用 D SP B uilder设计了 一个 4阶 F IR滤波器 ,并用 Q uartusII进行硬件仿真 ,仿真结果表明设计 F IR滤波器的正确性 。 同时使用 IP Co re开发基于 ...
  • 由于FIR滤波器大多是具有线性相位的滤波器,即滤波器系数呈一定的对称性。 串行FIR实现 即串行实现滤波器的累加运算,每级延时单元与相应系数的乘积结果进行累加后输出,整个滤波器只需要一个乘法运算单元。 全串行...
  • 最近需要用到Fir滤波器,在网上也看了不少资料,发现一个稍微能用的(https://blog.csdn.net/BIGFatming/article/details/92386914),主要代码也是直接copy的,但是在使用过程中发现,三角窗的实现好像不对,而且只...
  • https://blog.csdn.net/weixin_38197667/article/details/89339983; Verilog上机实验题目3:FIR滤波器; 源码+注释;
  • 该方法先通过MATLAB设计出一个具有具体指标的FIR滤波器, 再对滤波器系数进行处理, 使之便于在FPGA中实现, 然后采用基于分布式算法和CSD编码的滤波器结构进行设计, 从而避免了乘法运算, 节约了硬件资源,其流水...
  • 分布式算法FIR滤波器

    千次阅读 2021-06-02 09:58:37
    目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但...
  • FIR滤波器工作原理及实现过程介绍

    万次阅读 多人点赞 2020-04-17 20:07:25
    FIR滤波器越长(有大量的抽头),滤波器的响应越好。然而这里有折衷的情况,由于大量的抽头增加了对逻辑的需求、增加了计算的复杂性,增加了功耗,以及可能引起饱和/溢出。 多相技术可以用于实现滤波器,拥有与传统...
  • 实验三用凯塞窗设计线性相位带通FIR滤波器中国地质大学(北京)实 验 报 告课程名称:数字信号处理 实验名称:用凯塞窗设计线性相位带通FIR滤波器姓 名: 张淑坤学 号: 1004133105班 级导教师:陈玉东评 分:实验时间...
  • 用MATLAB设计FIR滤波器

    千次阅读 多人点赞 2021-01-28 13:10:07
    用MATLAB设计FIR滤波器滤波器滤波器定义滤波器种类滤波器设计滤波器设计要求Matlab程序设计滤波器利用Matlab工具箱设计滤波器总结 滤波器 滤波器定义 “滤波器(filter),是一种用来消除干扰杂讯的器件,将输入或输出...
  • 通过ZYBOZ7开发板实现了分布式结构的FIR滤波器,实现了AD输入两路信号,通过开关输入可以分别单路输出、相加、相乘、相加后滤波、相乘后滤波的功能。
  • FIR滤波器由于没有反馈,比较不稳定,消耗资源比较多,但是却可以产生线性相位。 线性相位有什么用, 然后我简单说一下FIR滤波器原理(图说搬来的),原理很简单,我们设计一个低通滤波器,就是用一个窗函数去截...
  • 文章介绍了有限脉冲响应(FIR)数字滤波器的结构特点和...该方案用Matlab工具确定滤波器的系数,然后用VHDL语言实现了16 阶常系数FIR滤波器,并用MAX+plus II软件对滤波器进行了逻辑仿真,结果满足滤波器性能指标设计要求。
  • 目前FIR滤波器的一般设计方法比较繁琐,开发周期长,如果采用设计好的FIR滤波器的IP核,则开发效率大为提高。本方案基于Altera公司的CycloneⅡ系列芯片EP2C8Q208C8N,首先利用MATLAB中的滤波器函数fir2得出需产生的...
  • 基于Python的FIR滤波器

    千次阅读 2021-01-07 12:22:50
    import numpy as np from scipy.fftpack import fft from scipy import signal import matplotlib.pyplot as plt from matplotlib.pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文 ...
  • FIR滤波器及verilog代码

    千次阅读 2021-06-15 22:10:11
    有限冲激响应(FIR滤波器的系统函数: H(z)=y(z)/x(z)=a+b/z1+c/z2 H(z)=y(z)/x(z)=a+b/z^1 +c/z^2 H(z)=y(z)/x(z)=a+b/z1+c/z2 y(z)和x(z)分别表输入和输出信号;a,b,c表示抽头系数;z^1 和z^2 表示延迟,其中z^1...
  • fir 滤波器 matlab 仿真代码 1M主频和变频设置

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,107
精华内容 442
关键字:

fir滤波器 csdn