zoukankan      html  css  js  c++  java
  • MATLAB 笔记,关于Filter函数的功能和使用,求simple(冲激)和unit step(阶跃)响应

    在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积,用y=impz(p,d,N)求系统的冲激响应。
    实现差分方程
    先从简单的说起:
    filter([1,2],1,[1,2,3,4,5])
    实现 y[k]=x[k]+2*x[k-1]
    y[1]=x[1]+2*0=1%(x[1]之前状态都用0)
    y[2]=x[2]+2*x[1]=2+2*1=4


    a. 下面程序是用来实现h和x的卷积的,分别用了filter和conv函数,两者函数得出的结果一样。

    h = [3 2 1 -2 1 0 -4 0 3]; % impulse response
    x = [1 -2 3 -4 3 2 1]; % input sequence
    y = conv(h,x);
    n = 0:14;
    subplot(2,1,1);
    stem(n,y);
    xlabel('Time index n'); ylabel('Amplitude');
    title('Output Obtained by Convolution'); grid;
    x1 = [x zeros(1,8)];
    y1 = filter(h,1,x1);
    subplot(2,1,2);
    stem(n,y1);
    xlabel('Time index n'); ylabel('Amplitude');
    title('Output Generated by Filtering'); grid;
    要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。
    y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。

    b. 单位冲激响应:

    (1)用filter函数 
    a1=[1,0.75,0.125];
    b1=[1,-1];
    n=0:20;
    x1=[1 zeros(1,20)];
    y1filter=filter(b1,a1,x1);
    stem(n,y1filter);
    title('y1filter');
    xlabel('x');
    ylabel('y'); 

    (2)用conv函数 

    a1=[1,0.75,0.125];
    b1=[1,-1];
    x1=[1 zeros(1,10)];
    [h]=impz(b1,a1,10);
    y1conv=conv(h,x1);
    n=0:19;
    stem(n,y1conv,'filled')

    (3)用impz函数

    a1=[1,0.75,0.125];
    b1=[1,-1];
    impz(b1,a1,21);

    c. 单位阶跃响应:

    (1)用filter函数
    a1=[1,0.75,0.125];
    b1=[1,-1];
    n=0:20;
    x2=ones(1,21);
    y1filter=filter(b1,a1,x2);
    stem(n,y1filter);
    title('y1filter_step');
    xlabel('x');
    ylabel('y');

    (2)用conv函数

    a1=[1,0.75,0.125];
    b1=[1,-1];
    x2=ones(1,21);
    [h]=impz(b1,a1,20);
    y1=conv(h,x2);
    y1conv=y1(1:21); %为何y1conv要取y1中1:21的值,解释见
    n1=0:20; %y2à单位阶跃响应à用conv函数中注释
    stem(n1,y1conv,'filled');
    title('y1conv');
    xlabel('n');
    ylabel('y1[n]');

    (3)用impz函数

    a=[1,0.75,0.125];
    b=1;
    impz(b,a)

    即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。

    而y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。

    y=impz(p,d,N)是用来实现冲击响应的,d和p的定义见filter,N表示冲击响应输出的序列个数
  • 相关阅读:
    BZOJ4754 JSOI2016独特的树叶(哈希)
    锦标赛游戏 解题报告
    nowcoder OI 周赛 最后的晚餐(dinner) 解题报告
    Prufer序列
    牛客网 Wannafly挑战赛27 蓝魔法师
    替罪羊树板子
    AT1984 Wide Swap
    洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告
    CF858F Wizard's Tour 解题报告
    OI中组合数的若干求法与CRT
  • 原文地址:https://www.cnblogs.com/sonictl/p/6735640.html
Copyright © 2011-2022 走看看