精华内容
下载资源
问答
  • 利用双线性变换设计IIR滤波器,首先要设计出满足指标要求的模拟滤波器的传递函数,然后由通过双线性变换可得所要设计的IIR滤波器的系统函数。 如果给定的指标为数字滤波器的指标,则首先要转换成模拟域指标。 低通...

    实验4 用双线性变换法设计 IIR 滤波器

    实验目的

    熟悉模拟  Batterworth滤波器设计和用双线性变换法设计IIR数字滤波器的方法。

    实验原理

    利用双线性变换设计 IIR滤波器,首先要设计出满足指标要求的模拟滤波器的传递函数 ,然后由 通过双线性变换可得所要设计的 IIR滤波器的系统函数 。

    如果给定的指标为数字滤波器的指标,则首先要转换成模拟域指标。

    1. 低通数字滤波器设计

    数字域与模拟域关系

    1. 高通数字滤波器设计

    数字域与模拟域关系

    实验内容及要求

    1. 编写用双线性变换法设计 Batterworth 低通 IIR数字滤波器的程序,要求通带内频率低于   时,容许幅度误差在 之内,频率在 到 之间的阻带衰减大于 15dB。其中要求参数  ,  ,  和 可由键盘输入。
    2. 以 为采样间隔,在屏幕上打印出数字滤波器的频率区间 上的幅频响应特性曲线( )。
    3. 在屏幕上打印出 的分子,分母多项式系数。

    实验结果

    实验代码如下:

    close all 
    clear all  
    %可输入
    %wp=input('wp: ');   %0.2*pi
    %ws=input('ws: ');   %0.3*pi
    %Rp=input('Rp: ');   %1
    %Rs=input('Rs: ');   %15
    wp=0.2*pi;
    ws=0.3*pi;
    Rp=1;
    Rs=15;
     
    Fs=1;
    wp1=2*Fs*tan(wp/2);  %归一化
    ws1=2*Fs*tan(ws/2);
    [N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');  %巴特沃斯滤波器
    %wp1模拟滤波器通带截止频率  wp2阻带截止频率  Rp通带最大衰减  Rs阻带最大衰减
    %N最小阶数  Wn滤波器固有频率
    [Z,P,K]=buttap(N);   %低通原型模拟滤波器
    %Z P K 零点矢量 极点矢量 增益
    [Bap,Aap]=zp2tf(Z,P,K);
    %Bap Aap 传递函数分子和分母的多项式系数
    [b,a]=lp2lp(Bap,Aap,Wn);    %b a 所设计的模拟滤波器系统函数的分子 分母系数
    [bz,az]=bilinear(b,a,Fs);   %bz az 所设计的数字滤波器系统函数的分子 分母系数
    [H,W]=freqz(bz,az,64);  %freqz函数自动将64个点均匀设置在[0~pi]之间 计算出64个点的频率响应存放于H向量中,64个频率存放在W向量中
    subplot(2,1,1);
    plot(W/pi,abs(H));  %幅频特性
    grid;
    xlabel('频率');
    ylabel('幅频响应特性曲线');
    subplot(2,1,2);
    plot(W/pi,20*log10(abs(H)));%幅频特性(dB)
    grid;
    xlabel('频率');
    ylabel('幅频响应特性曲线(dB)');
    bz
    az
     
    

    实验结果如下:

     

    bz =

     

        0.0007    0.0044    0.0111    0.0148    0.0111    0.0044    0.0007

     

    az =

     

        1.0000   -3.1836    4.6222   -3.7795    1.8136   -0.4800    0.0544

     

     

    实验5 用窗口法设计 FIR 滤波器

    实验目的

    了解一个实际滤波器设计过程,加深掌握用窗口法设计FIR 滤波器的原理和窗函数对滤波器性能的影响。

    实验原理

    设低通滤波器的时延为 ,即:

    这是一个以 为中心的偶对称的无限长非因果序列。这样一个无限长的序列怎样用一个有限长序列去近似呢?最简单的办法就是直接截取它的一段来代替它。例如把 到  的一段截取来作为 ,但是为要保证所得到的是线性相位滤波器。必须满足  的对称性,所以时延 应该取 长度的一半,即 

    但是一般来说,窗口函数并不一定是矩形函数,可以在矩形以内还对 作一定的加权处理,因此,一般可以表示为

    这里 就是窗口函数。这种对理想单位取样响应加窗的处理对频率响应会产生以下三点影响:

    (1)使理想特性不连续的边沿加宽,形成一过渡带,过渡带的宽度取决于窗口频谱的主瓣宽度。

    (2)在过渡带两旁产生肩峰和余振,它们取决于窗口频谱的旁瓣;旁瓣越多,余振也越多;旁瓣相对值越大,肩峰则越强。

    (3)增加截取长度 ,只能缩小窗口频谱的主瓣宽度而不能改变旁瓣的相对值;旁瓣与主瓣的相对关系只决定于窗口函灵敏的形状。因此增加 ,只能相对应减小过渡带宽。而不能改变肩峰值。肩峰值的大小直接决定通带内的平稳和阻带的衰减,对滤波器性能有很大关系。例如矩形窗的情况下,肩峰达 ,致使阻带最小衰减只有  分贝,这在工程上往往是不够的。怎样才能改善阻带的衰减特性呢?只能从改善窗口函数的形状上找出路,所以希望的窗口频谱中应该减少旁瓣,使能量集中在主瓣,这样可以减少肩峰和余振,提高阻带的衰减。而且要求主瓣宽度尽量窄,以获得较陡的过渡带,然而这两个要求总不能兼得,往往需要用增加主瓣宽度带换取决瓣的抑制,于是提出了海明窗、凯宽窗、切比雪夫窗等窗口函数。

    实验内容及要求

    用改进余弦窗设计一个FIR 线性相应相位低通数字滤波器,已知 ,  。编写调试程序,要求在幕幕上显示出单位脉冲响应 的数值,画出其幅度响应 的曲线。

    实验结果

    close all 
    clear all  
    wc=0.5*pi;
    N=21;
    r=(N-1)/2;
    n=0:N-1;
    hdn=sin(wc*(n-r))/pi./(n-r);
    if rem(N,2)~=0;
    hdn(r+1)=wc/pi;
    end
     
    wn=hamming(N);
    h=hdn.*wn';
    H=fft(h,512);
    w=2*[0:511]/512;
     
    subplot(3,1,1);
    stem(n,h,'.');
    title('h(n)');
    xlabel('n');
    ylabel('幅度');
     
    subplot(3,1,2);
    plot(w,abs(H));
    title('H(exp(jw))'); 
    xlabel('w/pi');
    ylabel('幅度'); 
     
    subplot(3,1,3);
    plot(w,20*log10(abs(H)));
    title('H(exp(jw))'); 
    xlabel('w/pi');
    ylabel('幅度(db)'); 
    

     

     

    实验6  IIR 和 FIR 滤波器过滤信号的实现及比较

    实验目的

    1、 掌握数字滤波器的计算机仿真方法。

    2、 通过观察对实际心电图信号的滤波作用,获得数字滤波的感性知识。

    实验原理

     是因果FIR 滤波器的单位脉冲响应,其长度为N,当输入为 时,输出序列 为:

     为低通滤波器 ,截止频率 ,采用海明窗设计出 

    若  是 滤波器,在通常内频率低于 时,最大衰减小于 ;在阻带内  频率区间上,最小衰减大于 。用双线性变换法设计得到 Batterworth滤波器系统函数 为:

    式中

    滤波器 由三个二阶滤波器 ,  和 级联组成,如下图所示:

    可得

     时,   

    实验内容及要求

    1、 编写FIR滤波器仿真程序,计算其对心电图信号采样序列 的响应序列 。

    2、 编写 IIR滤波器仿真程序,计算其对心电图信号采样序列 的响应序列 

    3、 在通用计算机上运行仿真滤波器程序,在屏幕上打印出  和  ,并进行比较。

    实验结果

    close all 
    clear all  
    x=[4 -2 0 -4 -6 -4 -2 -4 -6 -6 -4 -4 -6 -6 -2 6 12 8 0 -16 -38 -60 -84 -90-66  -32 -4 -2 -4 8 12 12 10 6 6 6 4 0 0 0 0 0 -2 -4 0 0 0 -2 -2 0 0 -2 -2 -2 -2 0];
    A=0.2318;
    B1=0.4164;
    C1=-0.6006;
    B2=0.3093;
    C2=0.1888;
    B3=0.2692;
    C3=-0.0349;
    a1=[1 B1 C1];
    b1=[A 2*A A];
    a2=[1 B2 C2];
    b2=[A 2*A A];
    a3=[1 B3 C3];
    b3=[A 2*A A];
    y1=filter(b1,a1,x);
    y2=filter(b2,a2,y1);
    y3=filter(b3,a3,y2);
    y=y3;
    subplot(3,1,1)
    plot(x);
    title('x(n)');
     
    subplot(3,1,2)
    plot(y);
    title('IIR  y2(n)');
     
    subplot(3,1,3)
    N=21;
    Window = hamming(N);
    wc=0.2*pi;
    hn=fir1(N-1,wc/pi,Window);
    yn=conv(x,hn);
    plot(yn);
    title('FIR  y1(n)');
    

     

     

    FIR 延迟  

    实验总结

    1. 数字滤波器作用:利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,把输入序列x(n)变换成一定的输出序列y(n)从而达到改变信号频谱的目的。
    2. 运算量 FIR 大原因:得到严格的线性相位,阶数高,运算次数高,延时比较大。
    3.   FIR 存储速度更快: FIR 可以采用非递归结构;可以利用快速傅里叶算法。

     

    通过本次试验,我明白了 FIR 和IIR的滤波原理,并了解了它们的区别。

     

     

    展开全文
  • IIR滤波器的设计原理与滤波器基础知识无限长单位脉冲响应(IIR)滤波器的设计方法数字滤波器的设计步骤matlab计算双线性变换法的H(z),通过这个函数将模拟滤波器的H(s)转变为数字滤波器的H(z)常用模拟低通滤波器...

    无限长单位脉冲响应(IIR)滤波器的设计方法

    在这里插入图片描述
    在这里插入图片描述
    从差分方程可以看出来滤波器的输出y(n)不仅和输入x(n)有关系还与之前的输出有关系
    无论是差分方程还是系统函数假定说所有的bi都为0,那么这个系统就是一个所谓的FIR系统,否则这个系统就是一个IIR系统,这时如果x(i)用单位脉冲序列表示的话,我们得到的y(n)就是无限长的。
    在这里插入图片描述

    数字滤波器的设计步骤

    1)按照实际需要确定滤波器的性能要求
    2)用一个因果稳定系统H(z)或h(n)去逼近这个性能要求,即求h(n)的表达式
    3)用一个有限精度的运算去实现这个系统的函数。包括选择运算结构:如级联型,并联型,卷积型,频率采样型以及快速卷积(FFT)型等

    matlab计算双线性变换法的H(z),通过这个函数将模拟滤波器的H(s)转变为数字滤波器的H(z)

    [b,a]=bilinear(NUM,DEN,Fs)
    将由向量NUM和DEN表示的S域中的系统函数用双线性变换法转变到Z域,数字滤波器的分子分母系数分别为b和a,Fs是数字滤波器的采样频率

    常用模拟低通滤波器的特性:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    巴特沃兹滤波器

    特点:具有通带内最大平坦的真费用特性,且随着频率f的增加,幅频特性A(Ω2)单调减小。
    在这里插入图片描述
    在这里插入图片描述
    当Ω=Ωc的时候,结果为1/2,这个点也被称之为半功率点,N是滤波器的阶数,N越大可以看到他的振幅平方函数越接近于一个矩形
    在过渡带内,阶次为N的巴特沃兹滤波器的幅度响应趋于斜率为-6NdB/倍频程的渐近线。
    下面具体分析一下N和我们所谓的具体函数之间的关系:
    把刚才的变量jΩ用S带进去,得到的振幅平方函数为:
    在这里插入图片描述
    求解得到的方程的根为:Sp就在以Ωc为半径的一个圆上,等分这个圆:
    在这里插入图片描述
    是N阶则就含有2N个极点,由我们的振幅平方函数就很容易得到我们的H(S),怎么得到,为了保证系统稳定,我们取他的左半平面一半的极点,这一半的极点知道他的半径知道他的幅角我们就很容易写出它的极点,写出极点之后就很容易得到他的系统函数
    在这里插入图片描述
    在这里插入图片描述
    先归一化再反归一化
    在这里插入图片描述
    在这里插入图片描述

    Matlab设计模拟巴特沃兹滤波器

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    切比雪夫滤波器

    它与巴特沃兹滤波器的区别就在于,他的通带和阻带会呈现一个波动特性,不像巴特沃兹滤波器一样是单调下降的,这样做最大的好处就是把误差分布在整个频带里面,大家都分担一定的误差这样大家的误差就都不会很大,因为我们滤波器的指标往往是通带的波动,它并不在乎在某一个频率点的波动有多小,而在乎的是在整个频带上面波动越小越好
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 1. 学习双线性变换法及脉冲响应不变法设计IIR数字滤波器的具体设计方法及其原理,利用双线性变换法或脉冲响应不变法设计低通、高通和带通其中一种IIR数字滤波器。 2. 观察双线性变换或脉冲响应不变法设计的滤波器的...
  • IIR滤波器的FPGA实现

    千次阅读 2019-06-26 13:22:01
    文章目录IIR滤波器的FPGA实现IIR原理IIR定义模拟滤波器设计双线性变换IIR系统结构FPGA实现MATLAB 获取系数FPGA实现FIR滤波器FPGA根据系统框图连线MATLAB生成仿真数据写testbeach仿真结果结语 IIR原理 IIR定义 IIR...

    IIR滤波器的FPGA实现

    生产实习著
    此篇实现的是直接1型7阶切比雪夫1型低通滤波器

    IIR原理

    IIR定义

    IIR(Infinite Impulse Response)无限脉冲响应数字滤波器,也叫作递归滤波器.
    由差分方程:
    y(n)=i=0Mbix(ni)i=1Naiy(ni) y(n) = \sum^M_{i=0}b_i x(n-i) - \sum^N_{i=1}a_i y(n-i)
    进行Z变换:
    Y(z)=i=0MbiziX(z)i=1NaiziY(z) Y(z)=\sum_{i=0}^{M} b_{i} z^{-i} X(z)-\sum_{i=1}^{N} a_{i} z^{-i} Y(z)
    得到系统函数:
    H(z)=Y(z)X(z)=i=0Mbizi1+i=1Naizi H(z)=\frac{Y(z)}{X(z)}=\frac{\sum_{i=0}^{M} b_{i} z^{-i}}{1+\sum_{i=1}^{N} a_{i} z^{-i}}
    至于为什么叫IIR,和FIR有什么区别,大家做一下z逆变换就知道了

    模拟滤波器设计

    要提及到模拟滤波器设计的理由很简单,就是因为设计IIR的一般是先设计好相应的模拟滤波器,然后再利用双线性变换转换成数字滤波器,在这里我们介绍一个切比雪夫1型滤波器:
    他的幅度平方函数长这个样:
    Gn(ω)=Hn(jω)=11+ϵ2Tn2(ωω0) G_{n}(\omega)=\left|H_{n}(j \omega)\right|=\frac{1}{\sqrt{1+\epsilon^{2} T_{n}^{2}\left(\frac{\omega}{\omega_{0}}\right)}}
    ω=ω0\omega = \omega_0时有:
    H(ω0)=11+ϵ2 \left|H\left(\omega_{0}\right)\right|=\frac{1}{\sqrt{1+\epsilon^{2}}}
    其中,Tn(ωω0)T_{n}\left(\frac{\omega}{\omega_{0}}\right)是n阶切比雪夫多项式,定义为:
    {Tn(ωω0)=cos(narccosωω0);0ωω0Tn(ωω0)=cosh(narccoshωω0);ω>ω0 \begin{cases} T_{n}\left(\frac{\omega}{\omega_{0}}\right)=\cos \left(n \cdot \arccos \frac{\omega}{\omega_{0}}\right) ; 0 \leq \omega \leq \omega_{0}\\ T_{n}\left(\frac{\omega}{\omega_{0}}\right)=\cosh \left(n \cdot \operatorname{arccosh} \frac{\omega}{\omega_{0}}\right) ; \omega>\omega_{0} \end{cases}
    当0<x<1时,Tn(x)T_{n}(x)在0和1之间变化 ;当x>1时,cos−是虚数,所以Tn(x)T_{n}(x)像双曲余弦一样单调地增加;∣Hn(w)∣对于0≤w/w0≤1呈现出在1和12ϵ2\frac1{2\epsilon^2}之间的波动;而对于w/w0〉1单调地减小。需要用三个参量来确定该滤波器:ε,w0和N。在典型的设计中,用容许的通带波纹来确定ε,而用希望的通带截止频率来确定w0。然后选择合适的阶次n,以便阻带的技术要求得到满足。

    上述的 滤波器设计原理看不懂没关系,因为模拟滤波器设计理论已经非常成熟了,所以我们可以借助matlab来解决
    详见:Matlab的IIR Filter Design

    除此之外,常见的模拟滤波器还有巴特沃斯,切比雪夫2型,椭圆型滤波器等,此处不做详述

    双线性变换

    这是利用反正切的方法将s域投影到z域,理解思路有很多种,大家不妨多方查阅一下资料,这里直接给出转换公式:
    H(z)=Ha(s)s=2Ts1z11+z1 H(z)=H_{a}\left.(s)\right|_{s=\frac{2}{T_{s}} \frac{1-z^{-1}}{1+z^{-1}}}

    IIR系统结构

    实际上从IIR的定义我们就可以直接得到直接1型:
    a

    我们不妨将ab调转过来,合并延时器,就可以得到直接2型:
    b

    不妨将系统函数定义式做一点变换,拆开每项系数:
    H(z)=Y(z)X(z)=i=0Mbizi1+i=1Naizi H(z)=\frac{Y(z)}{X(z)}=\frac{\sum_{i=0}^{M} b_{i} z^{-i}}{1+\sum_{i=1}^{N} a_{i} z^{-i}}
    to:
    H(z)=i=1Lγ0i+γ1iz1+γ2iz21+β1iz1+β2iz2=Ai=1L1+α1iz1+α2iz21+β1iz1+β2iz2=Ai=1LHi(z) H(z)=\prod_{i=1}^{L} \frac{\gamma_{0 i}+\gamma_{1 i} z^{-1}+\gamma_{2 i} z^{-2}}{1+\beta_{1 i} z^{-1}+\beta_{2 i} z^{-2}}=A \prod_{i=1}^{L} \frac{1+\alpha_{1 i} z^{-1}+\alpha_{2 i} z^{-2}}{1+\beta_{1 i} z^{-1}+\beta_{2 i} z^{-2}}=A \prod_{i=1}^{L} H_{i}(z)
    得到每一个子系统Hi(z)H_i(z),就可以用直接12型来表征子系统,然后再串起来,比如:
    c


    FPGA实现

    这里实现的是直接1型7阶切比雪夫1型低通滤波器.思路很简单,直接将ab两路当成两个FIR滤波器就完事了

    MATLAB 获取系数

    获取系数有两种方法:
    1. 利用函数cheby1,cheby2和butter等函数进行设计,建议回看我上面的matlab设计iir的帮助页面
    2. 利用滤波器设计工具箱 filterDesigner
    此处为了直观使用filterDesigner,设计完之后是这样的:
    d
    直接点Design Filter是设计出来的是直接2型的SOS(second-order sections)版也就是级联型.我们需要

    1. Edit-> Convert Structure 选Direct-Form I SOS
    2. Edit-> Convert to Single Section
    3. Ctrl +e (File->Export)导出系数

    如果不慎生成了SOS的话,也可以在命令行中输入:

    [Num,Den] = sos2tf(SOS,G);
    进行转换,其中Num(numerator)为分子,Den(Denominator)为分母

    然后对系数进行量化:

      Num = round(Num*2^9);      %最大值是2.8多,建议思考为什么是512
      Den = round(Den*2^9);
    

    FPGA实现FIR滤波器

    可以见我前面的FPGA/Verilog 设计FIR滤波器
    我这里为了重定义系数和后续好改成SOS,做了一些小功夫和去除了累加器,自己写了个加法树.

    module fir_7
    #(parameter WIDTH=4'd12 , c0 = 12'b0 , c1 = 12'b0 , c2 = 12'b0 , c3 = 12'b0 , c4 = 12'b0 , c5=12'b0 , c6=12'b0 ,c7=12'b0 )
    (
    input rst_n ,
    input clk   ,
    input signed [WIDTH-1'b1:0] din,
    output signed [2*WIDTH+2:0] dout
    );
    integer i=0;
    integer j=0;
    
    reg signed [WIDTH-1'b1:0] din_delay[7:0];
    always@(posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    		begin
    		for(i=0;i<8;i =i+1)
    			din_delay[i] <= 'b0;
    		end
    	else
    		begin
    		for(i=1;i<8;i =i+1)
    			din_delay[i] <= din_delay[i-1];
    		din_delay[0] <= din;
    		end
    end
    
    reg signed [2*WIDTH-1'b1:0] din_mult[7:0];
    always @ (posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    		begin
    		for(j=0;j<8;j =j+1)
    			din_mult[j] <= 'b0;
    		end
    	else
    		begin
    		din_mult[0] <= din_delay[0]*c0;
    		din_mult[1] <= din_delay[1]*c1;
    		din_mult[2] <= din_delay[2]*c2;
    		din_mult[3] <= din_delay[3]*c3;
    		din_mult[4] <= din_delay[4]*c4;
    		din_mult[5] <= din_delay[5]*c5;
    		din_mult[6] <= din_delay[6]*c6;
    		din_mult[7] <= din_delay[7]*c7;
    		end
    end
    
    reg signed [2*WIDTH:0] din_mult1[3:0];
    reg signed [2*WIDTH+1:0] din_mult2[1:0];
    reg signed [2*WIDTH+2:0] din_mult3;
    
    always @ (posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    		begin
    			din_mult1[0] <= 'b0; din_mult1[1] <= 'b0;din_mult1[2] <= 'b0;
    			din_mult1[3] <= 'b0;
    			din_mult2[0] <= 'b0; din_mult2[1] <= 'b0;din_mult3	 <= 'b0;
    		end
    	else
    		begin
    		din_mult1[0] <= din_mult[0] + din_mult[1];
    		din_mult1[1] <= din_mult[2] + din_mult[5];
    		din_mult1[2] <= din_mult[3] + din_mult[6];
    		din_mult1[3] <= din_mult[4] + din_mult[7];
    		
    		din_mult2[0] <= din_mult1[0] + din_mult1[1];
    		din_mult2[1] <= din_mult1[2] + din_mult1[3];
    		
    		din_mult3    <= din_mult2[0] + din_mult2[1];
    		end
    end
    assign dout = din_mult3;
    		
    endmodule
    

    FPGA根据系统框图连线

    这里比较简单,就给出个关键部分吧:

    fir_7 
    #(.WIDTH(4'd12),
     .c0(12'd1), .c1(12'd7), .c2(12'd21), .c3 (12'd36),
     .c4(12'd36), .c5(12'd21), .c6(12'd7) ,.c7(12'd1))
    zero (
    .rst_n(RST_N),
    .clk(CLK_50M),
    .din(Yin),
    .dout(Yout)
    );
    
    fir_7 
    #(.WIDTH(4'd12),
     .c0(12'd256) , .c1(-12'd510), .c2(12'd875), .c3 (-12'd971),
     .c4(12'd838), .c5(-12'd527), .c6(12'd231) , .c7(-12'd61))
    poly (
    .rst_n(RST_N),
    .clk(CLK_50M),
    .din(din),
    .dout(Xout)
    );
    

    最终生成的框图是这样的:
    e

    MATLAB生成仿真数据

    由于上几次的博客生成仿真数据的脚本不怎么好用,所以找了一个更好的jio本:

     %=============设置系统参数==============%
    %f1=1e6;        %设置波形频率
    f2=200e3;
    f3=1000e3;
    Fs=10e6;        %设置采样频率
    L=4096;         %数据长度
    N=12;           %数据位宽
    %=============产生输入信号==============%
    t=0:1/Fs:(1/Fs)*(L-1);
    %y1=sin(2*pi*f1*t);
    y2=0.5*sin(2*pi*f2*t);
    y3=0.5*sin(2*pi*f3*t);
    %y4=y1+y2+y3;
    y4= y2+y3;
    y_n=round(y4*(2^(N-2)-1));      %N比特量化;如果有n个信号相加,则设置(N-n)
    %=================画图==================%
    a=10;           %改变系数可以调整显示周期
    stem(t,y_n);
    axis([0 L/Fs/a -2^N 2^N]);      %显示
    %=============写入外部文件==============%
    fid=fopen('sinx.txt','w');    %把数据写入sin_data.txt文件中,如果没有就创建该文件  
    for k=1:length(y_n)
        B_s=dec2bin(y_n(k)+((y_n(k))<0)*2^N,N);
        for j=1:N
            if B_s(j)=='1'
                tb=1;
            else
                tb=0;
            end
            fprintf(fid,'%d',tb);
        end
        fprintf(fid,'\r\n');
    end
    fprintf(fid,';');
    fclose(fid);
    

    写testbeach

    这里只给出读取数据部分:

    integer i;   //数组坐标
    reg signed [11:0] stimulus[1:data_num];  //数组形式存储读出的数据
    initial 
    begin
        RST_N = 1'b1;
    	#60 RST_N = 1'b0;
    	#60 RST_N = 1'b1; 
        $readmemb("sinx.txt", stimulus);  //将txt文件中的数据存储在数组中
        i = 0;
        repeat(data_num*10) begin   //重复读取数组中的数据
            i = i + 1;
            din = stimulus[i%data_num]; 
            #PERIOD;         //每个时钟读取一次
        end
    	 $stop;
    end     
    

    仿真结果

    tg
    后仿在1.2V 0度模型下最高运行速率180Mhz(板子最高200M)

    结语

    因为生产实习和电赛,最近不得不备一些这种小东西,会一直更新到7.26号,各位看官有兴趣的可以追踪一下.

    如果csdn再不加入对verilog的支持,我就举家搬迁到简书或者自己搭一个博客了.

    如果你觉得有丶收获的话

    展开全文
  • IIR滤波器设计.docx

    2020-03-24 11:00:22
    实验目的:(1)熟悉巴特沃斯滤波器的频率特性;...(2)掌握脉冲响应不变法和双线性变换法设计IIR数字滤波器的具体设计方法及其原理; (3)熟练使用MATLAB进行滤波器仿真设计及幅频特性和相频特性分析;
  • ========================================== ...================================...熟悉用双线性变换法设计IIR数字滤波器的原理和方法; 掌握熟悉滤波器设计的计算机仿真方法; 观察用所设计的滤波器对一个复合信号的滤

    ==========================================
    博主github:https://github.com/MichaelBeechan
    博主CSDN:https://blog.csdn.net/u011344545

    ==========================================

    一、实验类型:设计性试验

    二、实验目的:

    1. 熟悉用双线性变换法设计IIR数字滤波器的原理和方法;
    2. 掌握熟悉滤波器设计的计算机仿真方法;
    3. 观察用所设计的滤波器对一个复合信号的滤波作用,获得数字滤波的感性认识。

    三、 实验结果及分

    >> fdatool
    (通带内频率低于0.2*PI,最大衰减小于1DB)
    

    在这里插入图片描述

    >> fdatool
    (通带内频率低于0.3*PI~PI,最大衰减小于15DB)
    

    在这里插入图片描述

    展开全文
  • 武汉理工大学MATLAB 武汉理工大学MATLAB原理与应用课程设计说明书 ...2 数字信号处理与图像处理基础知识 3 双线性变换法的原理和算法 4 巴特沃斯高通滤波器的性能指标 要求完成的主要任务:包括课程设计工作量及技术要求
  • 根据IIR(Infinitr Impulse Response)数字滤波器的设计原理,提出了IIR数字滤波器的快速设计方法,并在MATLAB环境下做出了实现快速设计IIR数字滤波器的设计系统。在该系统中,只需要将数字滤波器的技术能指标根据...
  • [数字信号处理]IIR滤波器的直接设计(C代码)

    万次阅读 多人点赞 2013-06-11 18:18:57
    回忆之前所说的IIR滤波器的直接设计,我们首先设计了巴特沃斯模拟滤波器,然后进行双线性变换,得到数字滤波器。我所使用的是巴特沃斯低通滤波器作为原型滤波器,其振幅特性如下所示。    首先,我们先...
  • 设计IIR数字滤波器

    2008-03-25 12:54:53
    1. 熟悉IIR数字滤波器的设计方法;... 4. 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 5. 掌握数字滤波器的计算机仿真方法; 6. 通过观察对实际心电图信号的滤波作用,获得数字滤波的感性认识。
  • 1.IIR滤波器的直接设计原理 不利用模拟滤波器,直接...回忆之前所说的IIR滤波器的直接设计,我们首先设计了巴特沃斯模拟滤波器,然后进行双线性变换,得到数字滤波器。我所使用的是巴特沃斯低通滤波器作为原型...
  • 实验五 无限冲激响应(IIR)数字滤波器的设计一、实验要求 熟悉用双线性变换法设计IIR 数字滤波器的原理与方法;掌握数字滤波器的计算机仿真方法。二、实验原理 1.利用模拟滤波器设计IIR数字滤波器方法 (1)根据所给出...
  • 熟悉了双线性变换法设计IIR数字滤波器的原理与方法。掌握了IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip()函数设计各种滤波器。学会观察分析滤波器输入输出数据波形,理解了数字滤波的概念。
  • IIR数字滤波器设计(数字信号处理)

    万次阅读 多人点赞 2018-12-18 16:31:38
    1.熟悉双线性变换法设计IIR数字滤波器的原理与方法。 2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 函数设计各种滤波器。 3.观察分析滤波器输入输出数据波形,理解数字滤波的概念...
  • 本论文首先介绍了滤波器的滤波原理以及模拟滤波器、数字滤波器的设计方法。重点介绍了IIR数字滤波器的设计方法。即脉冲响应不变法和双线性变换法。在此基础上,用MATLAB虚拟实现任意阶IIR数字滤波器。此设计扩展性好...
  • (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。 (3...
  • IIR数字滤波器设计及软件实现 Matlab

    热门讨论 2009-12-08 14:49:11
    (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。 (3)...
  • 实验五 无限冲激响应(IIR)数字滤波器的设计一、实验要求 熟悉用双线性变换法设计IIR 数字滤波器的原理与方法;掌握数字滤波器的计算机仿真方法。二、实验原理 1.利用模拟滤波器设计IIR数字滤波器方法 (1)根据所给出...
  • 熟悉双线性变换法设计IIR数字滤波器的原理与方法。2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 函数设计各种滤波器。3.观察分析滤波器输入输出数据波形,理解数字滤波的概念。二、实验原理及...
  • 本文介绍了IIR数字滤波器的三种设计方法,即通过模拟滤波器设计IIR数字滤波器、脉冲响应不变法和双线性变换法。主要介绍的是通过模拟滤波器转换设计IIR数字滤波器,因为现在模拟滤波器的设计比较成熟。
  • 实验3 IIR数字滤波器设计及软件实现

    千次阅读 2020-10-22 13:12:35
    Experiment3 IIR DF design using bilinear transformation 实验3 IIR数字滤波器设计及软件实现 一、实验安全规则(本实验项目安全注意事项) ...(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法。 (2..
  • 设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标; ②设计过渡模拟滤波器;③将过渡模拟...
  • 设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标; ②设计过渡模拟滤波器;③将过渡模拟
  • 熟悉用双线性变换法设计IIR 数字滤波器的原理与方法;掌握数字滤波器的计算机仿真方法。 二、实验原理 1.利用模拟滤波器设计IIR数字滤波器方法 (1)根据所给出的数字滤波器性能指标计算出相应的模拟滤波器的设计...
  • 引言:在用冲击响应不变法设计IIR滤波器的时候,由于由于复平面并不是带限信号,因此在频谱搬移的时候将不可避免地出现频谱的混叠,所以这我们提出另外一种将设计出来的模拟滤波器直接变换为数字滤波器的z变换的方法...
  • 15.3 直Ⅰ、Ⅱ型IIR滤波器的MATLAB相关函数 15.4 直Ⅰ、Ⅱ型结构的MATLAB实现 15.5 级联型结构 15.6 一阶、二阶子滤波器 15.7 一阶、二阶子滤波器的MATLAB实现 15.8 并联型结构 15.9 级联/并联型结构的MATLAB实现 ...
  • 实验2 基于MATLAB的数字滤波器设计 王建新 一实验目的 (1)掌握用窗函数法频率采样法及优化设计设计FIR滤波器的原理及方法 (2)熟悉线性相位FIR滤波器的幅频特性和相频特性,了解各种不同窗函数对滤波器性能的影响;...
  • 目录 一、实验目的: 二、实验内容及要求: 1. 双线性变换法设计IIR数字滤波器: 2. 窗函数法设计FIR数字滤波器: ...本实验掌握双线性变换法设计IIR数字滤波器的原理及具体设计方法;掌握窗函数...
  •  15.3直Ⅰ、Ⅱ型IIR滤波器的MATLAB相关函数  15.4直Ⅰ、Ⅱ型结构的MATLAB实现  15.5级联型结构  15.6一阶、二阶子滤波器  15.7一阶、二阶子滤波器的MATLAB实现 [1] 15.8并联型结构  15.9级联/并联型结构的...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

双线性设计iir滤波器的原理