(48)MATLAB使用firls函数设计均衡器

文章目录

  • 前言
  • 一、频域均衡器的设计
  • 二、MATLAB源代码
    • 1.firls函数与freqz函数
    • 2.MATLAB仿真源代码
    • 3.代码说明
  • 三、仿真结果画图


前言

利用MATLAB的firls函数,根据所要求的频率向量和频响幅度向量,设计出所需的均衡器,使得包括滤波器在内的系统总的频率特性符合要求。给出完整的MATLAB设计源代码。


一、频域均衡器的设计

均衡器主要是用于作补偿的。所谓的均衡器,就是起补偿作用的滤波器。所谓的均衡器设计,其实就是设计符合要求频响的滤波器(系数)。

频域均衡就是对系统的进行频率特性的补偿。所以,均衡器的设计,就是根据系统的频率特性,设计一个补偿滤波器,使得包括滤波器在内的系统总的频率特性符合要求。具体而言,就是设计一个滤波器,使得其在其各段频率的频响为特定的值。当然,均衡器(也即滤波器)的阶数、形式(type I 或type II)也是设计的内容,不过,最主要的还是频响的设计。

例如,根据对某个音频系统的功率谱的测量,发现在2000Hz~4000Hz频谱范围内其功率谱幅度呈上开口抛物线形状,曲线底部最大衰减6dB,若要求在这个频谱范围内功率谱平坦,则可以设计一个在2000Hz~4000Hz之间的功率谱分量做最大6dB的增益提升,整个补偿频段的频响为下开口的抛物线形,左右对称。则经过均衡,整个系统的功率谱将符合平坦性要求。下面给出这个例子的MATLAB源代码。

二、MATLAB源代码

1.firls函数与freqz函数

在系统的设计与分析中,firls与freqz是两个非常重要的函数。其中,firls函数可以由频响计算得到fir滤波器的系数,而freqz函数用于由滤波器系数计算其频响。
使用freqz函数计算滤波器的频响见:
(47)MATLAB使用freqz画滤波器的频响

2.MATLAB仿真源代码

代码如下:


%% 参数设置
fs = 8e3;                                 % 采样率
f_nyquist = fs/2;                         % Nyquist频率
nTaps = 40;                               % 均衡器的阶数% 设置频率向量,范围:0到fs/2
f1 = 100:100:2000;                        % 频带划分
f2 = 2100:100:fs/2;                       % 频带划分
f = [f1, f2];                             % 频率向量,单位Hz% 设置功率谱增益,dB值
g1 = zeros(1,length(f1));
g2 = [0.8,2.2,2.82,3.89,4.34,5.07,5.35,5.74,5.86,5.91, ...5.86,5.58,5.35,4.73,4.34,3.38,2.82,1.53,0.8,0];
g = [g1, g2];                             % 功率谱增益向量应该和频率向量大小相等
%% 设计均衡器
Amp = 10.^(g/20);                         % 功率谱增益dB值转换为频响幅度线性值
b_eq = firls(nTaps,f/f_nyquist,Amp);      % firls要求频率向量对Nyquist频率归一化
%% 均衡器频响分析
N = 256;                                  % 滤波器频响向量的长度
[Hn,Fn] = freqz(b_eq,1,N);                % Hn:复频响向量;Fn:数字频率向量w
%% 对比画图
figure()
plot(f, g, 'LineWidth',1.5);
hold on
grid on
plot(Fn*fs/2/pi, 20*log10(abs(Hn)), 'r', 'LineWidth',1.5);
legend('期望的', '设计出来的','Location','NorthWest')
% axis([0 4000 -1 6]);
axis([1500 4000 -1 6]);
title('均衡器功率谱频响')
xlabel('频率(Hz)')
ylabel('功率谱幅度(dB)')

3.代码说明

(1)设置频带边沿向量(vector of frequency band edges)时,频带范围0到fs/2。若EQ要求的是在频段2kHz到4kHz之间做补偿,而采样率为16ksps,则频带向量也需要完整列出0Hz到8kHz之间的整个频带范围。

(2)若给出的频响增益是线性值,而非对数值,则不必进行转换,直接应用于firls。因为函数firls要求的入参是线性值,即在哪个频段放大或减小多少倍,而非加减多少dB。

三、仿真结果画图

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 构建、执行qmake、运行、重新构建、清除

qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…

Spring Cache Caffeine 高性能缓存库

​ Caffeine 背景 Caffeine是一个高性能的Java缓存库,它基于Guava Cache进行了增强,提供了更加出色的缓存体验。Caffeine的主要特点包括: 高性能:Caffeine使用了Java 8最新的StampedLock乐观锁技术,极大地提高了缓存…

k8s部署使用有状态服务statefulset部署eureka集群,需登录认证

