当前位置: 首页 > news >正文

频率响应说明

目录

数字域

模拟域


数字域

        freqz 使用基于 FFT 的算法来计算数字滤波器的 Z 变换频率响应。具体来说,语句

[h,w] = freqz(b,a,p)

        返回数字滤波器的包含 p 个点的复频率响应  

        在其最简单的形式中,freqz 接受滤波器系数向量 b 和 a 以及整数 p(该整数指定计算频率响应所用的点的数量)。freqz 以弧度/秒为单位返回向量 h 中的复频率响应,以及向量 w 中的实际频率点。

        freqz 可以接受其他参数,例如采样频率或由任意数量的频率点构成的向量。以下示例求 12 阶 Chebyshev I 类滤波器的 256 点频率响应。调用 freqz 将采样频率 fs 指定为 1000 Hz:

[b,a] = cheby1(12,0.5,200/500);
[h,f] = freqz(b,a,256,1000);

        由于参数列表包含采样频率,因此 freqz 返回向量f,其中包含在频率响应计算中使用的 0 到 fs/2 之间的 256 个频率点。

注意:此工具箱使用单位频率是 Nyquist 频率的约定,定义为采样频率的一半。所有基本滤波器设计函数的截止频率参数均用 Nyquist 频率进行归一化处理。例如,对于采样频率为 1000 Hz 的系统,300 Hz 等于 300/500 = 0.6。要将归一化频率转换为围绕单位圆的角频率,请乘以 π。要将归一化频转换回赫兹,请乘以采样频率的一半。

        如果在不带输出参数的情况下调用 freqz,它会同时绘制幅值对频率的图和相位对频率的图。例如,截止频率为 400 Hz、基于 2000 Hz 的采样频率的九阶 Butterworth 低通滤波器是:

[b,a] = butter(9,400/1000);

        要计算此滤波器的 256 点复频率响应,并使用freqz绘制幅值和相位,请使用

freqz(b,a,256,2000)

        如图所示:

         freqz 也可以接受由任意数量的频率点构成的向量,以用于频率响应计算。例如,

w = linspace(0,pi);
h = freqz(b,a,w);

        计算由向量 b 和 a 定义的滤波器在 w 的频率点处的复频率响应。频率点可以是 0 到 2π 范围内的值。要指定从零到采样频率的频率向量,请在参数列表中同时包括频率向量和采样频率值。

        下列示例说明如何计算和显示数字频率响应。

传递函数的频率响应
        计算并显示由以下传递函数描述的三阶 IIR 低通滤波器的幅值响应:

         将分子和分母表示为多项式卷积。求分布在整个单位圆上的 2001 个点上的频率响应。

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);

        绘制以分贝表示的幅值响应。

plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

        如图所示:

 FIR 带通滤波器的频率响应
        设计一个 FIR 带通滤波器,通带在 0.35π 和 0.8π 弧度/采样点之间,波纹为 3 dB。第一个阻带是从 0 到 0.1π 弧度/采样点,衰减为 40 dB。第二个阻带是从 0.9π 弧度/采样点到 Nyquist 频率,衰减为 30 dB。计算频率响应。同时以线性单位和分贝绘制其幅值。突出显示通带。

sf1 = 0.1;
pf1 = 0.35;
pf2 = 0.8;
sf2 = 0.9;
pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt('bandpassfir', ...
    'StopbandAttenuation1',40, 'StopbandFrequency1',sf1,...
    'PassbandFrequency1',pf1,'PassbandRipple',3,'PassbandFrequency2',pf2, ...
    'StopbandFrequency2',sf2,'StopbandAttenuation2',30);

[h,w] = freqz(bp,1024);
hpb = freqz(bp,pb);

subplot(2,1,1)
plot(w/pi,abs(h),pb/pi,abs(hpb),'.-')
axis([0 1 -1 2])
legend('Response','Passband','Location','South')
ylabel('Magnitude')

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),'.-')
axis([0 1 -60 10])
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

        如图所示:

 高通滤波器的幅值响应
        设计一个三阶高通 Butterworth 滤波器,它具有 0.5π 弧度/采样点的归一化 3-dB 频率。计算它的频率响应。用分贝表示幅值响应,并对其绘图。

