文档库 最新最全的文档下载
当前位置:文档库 › (完整版)数字音频均衡器设计毕业论文

(完整版)数字音频均衡器设计毕业论文

本科生毕业论文(设计)

数字音频均衡器设计

The design of digital audio equalizer

阮志强

指导教师:赵红伟(讲师)

云南农业大学昆明黑龙潭650201

学院:基础与信息工程学院

专业:电子信息工程年级: 2005

论文(设计)提交日期:2009年5月答辩日期:2009年6

答辩委员会主任:杨林楠

云南农业大学

2009年5月

目录

摘要 ······································································································ABSTRACT·······························································································1 前言 ······································································································2设计原理·································································································2.1均衡器分类 ························································································2.2数字滤波器 ························································································

2.2.1数字滤波器的原理简介 ···································································

2.2.2 FIR与IIR滤波器的比较与选择 ······················································

2.2.3 IIR数字滤波器的设计方法 ·····························································2.3均衡器的原理 ·····················································································2.4软件设计···························································································

2.4.1 数据流图·····················································································

2.4.2 模块划分 (1)

3软件实现 (1)

3.1界面设计 (1)

3.2均衡器模块的实现 (1)

3.3Filter函数 (1)

3.4实时显示的实现 (1)

4运行实例与实验分析 (1)

4.1运行实例 (1)

4.2实验分析 (2)

5.总结与展望 (2)

5.1总结 (2)

5.2展望 (2)

参考文献 (2)

致谢 (2)

附录 (2)

摘要

MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。通过Matlab 强大的信号仿真功能,分析数字音频均衡器的设计要求,对各种数字音频信号进行滤波处理,设计出一种比较合理的数字均衡器,最后对该数字均衡器进行综合测试并改进,使其达到要求的指标。

关键词:均衡器;MATLAB;数字滤波器;

ABSTRACT

MATLAB is very wide range of applications, including signal and image processing, communications, control system design, test and measurement, financial modeling and analysis, and computational biology and many other applications. Toolbox additional (separate MATLAB function provided by a dedicated set) extends the MATLAB environment to solve these applications within a specific type of problem.Through a strong signal simulation capabilities, a kind of reasonable digital equalizer has been designed by analysising the design requirements of digital equalizers and makig filtering deal to a variety of digital equalizers. At last,

the standard has been reached after the integrated test and improvement for this digital equalizer.

Key words: Equalizer;MATLAB;Digital filter;

1 前言

随着数字化技术的快速、深入发展,人们对数字化电子产品所产生的图像、图形以及声音等质量的要求越来越高。在声音的拾取过程及通过音响设备的传送过程中,由于设备或器件的原因,其幅度对频率的响应往往不一致,这样就达不到原来的听觉效果,音频均衡器是音响设备中常用的一种音效处理技术,目的是对某一频段内的信号进行增强或衰减,以改善音响设备输出的频响特性,提高听觉效果。一个好的均衡器能起到以下几个方面的作用:(1) 能校正音频设备所产生的频率失真;(2) 校正由于建筑学共振性的不均匀所带来的传输增益的频率失真;(3) 调整某些易反馈的频率成分,抑制声反馈,提高会场增益;(4) 在艺术创作中,利用它来刻画演员和乐器的音色修改,提高艺术效果。现有的许多播放器都具有均衡器的功能,如千千静听(如图1所示)等。通过调节均衡器可以得到最佳音乐状态。

图 1 千千静听的均衡器Figure 1 the equalizer of TT player

表 1频率的音感特征

Table 1 Frequency characteristics of sound sense

由此可见150Hz以下(低音)应是丰满、柔和而富有弹性;150Hz-500Hz(中低音)应是浑厚有力百不混浊;500Hz-5KHz(中高音)应是明亮透彻而不生硬;5KHz以上(高音)应是纤细,圆顺而不尖锐刺耳。

整个频响特性平直时:声音自然丰满而有弹性,层次清晰圆顺悦耳。频响多峰谷时:声音粗糙混浊,高音刺耳发毛,无层次感扩声易发生反馈啸叫。

2设计原理

2.1均衡器分类

2.1.1均衡器分类

均衡器分为三类:图示均衡器,参量均衡器和房间均衡器。

