EQ的实现_eq 界面 开发-程序员宅基地

技术标签: 均衡器  EQ  信号处理  

文章产品的配图来自深圳同创音频技术有限公司公开的数字音频处理器产品界面。

 

前言

 

EQ,我们常见的就是很多播放器上面带的一个均衡器,可以选择流行、重低、金属等等音乐风格,这个是参量均衡EQ。而广义的EQ包含很多种类型:

1. 参量(PEQ)

2. 低架(LowShelf)

3. 高架(HighShelf)

4. 低通(LowPass)

5. 高通(HighPass)

6. 全通(APF)

7. 带通(BPF)

 

从界面上看出,它是一个8段EQ,每段EQ分别有四个参数:

频率(Hz) , 增益(dB) , Q(品质因子)或者Oct(倍频程),还有一个开关

 

 

滤波器原型

 

所有的数字滤波器模型都是从模拟滤波器通过双线性变换得到而来。下面直接给出每个滤波器的原型和变换后它的系数计算。

LPF:        H(s) = 1 / (s^2 + s/Q + 1)            b0 =  (1 - cos(w0))/2            b1 =   1 - cos(w0)            b2 =  (1 - cos(w0))/2            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaHPF:        H(s) = s^2 / (s^2 + s/Q + 1)            b0 =  (1 + cos(w0))/2            b1 = -(1 + cos(w0))            b2 =  (1 + cos(w0))/2            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaBPF:        H(s) = s / (s^2 + s/Q + 1)  (constant skirt gain, peak gain = Q)            b0 =   sin(w0)/2  =   Q*alpha            b1 =   0            b2 =  -sin(w0)/2  =  -Q*alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaBPF:        H(s) = (s/Q) / (s^2 + s/Q + 1)      (constant 0 dB peak gain)            b0 =   alpha            b1 =   0            b2 =  -alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphanotch:      H(s) = (s^2 + 1) / (s^2 + s/Q + 1)            b0 =   1            b1 =  -2*cos(w0)            b2 =   1            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphaAPF:        H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)            b0 =   1 - alpha            b1 =  -2*cos(w0)            b2 =   1 + alpha            a0 =   1 + alpha            a1 =  -2*cos(w0)            a2 =   1 - alphapeakingEQ:  H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)            b0 =   1 + alpha*A            b1 =  -2*cos(w0)            b2 =   1 - alpha*A            a0 =   1 + alpha/A            a1 =  -2*cos(w0)            a2 =   1 - alpha/AlowShelf: H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)            b0 =    A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha )            b1 =  2*A*( (A-1) - (A+1)*cos(w0)                   )            b2 =    A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha )            a0 =        (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha            a1 =   -2*( (A-1) + (A+1)*cos(w0)                   )            a2 =        (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alphahighShelf: H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)            b0 =    A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha )            b1 = -2*A*( (A-1) + (A+1)*cos(w0)                   )            b2 =    A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha )            a0 =        (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha            a1 =    2*( (A-1) - (A+1)*cos(w0)                   )            a2 =        (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha

以上有一些中间变量,它们的计算公式如下:

A  = sqrt( 10^(dBgain/20) )A  =  10^(dBgain/40) (for peaking and shelving EQ filters only)          w0 = 2*pi*f0/Fsalpha = sin(w0)/(2*Q)                      

 

Q和Oct的关系

 

Oct是倍频程,1个倍频程相当于频率高了一倍。

2^oct = f2/f1;

Q:  q=fc/bw;

bw=f2-f1;

fc^2 =f1*f2;

Q= sqrt(2^oct)/(2^oct -1 )

 

如果想要了解更多知识,可以关注公众号【DSP-Tech】.你也可以加我微信,和我一起共同成长学习吧。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/georon/article/details/101103086

智能推荐

mybatis常用的动态sql标签_自定义过滤前缀动态sql标签 mybatis-程序员宅基地

文章浏览阅读5.8k次,点赞4次,收藏32次。说明我们在编写一些sql查询的过程时,根据条件进行sql的拼接是很麻烦而且容易出错。而mybatis动态sql标签,正好可以解决这个烦人的问题。mybatis常用的动态sql标签主要有以下几种:标签作用if单条件分支,相当于判断语句choose、when、otherwise多条件分支,相当于Java中的switch语句set、where、trim辅助条件判断,用于拼接语句foreach集合进行遍历(尤其是在构建 IN 条件语句的时候)bind创建_自定义过滤前缀动态sql标签 mybatis

django nginx 502 Bad Gateway_django 502 bad gateway-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏5次。按照这位大佬部署nginx 和uwsgi其实是没有问题。但我经常报错错误日志:upstream prematurely closed connection while reading response header from upstream检查nginx.conf的配置信息worker_processes 1;events { worker_connections 1024;}http { include mime.types; def_django 502 bad gateway

连接数据库经常出现ORA-12545错误-程序员宅基地

文章浏览阅读2.5k次。连接到RAC数据库的时候经常会出现ORA-12545错误,在METALINK上查询了一下,是Oracle的一个小bug。 在远端客户端连接RAC数据库时,通过统一的服务名连接时经常会出现ORA-12545错误。SQL> CONN NDMAIN@TESTRAC输入口令: ******已连接。SQL> CONN NDMAIN@TESTRAC输入口令: ******ERROR:ORA-_ora-12545

看完你不笑证明你不是真的程序员_程序员 两个杯子-程序员宅基地

文章浏览阅读2.3k次。3和同事QQ 聊天,对面说先去赶个代码,然后突然发过来一个“:wq”。啥叫职业病?职业病就是作为一个IT民工,如果有一天5点钟就下班,你会很无比内疚;如果连续两天5点下班,你会无比自责;如果连续三天5点下班,你会严重怀疑公司是不是准备把你给炒了。编程语言分为两种:一种是天天挨骂的,另一种是没人用的。搞 C 的看不起搞 C++ 的, 搞 C_程序员 两个杯子

商汤SenseAR四、图像追踪_keep texture at runtime-程序员宅基地

文章浏览阅读1.2k次。图像追踪_keep texture at runtime

说话人概述_speaker verification 综述-程序员宅基地

文章浏览阅读997次。技术专题】说话人识别(Speaker Verification)综述Posted on 2018-07-10 | In Speaker Verification | | Visitors: 404Words count in article: 4.3k | Reading time ≈ 16技术介绍技术应用声纹识别(speaker verification),也称做说话..._speaker verification 综述

随便推点

python与tensorflow的关系_Tensorflow不是一个普通的Python库-程序员宅基地

文章浏览阅读459次。编者按:2017年夏季,CMU CS硕士生Jacob Buckman入选Google AI居留计划,在谷歌总部开启了自己为期12月的培训生活,主攻NLP和强化学习。Jacob拥有丰富的编程经验,而且在机器学习上也造诣颇多。虽然从未接触过Tensorflow,但他相信依靠自己的学识背景,掌握一个工具是很轻松的一件事。很可惜,现实打了他的脸……简介自发布三年来,Tensorflow已经成为深度学习生态..._tensflow 和python 区别

springsecurity_spring security 自定义字段放在jwt_payload_key-程序员宅基地

文章浏览阅读124次。JWT令牌基本介绍和入门JWT令牌JWT令牌基本介绍和入门JWT介绍JWT生成1.生成密钥证书2.生成jwt令牌3.校验jwt令牌JWT介绍JWT令牌由三部分组成,每部分中间使用点(.)分割,比如aa.bb.cc;Header头部包括令牌的类型(即JWT)及使用的哈希算法(如HMACSHA256或RSA)举例如下:{ "alg": "HS256", "typ": "JWT"}//将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分。Payload部分_spring security 自定义字段放在jwt_payload_key

谜一样的牛-程序员宅基地

文章浏览阅读217次。谜一样的牛问题描述题意解释从题目在中可以知道,这n头牛排列在一起后,是按从矮到高排序的,身高是逐渐递增的。题目输入n=5,说明这5头牛的身高范围给定了,是在1~5之间。然后输入1 2 1 0,没有输入第一头牛前面有多少头牛比它矮,但是因为它是第一头牛,它前面不可能有牛,所以暗含第一头牛前面有0头牛比它矮。对于第二头牛来说,表示它前面有1头牛比它矮;对于第三头牛来说,它前面有2头牛比它矮;对于第四头牛来说,它前面有1头牛比它矮;对于第五头牛来说,它前面有0头牛比它矮。对于样例来说,不可能从前往后求第i_谜一样的牛

【高等数学】空间曲线积分、斯托克斯公式、参数方程-程序员宅基地

文章浏览阅读8k次,点赞6次,收藏17次。_空间曲线积分

HTTP头部POST表单详解-程序员宅基地

文章浏览阅读590次。2 POST /hello/checkUser.html?opt=xxx HTTP/1.1 方法的声明,Get,Post,Delete等 3 Accept: */* 4 Referer: http://localhost:8000/hello/index.html 表示是从什么地方跳转过来的,有时候做爬虫的时候会用到,有些网站用这个字段来...

LRU算法实现-程序员宅基地

文章浏览阅读130次。参考算法要求首先要接受一个capacity参数作为缓存的最大容量,然后实现两个API,一个是put(key,value)方法存放键值对,另一个是get(key)方法获取对应的val,如果key不存在则返回-1。算法设计要让put和get方法的时间复杂度为O(1),cache这个数据结构需要的条件:cache中的元素必须有时序,以区分最近使用的和最久未使用的数据,当容量满了之后要删除最久未使用的那个元素腾出空间;要在cache中快速找某个key是否已经存在并得到对应的val;每次访问cache

推荐文章

热门文章

相关标签