例题:

一个3阶低通滤波器由下面差分方程描述:

y(n) = 0.0181 x(n) + 0.0543 x(n-1) + 0.0543 x(n-2) + 0.0181 x(n-3) + 1.76 y(n-1) - 1.1829 y(n-2) + 0.2781 y(n-3)

画出这个滤波器的幅度和相位响应,并验证它是一个低通滤波器。



第一种方法是博文里给出的:

【 MATLAB 】用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析

第二个案例中,类比,如果我知道一个LTI系统的脉冲响应h(n),那么我也能求出它的频率响应:

k = [0:M];
n = [n1:n2];
X = x * (exp(-j * pi/M)).^(n'*k);

博文里面由具体的推荐,上述程序中X就是频率响应,也就是x的DTFT,如果x换成h,则X可以换成H。


第二种方法是,通过差分方程直接求出系统的频率响应,求解的方法是通过向量化的方法。

设某一LTI系统的差分方程表示为:

可以用一种简单的矩阵向量乘法来完成。如果在个等分频率上求,那么

注意,上述的b以及a向量都是行向量。


先给出第一种方法的脚本:

clc
clear
close allb = [0.0181,0.0543,0.0543,0.0181];
a = [1.0000,-1.7600,1.1829,-0.2781];
[h,t]=impz(b,a);
k = [0:500];
w = (pi/500)*k;
t = t';
h = h';
H = h * ( exp(-j*pi/500) ).^(t'*k);magH = abs(H);
angH = angle(H);subplot(2,1,1);
plot(w/pi,magH);
title('Magnitude part');subplot(2,1,2);
plot(w/pi,angH);
title('Angle part');

这种方法的思路是通过差分方程可以得到有理传递函数或者频率响应的分子和分母系数,通过impz函数得到脉冲响应,之后由脉冲响应h(n)得到频率响应。


clc
clear
close allb = [0.0181,0.0543,0.0543,0.0181];
a = [1.0000,-1.7600,1.1829,-0.2781];
m = 0:length(b)-1;
l = 0:length(a)-1;
k = 0:500;
w = (pi/500)*k;
nume = b * exp(-j * m' * w);
den = a * exp(-j * l' * w);
H = nume ./ den;
magH = abs(H);
angH = angle(H);subplot(2,1,1);
plot(w/pi,magH);
title('Magnitude Response');subplot(2,1,2);
plot(w/pi,angH);
title('Phase Response');

从图可以看出这确实是一个低通滤波器。

【 MATLAB 】使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法相关推荐

  1. python求列表的中位数_python中获取中位数的两种方法

    普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...

  2. python创建树结构、求深度_Python实现二叉树的最小深度的两种方法

    找到给定二叉树的最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 注意:叶子节点没有子树 Example: Given binary tree [3,9,20,null,null,15 ...

  3. 求1+2!+3!+...20!的两种方法

    方法一 单层循环的方式 <script>var sum = 0;var fac = 1;//原理:用sum 存储和 fac 用于计算阶乘for(var i = 1; i <= 20; ...

  4. C++求整数的个(十)位数的两种方法

    个位数 一.将这个整数转换为字符串,截取字符串的最后一位即为整数的个位数 #include<iostream> #include <sstream> using namespa ...

  5. 求100到999中的水仙花数(两种方法,c语言)

    #include<stdio.h> int main() {int a,b,c;for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(c=0;c<= ...

  6. matlab 求矩阵秩,求矩阵秩的两种方法及MATLAB的应用

    摘    要: 高等代数是一门逻辑思维比较强和理论知识比较深的学科, 它具有丰富的数学知识, 涉及许多重要的数学思想, 其在数学领域的应用很广泛, 如行列式.矩阵的相关计算和求解线性方程组的解方面的应 ...

  7. 用matlab计算稳态误差,利用Matlab求稳态误差的两种方法.

    利用Matlab求稳态误差的两种方法 摘要:稳态误差是系统控制精度或抗扰动能力的一种度量,它是稳态性能的一个重要指标.本文介绍利用Matlab的控制系统工具箱和Simulink工具箱求取系统误差稳态的 ...

  8. matlab中给信号添加高斯白噪声的两种方法,awgn计算过程,randn函数

    y=awgn(x,snr,px_dBW) 给信号x添加噪声功率为某个值的高斯白噪声. snr为信噪比,单位dB. px_dBW为信号x的指定功率(注意,是指定功率,而不是x本身的功率),单位dBW. ...

  9. Matlab对含噪声图像的滤波操作_两种噪声_三种滤波器_两种方法

    注释很重要 Matlab对含噪声图像的滤波操作. 噪声: 高斯噪声(正态分布) 均匀噪声 用到的滤波器: 高斯滤波器 盒型滤波器 中值滤波器 用到的两种方法: 直接conv2 fft2 %%C1 fi ...

最新文章

  1. 使用OpenCV4实现硬件级别加速
  2. windows RabbitMq 安装
  3. Linux查看端口、进程情况及kill进程
  4. egret键盘事件监听
  5. Vue里引入three.js
  6. python构建指数平滑预测模型_python/scikit/numpy中r指数平滑状态空间模型的替代方案...
  7. 【Elasticsearch】 es 集群发现机制
  8. mysql内测试连通性命令_怎么使用ping命令进行连通性测试
  9. Ubuntu 下 libev编译安装
  10. 如何去除chrome最常访问的网页
  11. Go程序设计语言读书笔记-1
  12. 小程序引入vant组件
  13. 41个机器学习面试题
  14. java8_我是如何优雅的使用Optional的
  15. ML - 线性回归(Linear Regression)
  16. 影响因子,计算机科学,影响因子最高计算机科学期刊(前50种).doc
  17. 微信账单怎么查?微信流水账单怎么打印
  18. Android手机如何修改DPI触发平板模式
  19. 软路由系统, OpenWrt (Lede), Ubuntu server, 爱快, ROS, Pfsense, m0n0wall, OPNsense
  20. 《回忆之前,忘记之后---写给我记忆中的汪峰》

热门文章

  1. JAVASCRIPT复制到剪贴板
  2. mencoder视频旋转
  3. BlogEngine.Net架构与源代码分析系列(转载)
  4. C#实现Web应用程序定时启动任务
  5. vue 添加完数据后刷新页面_页面刷新vuex数据消失
  6. c语言怎样在不足n位数的整数前补0,C# String 前面不足位数补零的方法
  7. mysql sqlserver对比_很用心的写了 9 道 MySQL 面试题
  8. 【Spring MVC学习】WebApplicationContext初始化的三种方式
  9. mysql 类似 user__类似于微博 用户最后一条动态的查询
  10. 如何去选取第一批要阅读的论文?_MPA论文如何选题?