一、构建eureka集群镜像 1、编写dockerfile文件,此处基础镜像为arm版本,eureka目录中文件内容:application-dev.yml、Dockerfile、eureka-server-1.0-SNAPSHOT.jar(添加登录认证模块,文章最后附上下载连接) FROM mdsol/java8-j…

Go使用exec.Command() 执行脚本时出现:file or directory not found

使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug,三个排查思路 : exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名,不允许出现参数 如果你是使用 Windows …

为什么要使用网络IO内存数据库?

1.摘要 学习Redis的时候,我有个疑问:Redis缓存是内存数据库,但是它部署在独立的一个服务器上,那么应用服务器访问redis不是要通过网络吗,那么是不是还不如从本地服务器读取数据库的效率 ?结论是&#xff1a…

[图像处理] 基于CleanVision库清洗图像数据集

CleanVision是一个开源的Python库,旨在帮助用户自动检测图像数据集中可能影响机器学习项目的常见问题。该库被设计为计算机视觉项目的初步工具,以便在应用机器学习之前发现并解决数据集中的问题。CleanVision的核心功能包括检测完全重复、近似重复、模糊…

ML 系列:机器学习和深度学习的深层次总结(17)从样本空间到概率规则概率

一、说明 概率是支撑大部分统计分析的基本概念。从本质上讲,概率提供了一个框架,用于量化不确定性并对未来事件做出明智的预测。无论您是在掷骰子、预测天气还是评估金融市场的风险,概率都是帮助您驾驭不确定性的工具。本篇将讲授概率的原理和…

论文阅读:Guided Linear Upsampling

今天介绍一篇有趣的文章,Guided Linear Upsampling,基于引导的线性上采样,这是发表在 ACM transaction on Graphic 的一篇工作。 Abstract 引导上采样是加速高分辨率图像处理的一种有效方法。在本文中,文章作者提出了一种简单而…

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…

问:MySQL表过大,你有哪些优化实践?

当MySQL单表记录数过大时,数据库的CRUD(创建、读取、更新、删除)性能会明显下降。为了提升性能,我们需要采取一些优化措施。本文将详细介绍几种常见的优化方案。 1. 限定数据的范围 描述 务必禁止不带任何限制数据范围条件的查…

优先算法——移动零(双指针)

目录 1. 题目解析 2. 算法原理 3.代码实现 题目: 力扣题目链接:移动零 1. 题目解析 题目截图如下: 不过要注意,这个移动题目要求是在原数组中原地操作,不能新额外开辟一个数组来修改。 2. 算法原理 这个原理可以称之为数…

node和npm

背景(js) 1、为什么js能操作DOM和BOM? 原因:每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境? v8引擎:负责解析和执行js代码 内置API:由运行环境提供的特殊接口,只能在所…

Python | Leetcode Python题解之第507题完美数

题目&#xff1a; 题解&#xff1a; class Solution:def checkPerfectNumber(self, num: int) -> bool:if num 1:return Falsesum 1d 2while d * d < num:if num % d 0:sum dif d * d < num:sum num / dd 1return sum num

使用预训练的BERT进行金融领域问答

获取更多完整项目代码数据集&#xff0c;点此加入免费社区群 &#xff1a; 首页-置顶必看 1. 项目简介 本项目旨在开发并优化一个基于预训练BERT模型的问答系统&#xff0c;专注于金融领域的应用。随着金融市场信息复杂性和规模的增加&#xff0c;传统的信息检索方法难以高效…

Python 爬虫项目实战:爬取某云热歌榜歌曲

一、网络爬虫的定义 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也成为网页蜘蛛或者网页机器人&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索以及内容抓取等。 二、爬虫基本原理 1、种子URL&#xff1a;爬…

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…

CCF-BDCI大数据与计算智能大赛TOP4-京东生鲜

2023 CCF 大数据与计算智能大赛《线上线下全场景生鲜超市库存履约一体化决策》top4南山论剑 摘要1 数据预处理1.1 数据整合1.2 数据划分 2 特征工程2.1 静态特征2.2 动态特征 3 方案设计3.1 数据构造3.2 模型训练3.3 模型融合3.4库存分配3.5 方案对比 链接: CCFBDCI-线上线下全…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的&#xff1a;采用一样的标定参数&#xff0c;matlab中和opencv中的立体矫正图像是一样的吗&#xff1f;不一样的话怎么让它们一样&#xff1f; 结论&#xff1a;不一样。后文为解决方案。 原因&#xff1a;注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

STM32 从0开始系统学习2

目录 C语言基础 位操作 extern 修饰符 typedef 封装复杂的类型 寄存器基础知识 STM32F103架构简单描述&#xff08;建议先不看&#xff09; 存储器映射 寄存器映射 寄存器地址计算 下面简单的聊一聊一些需要的前置知识基础。 C语言基础 位操作 这个在单片机里算基操…

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口&#xff08;禁用/启用&#xff09;前&am…