1.图示均衡器:亦称图表均衡器,通过面板上推拉键的分布,可直观地反映出所调出的均衡补偿曲线,各个频率的提升和衰减情况一目了然,它采用恒定Q值技术,每个频点设有一个滑动条,无论提升或衰减某频率,滤波器的频带宽始终不变。常用的专业图示均衡器则是将20Hz~20kHz的信号分成8段、10段、15段、27段、31段来进行调节。这样人们根据不同的要求分别选择不同段数的频率均衡器。一般来说10段均衡器的频率点以倍频程间隔分布,15段均衡器是2/3倍频程均衡器,31段均衡器是1/3倍频程均衡器,在比较重要的需要精细补偿的场合下,图示均衡器结构简单,直观明了,故在专业音响中应用非常广泛。

2.参量均衡器:亦称参数均衡器,对均衡调节的各种参数都可细致调节的均衡器,多附设在调音台上,但也有独立的参量均衡器,调节的参数内容包括频段、频点、增益和品质因数Q值等,可以美化(包括丑化)和修饰声音,使声音(或音乐)风格更加鲜明突出,丰富多彩达到所需要的艺术效果。

3.房间均衡器,用于调整房间内的频率响应特性曲线的均衡器,由于装饰材料对不同频率的吸收(或反射)量不同以及简正共振的影响造成声染色,所以必须用房间均衡器对由于建声方面的频率缺陷加以客观地补偿调节。

频段分得越细,调节的峰越尖锐,即Q值(品质因数)越高,调节时补偿得越细致,频段分的越粗则调节的峰就比较宽,当声场传输频率特

性曲线比较复杂时较难补偿。

2.1.2 图示均衡器的实现关键

此设计的实现关键是设计出满足一定性能指标的各个数字滤波器,构

成一个覆盖整个音频频段的滤波器组。

2.2数字滤波器

2.2.1数字滤波器的原理简介

数字滤波器的功能是把输入序列通过一定的运算,变换成输出序列。

数字滤波器一般可用两种方法实现:一种是根据描述数字滤波器的数学模

型或信号流程图,用数字硬件构成专用的数字信号处理机,即硬件方式;

另一种是编写滤波器运算程序,在计算机上运行,即软件方式。考虑到软

件的灵活性及易于实现,本文采用软件方式实现数字滤波器。

数字滤波器有无限冲激响应(IIR)和有限冲激响应(FIR)两种。下面分

别介绍:

(1) IIR滤波器

IIR滤波器的特点是:单位冲激响应h(n)是无限长的;系统函数

H(z)在有限长Z平面(0<|Z|<∞)有极点存在;结构上存在输出到输入的反

馈,也即结构上是递归型的;稳定的IIR滤波器其全部极点一定在单位圆

内。其系统函数为