[b,a] = butter(3,0.5,'high');
[h,w] = freqz(b,a);

dB = mag2db(abs(h));

plot(w/pi,dB)
xlabel('\omega / \pi')
ylabel('Magnitude (dB)')
ylim([-82 5])

        如图所示:

        使用 fvtool 重复计算。

fvtool(b,a)

        如图所示:

模拟域

        freqs 计算由两个输入系数向量 b 和 a 定义的模拟滤波器的频率响应。其运算类似于 freqz 的运算;可以指定要使用的频率点数量,提供由任意数量的频率点构成的向量,并绘制滤波器的幅值和相位响应。此示例说明如何计算和显示模拟频率响应。

模拟 IIR 低通滤波器的比较
        设计截止频率为 2 GHz 的五阶模拟 Butterworth 低通滤波器。乘以 2π 以将频率转换为弧度/秒。计算滤波器在 4096 个点上的频率响应。

n = 5;
f = 2e9;

[zb,pb,kb] = butter(n,2*pi*f,'s');
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);

        设计一个具有相同边缘频率和 3 dB 通带波纹的五阶 Chebyshev I 类滤波器。计算它的频率响应。

[z1,p1,k1] = cheby1(n,3,2*pi*f,'s');
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);

        设计一个具有相同边缘频率和 30 dB 阻带衰减的 5 阶 Chebyshev II 类滤波器。计算它的频率响应。

[z2,p2,k2] = cheby2(n,30,2*pi*f,'s');
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);

        设计一个具有相同边缘频率和 3 dB 通带波纹、30 dB 阻带衰减的五阶椭圆滤波器。计算它的频率响应。

[ze,pe,ke] = ellip(n,3,30,2*pi*f,'s');
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);

        对衰减绘图,以分贝为单位。以千兆赫为单位表示频率。比较滤波器。

plot(wb/(2e9*pi),mag2db(abs(hb)))
hold on
plot(w1/(2e9*pi),mag2db(abs(h1)))
plot(w2/(2e9*pi),mag2db(abs(h2)))
plot(we/(2e9*pi),mag2db(abs(he)))
axis([0 4 -40 5])
grid
xlabel('Frequency (GHz)')
ylabel('Attenuation (dB)')
legend('butter','cheby1','cheby2','ellip')

        如图所示:

         Butterworth 和 Chebyshev II 类滤波器具有平坦的通带和宽过渡带。Chebyshev I 类和椭圆滤波器转降更快,但有通带波纹。Chebyshev II 类设计函数的频率输入设置阻带的起点,而不是通带的终点。

相关文章:

  • C++教程系列之-01-C++概述与NOIP案例
  • Network 之十四 email 通信架构、Postfix 部署详解
  • Tableau8——数据操作
  • python基础知识笔记
  • 基于FPGA的PID控制器设计
  • 程序设计与c语言笔记(一)
  • 【.Net实用方法总结】 整理并总结.NET 中的 System.IO.Pipelines(管道)
  • 深度学习10——卷积神经网络
  • Mybatis 实现原理
  • matplotlib入门
  • JavaScript设计模式——建造者模式
  • Roson的Qt之旅 #124 QNetworkConfigurationManager网络配置管理
  • 天池Python练习02-位运算
  • 国内主机整车EEA架构汇总
  • Java刷题面试系列习题(十三)
  • [nginx文档翻译系列] 控制nginx
  • 【译】理解JavaScript:new 关键字
  • co模块的前端实现
  • Cumulo 的 ClojureScript 模块已经成型
  • HTML-表单
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Python打包系统简单入门
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • underscore源码剖析之整体架构
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 分类模型——Logistics Regression
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于for循环的简单归纳
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 如何使用 JavaScript 解析 URL
  • 实现菜单下拉伸展折叠效果demo
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $().each和$.each的区别
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (二)Linux——Linux常用指令
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (十三)Flask之特殊装饰器详解
  • (一)为什么要选择C++
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)原始图像数据和PDF中的图像数据
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET delegate 委托 、 Event 事件
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net反编译工具