(计算机上实现时则需要用到差分方程的形式,如下

(2)

IIR滤波器有四种基本的网络结构,直接I型、直接II型、级联型与并联型。

(2) FIR滤波器

FIR滤波器的特点是:系统的单位冲激响应h(n)是个有限长序列;系统函数|H(z)|在|z|>0处收敛,极点全部在z=0处(即FIR一定为稳定系统);结构上主要是非递归结构,没有输出到输入反馈。但有些结构中也包含有反馈的递归部分。其系统函数的一般形式为

(3)

对应的差分方程为

(4)

FIR系统的基本结构有直接型、级联型、快速卷积型、频率取样型等。

2.2.2 FIR与IIR滤波器的比较与选择

IIR滤波器可以用比FIR滤波器少的阶数来满足相同的技术指标,这样,IIR滤波器所用的存储单元和所用的运算次数都比FIR滤波器少。FIR 滤波器可得到严格的相位,而IIR滤波器不能得到。事实上,IIR滤波器的选频特性越好,它的相位的非线性就越严重。因此在需要严格线性相位的情况下应该选择FIR滤波器。IIR滤波器可利用模拟滤波器现成的设计公式、数据和表格,因而计算工作量较小,对计算工具要求不高。FIR滤波器没有现在的设计公式,对计算工具要求较高,需要借助计算机来设计。另外,IIR滤波器主要是设计规格化的、频率特性为分段常数的标准低通、高通、带通、带阻和全通滤波器,而FIR滤波器可设计出理想正交变换器、理想微分器、线性调频器等各种网络,适应性较广。

总之,IIR和FIR这两种滤波器各有特点,在实际应用中空间选择中哪种滤波器,就从多方面的因素来考虑。对于数字均衡器,一方面是用于

处理语音信号,另一方面需要用到频率特性分段的带通滤波器,因此选用IIR滤波器。下面介绍IIR滤波器的设计方法。

2.2.3 IIR数字滤波器的设计方法

设计步骤大致分以下三步:

(1) 设计模拟滤波器。根据实际需要确定滤波器的参数,利用的滤波器的设计公式设计出模拟滤波器并得到其传递函数H(s),常用的滤波器有巴特沃斯滤波器、椭圆滤波器和切比雪夫滤波器;

(2) 将模拟滤波器转换成数字滤波器。利用冲激响应不变法或双线性变法将H(s)转换成H(z),不同的设计方法对应于不同的s平面到z平面的映射公式;

(3) 频率变换。上述方法得到的是低通滤波器,利用变换公式作频率变换得到高通、带通滤波器。

2.3均衡器的原理

均衡器的基本功能是调节各频段的信号强弱,为了满足该功能,本文采用如下的方法:

Step1:设计出对应八个频段的八个带通滤波器;

Step2:对原始信号分八路用八个带通滤波器进行滤波;

Step3:将八个滤波器的滤波结果加权求和,权值的设计与均衡器的调节要求一致。

这样最终得到的结果便是所需要的均衡结果。设原始输入信号为x(n),第i路的输出信号为,第i路的权值为,均衡器的输出信号为y(n),则有

(5)

(6)

式中,、为滤波器的参数,N为滤波器的阶数。

2.4 软件设计

2.4.1 数据流图

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处理的情况。设计数据流图时只需考虑系统必须完成的基本逻辑功能,而不用考虑具体实现,因而它是进行软件设计很好的出发点。

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。结合上一节的内容,可以得出软件的数据流图如图 2所示。

图 2 均衡器的数据流图

Figure 2 The DFD of equalizer

2.4.2 模块划分

模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。

在模块划分时应遵循如下规则:改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测。

本着上述的启发式规则,对软件进行如图 3所示的模块划分。

图 3数字均衡器的模块划分

Figure 3 Module division

如上图所以,将数字均衡器划分为三个模块:输入模块、滤波模块和图形显示模块。其中输入模块完成的功能是打开WA V格式文件,通过wavread这个函数读取音频文件,通过wavplay这个函数播放音频文件。滤波模块实现的功能是滤波器的生成和实时

图形显示模块则实现波形的实时显示和频谱的实时显示。

通过matlab提供的GUIDE工具为可视化编程工具,将三个模块有机的结合,实现均衡器的预期功能。

3软件实现

3.1界面设计

MATLAB是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。它提供的GUIDE工具为可视化编程工具,使得软件的界面设计像VB一样方便。故本文采用MATLAB作为主要编程语言实现数字均衡器。

为了实现预期的功能,设计如图 4所示的界面。

图 4 频谱分析仪的界面设计

Figure4 Interface design

左边最上面的部分为标题区,用于显示软件标题等信息,不具人机交互功能。

再往下是文件输入,只支持WA V格式的音频文件。“原声播放”用于播放输入的原信频信号,区别于滤波后的信号,用于对比滤波前后的信号。

再往下是均衡器区。八个滚动条对应八个带通滤波器的权值,在中间时为1,最下为0,最上为10。“滤波”后才能“播放”,这是考虑到MATLAB 对多线程机制支持得不好,不宜使用一边滤波一边播放的方法。左下角是条形图,它是许多音频软件使用的频谱输出方式。右边的上面是滤波器,可以指定各种类型与参数。“类型”单选框用于选择低通、带通、高通滤波器。“生成滤波器”可以产生一个符合条件的滤波器,并在下面的图中显示滤波器的频率特征曲线。“滤波”用于对输入的音频信号用生成的滤波器滤波。

再往下则分别是时域波形与频谱分析的图形显示,均为实时显示。

在界面设计时为避免错误的操作,在某些按钮不能使用时必须将其设置为不可用,而它们能够使用时立即设置为可用。例如,没有打开音频文件时“滤波”按钮不可用,打开后“滤波”按钮可用;点击“滤波”前,“播放”不可用,点击“滤波”并完成滤波后,“播放”则变为可用。

3.2均衡器模块的实现

均衡器模块功能是生成带通滤波器并对原信号滤波。为了便于程序的扩充与修改,将表 1中的频段数据独立出来,如下

handles.fband=[20 100 200 500 1000 2000 4000 8000 16000];%频段划分

均衡器的功能主要在“滤波”按钮的回调函数中实现,下面具体介绍

开始需要得到滤波器的参数:频带与阶数,如下

order=str2double(get(handles.order,'String')); %获得设定的阶数值

num=8; %共计8段滤波

fband=handles.fband;

接着就是产生滤波器并滤波了,每次滤波后产生的yi(n)如果都存到一个变量中,则需要8个这样的变量,对于输入信号量很大时将需要大量的内存空间,为此,本文采用累加的方式,这样只用一个变量去存储滤波结果。

nn=length(handles.y);

handles.yy=zeros(size(handles.y));

for i=1:num

if get(handles.butterworth,'Value')==1 %巴特沃斯滤波器

[b a]=butter(order,2*fband(i:i+1)/handles.Fs);

elseif get(handles.cheby1,'Value')==1 %切比雪夫1滤波器

[b a]=cheby1(order,0.5,2*fband(i:i+1)/handles.Fs);

elseif get(handles.cheby2,'Value')==1 %切比雪夫2滤波器

[b a]=cheby2(order,20,2*fband(i:i+1)/handles.Fs);

elseif get(handles.ellip,'Value')==1 %椭圆滤波器

[b a]=ellip(order,0.5,20,2*fband(i:i+1)/handles.Fs);

else

errordlg('No filter type chosen or filter type error!');

end

eval(sprintf('k=get(handles.band%d,''Value'');',i));

y=(9^k-1)/8*qfilter(b,a,handles.y); %滤波加权

handles.yy=handles.yy+y; %求和

guidata(hObject,handles); %保存数据

end

在程序中有一句y=(9^k-1)/8*qfilter(b,a,handles.y),作用是加权以便下一句的求和,其中k是从滚动条中得到的参数,从0到2,但需要的权值是从0到10,令w为需要的权,即,由于实际需要w为指数变化,故设

(7)

代入w=0, k=0; w=1, k=1; w=10, k=2解得a=1/8,b=9,c=-1,从而有上述代码。

3.3 Filter函数

MATLAB控制系统工具箱提供了一个filter函数,可以计算差分方程描述的系统的响应,其调用形式为:

y = filter(b,a,f)

(8)

其中,、分别是系统差分方程左、右端的系数向量,f表示输入向量,y表示输出向量。输出序列的长度与输入序列的长度相同。但是其运行速

度较慢,由于filter函数的执行速度是整个软件速度的瓶颈,故需要提高其速度。可以结合C++实现,以提高其速度,这里不再进一步研究。

3.4 实时显示的实现

软件的功能要求实时显示波形与频谱分析结果,这里采用分批处理的方法。即先取一批信号,将其播放出来,同时进行FFT,并绘出时域波形与频谱分析结果,然后取下一批信号……由于各批信号间的时间间隔很小,从而感觉像连续播放,而时域波形与频谱则是实时地变化。

该功能主要在“播放”按钮的回调函数中实现

N=length(handles.yy);

n=4096;

step=n/handles.Fs;

from=1;

to=n;

ymax=max(handles.y);

ymin=min(handles.y);

f=linspace(0,handles.Fs/2,n/2);

fband=handles.fband;

num=length(fband)-1;

tic

while to<=N;

y=handles.yy(from:to,:);

pause(step-toc*0.99);

wavplay(y,handles.Fs,'async');

tic

P=fft(y,n);

Pyy =2*abs(P)/n;

loglog(handles.axes1,f,Pyy(1:n/2));

axis(handles.axes1,[fband(1) fband(num+1) 1e-3 ymax]);

plot(handles.axes2,y);

ylim(handles.axes2,[ymin ymax]);

from=from+n;

to=to+n;

end

采用异步播放方式可以使得播放不占用主线程,从而使得播放效果不会很卡。为了使得播放流畅,需要与pause的使用结合,具体方法为用tic 和toc计算出其它代码运行时间,然后用播放时间减去其它代码运行时间,从而得到需要暂停运行的时间。

4运行实例与实验分析

4.1运行实例

图 5是程序的运行的一个实例,可以看到,基本上可以实现各个频段的均衡与调结。但是并不能完全滤掉某个频段的信号。MATLAB的filter 的运行时间为0.313秒,如图 6所示

Figure5 Examples of the results

Figure6 MATLAB run-time of the filter

下面分别分析程序运行实例中选择不同滤波器类型,所给出的频谱反映的意思。如图7所示,滤波器类型为低通滤波器,其条形图和频谱图反映只允许低频通过,其高频基本都被滤去,故实现了低通滤波器的功能。

图 7 低通

Figure7 lowpass

图8为选择带通滤波器时的运行界面,它的起始频率为200HZ,截止频率为400HZ,理想带通滤波器低于200HZ和高于400HZ的频率段都应被滤去,实际运行过程中有一部分频段的频率未被滤去,但已基本实现带通滤波器的功能。图9为选择高通滤波器时的运行界面,它和低通刚好相反,只允许高频的通过。

相关文档