基于Simulink仿真平台的数字音效系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Simulink仿真平台的数字音效系统设计
陈伟;汤乐民;吴辉群;沈晓燕
【摘要】设计硬件电路来研究各种音效算法,其开发周期长、成本高、算法不便灵活修改.利用Simulink音频处理模块库、子系统、封装技术及Matlab函数库设计了具有Sehroeder混响、镶边、合唱、回声功能的数字音效系统.介绍了系统设计的具体步骤以及各个音效模块的参数和使用方法.结果表明,系统各音效模型层次清晰,参数可视化灵活设置,可以仿真实现不同的音效,有助于工程技术人员加快对各种音效算法的研究和开发.
【期刊名称】《电声技术》
【年(卷),期】2015(039)011
【总页数】8页(P29-36)
【关键词】数字音效系统;Simulink;模块;子系统;封装技术
【作者】陈伟;汤乐民;吴辉群;沈晓燕
【作者单位】南通大学医学院影像工程教研室,江苏南通226000;南通大学医学院影像工程教研室,江苏南通226000;南通大学医学院医学信息学系,江苏南通226000;南通大学电子信息学院,江苏南通226000
【正文语种】中文
【中图分类】TP393
市面上充斥着不计其数的延时、调制、失真类型的数字效果器,但是这些音效算法都是集成在芯片内部的ROM中,无论是国内还是海外,出于商业的目的,很少会
公开这些音效的算法。
研究者们只能结合电声学、心理学、音乐声学、计算机技术和数字信号处理技术等学科内容来研究各种音效算法。
虽然可以通过搭建硬件电路来研究各种音效算法,但其开发周期长、算法修改不够灵活。
本文借助Matlab强大的数字信号处理能力,充分利用其在音频处理方面的应用,在 Simulink仿真环境下,实时地对音效模型进行仿真实现,有效地帮助研究音效算法的人员加快对各种音效算法的理解和开发,通过对模型参数灵活设置可以实时仿真出各种不同音效。
利用Simulink平台设计的数字音效系统具有以下优点[1-2]:
(1) 通过简单的鼠标点击和拖拽操作即可实现对各种音效模型进行设计,易学易用,方便快捷。
(2) Simulink 建立的数字音效系统以方块图形式呈现,且采用层级模型,具有层次性,便于修改和扩展。
(3) 根据需要建立自定义音效子系统和自定义音效模块库,对音效模型进行封装,提高了模型的可重用性。
(4) 数字音效系统可以对音频信号进行实时的处理,而且参数可以灵活设置,可以加快对音效算法的研究和开发。
(5) 进一步的可以将Simulink设计的数字音效模型通过RTW自动生成C代码,
并将其定位到特殊用途的硬件,如DSP。
图1是利用Simulink 设计的数字音效仿真系统的基本结构。
图中信源为音频文件,可以是来自实时的传声器输入也可以来自工作空间保存的音频数据。
信宿为音效模型的输出模块,可以是用来实时显示时频域图的示波器模块,也可以是实时的扬声器输出或者保存的工作空间变量[3]。
系统则是具体的音效模型实现部分。
三者皆
由 Simulink 模块库中的标准模块设计而成。
3.1 音效运算模块
回声、混响、合唱等音效算法需要涉及到向量的加法、乘法运算,音频信号的延时
处理等。
Simulink提供了各种音频处理的模块[4],包括常用模块库(Commonly Used Blocks)、端口和子系统模块库(Port & Subsystems)、连续模块库(Continuous)、非连续模块库(DisContinuities)、查询模块库(Lookup Tables)、离散模块库(Discrete)、逻辑与位操作模块库(Logic and Bit Operation)、数学运算模块库(Math Operations)、模型检测模块库(Model Verification)、模型扩充工具箱模
块库(Model-Wide Utilities)、信号属性(Signal Attributes)、接收模块库(Sinks)、输入源模块库(Sources)等部分。
在Matlab命令行窗口中输入“Simulink”,再
回车,打开Simulink Library Browser窗口,在这个窗口中列出了按功能分类的
各种模块,如图2所示。
3.2 音效采集与播放模块
在Simulink的Signal Processing Blockset库中提供了有关与音频输入、输出,以及音频文件读/写模块。
3.2.1 音频采集模块
传声器(From Wave Device):在Window系统下,实时地从传声器录入音频信
号数据[5]。
Simulink在仿真过程中将“实时地”从音频接口读入一个连续的音频数据流数据,由于从声卡硬件输入音频数据是真正实时的,所以Simulink必须通过数据缓冲来达到与声卡的速率匹配,以保证读入的音频数据不丢失。
仿真开始时,音频设备开始以指定的采样速率向缓冲区写入数据,而From Wave Device模块
立即按照先进先出(FIFO)的原则从缓冲区读出数据,并将这些数据组成指定长度的数据帧输出。
如果缓冲区设置过小,可能造成Simulink来不及读输入的数据而造成数据丢失或硬件错误,这时可适当增加缓冲区加以解决,也可以增加数据帧长度来提高Simulink的读取效率。
From Wave Device模块的主要参数意义如下:(1) 采样率(Sample rate):默认为8 000次/s,可选择音频记录的标准采样率,也
可以设置其他非标准采样率。
本系统选择的音频采样率是44 100 Hz。
(2) 通道数(Number of channels):如果选择2,则使用双声道记录,需要音频设备也支持立体声录音。
(3) 每帧长度(Frame size):增加帧长度将提高Simulink读取效率,默认为512样值。
(4) 队列延迟(Queue duration):即硬件输入到缓冲区所能存入音频数据样值对应的时间,默认值为3 s。
(5) 数据格式(Device data type):可设置为unit8,int16,single格式,默认为double。
图3为From Wave Device参数设置对话框。
3.2.1 音频播放模块
扬声器(To Audio Device):从Wav音频文件中“实时”读入数据并输出。
对应命令为wavread,其主要设置参数如下[5]:
(1) 队列延时(Queue duration):即仿真开始时,Simulink输入到缓冲区所能存放的音频数据样值对应的时间,默认值为2 s。
如果播放声音存在间断,可适当增加队列延时。
还可以在To Wave Device之前加入Buffer模块以将数据以帧为单位送入硬件,从而提高Simulink与硬件的交互效率。
(2) 数据格式(Device data type):指定音频数据格式可设置为unit8,int16,single格式,默认为double。
(3) 初始输出延时:即初始输出到音频设备的延时值,默认为0.1。
(4) 采样值宽度(Sample width):默认为16。
(5) 每次写文件的最小样值数(Minimum number of samples for each read from file):默认为256。
图4为To Audio Device设置对话框。
随着设计的数字音效系统模型的复杂化,很难用一个单一的模型框图对系统进行仿真。
在这样情况下,可以通过子系统把一个大的音效模型分割成几个小的模型系统,会使整个音效模型变得更加简单,可读性也变得更高[6]。
4.2 封装
为了让设计的数字音效系统更加直观,可以将Simulink音效子系统封装成一个简单的模块[6],同时可以如同使用Simulink内部模块一样使用它。
这样可以将子系统内部功能隐藏起来,双击访问时只出现一个参数设置对话框,所需要的参数调用这个对话框来输入。
创建一个封装模块的主要步骤如下:
(1) 创建一个音效子系统。
(2) 选中该音效子系统,单击模型窗口中的【Edit】选单下的【Mask Subsystem】命令,将音效子系统转化为封装模块。
(3) 使用封装编辑器,设置用于介绍子系统的封装文本、参数设置对话框和显示子系统的图标。
5.1 合唱音效设计
设计合唱音效模型的步骤如下:
(1) 打开一个新的模型窗口,在Simulink模块库中找到正弦波(Sine Wave)模块和传声器(From Audio Device)模块、扬声器(To Audio Device)模块和输出到工作
空间(To Workspace)模块、可变分数延迟(Variable Fractional Delay)模块、加法(Add)模块、增益(Gain)模块和矩阵级联(Vector Concatenate)模块,并将它们移动到窗口中。
(2) 调整模块方向。
为了使模型连线方便且可读性好,应该把增益模块(Gain)和加
法模块(Sum)颠倒。
单击模块看到选中后的模块在四个角出现的小方框,再单击模型【Format】菜单下的【Flip Block】命令,则模块的出入端口和输出端口就互换
(3) 连接模块,得到如图5所示的模型图。
(4) 设置参数。
表1~8给出了各个模块的主要参数设置信息。
(5) 保存模型,命名为Chorus.mdl。
(6) 设置仿真终止时间可设为10。
(7) 对系统进行测试,调整修改模块参数,试听不同参数下合唱音效效果。
5.2 混响音效设计
系统构建采用Schroeder混响模型。
首先需要运用Simulink设计梳妆滤波器以及全通滤波器[7-8]。
为了简化模型的复杂度还利用了子模块及封装技术,使梳状滤波器和全通滤波器封装成一个简单的模块,访问时只出现一个参数设置对话框。
利用Simulink设计梳状滤波器的步骤及方法和建立合唱的方法相同,最终设计的梳状滤波器的Simulink模型如图6所示。
下面介绍如何利用Simulink创建梳状滤波器子系统的方法:
(1) 打开已经建立好的图6中的Comb模型。
(2) 使用范围框将要压缩的模型选中。
(3) 在模块窗口中单击【Edit】菜单下的【Create Subsystem】命令,Simulink 将会用一个子系统模块代替被选中的模块组,并将子系统命名为Comb,如图7所示。
(4) 如果想看Comb子系统的内容或对该子系统进行编辑,可以双击该子系统,会出现图6所示的内容。
同样的,可以设计全通滤波器的Simulink模型,其结构如图8所示。
最后将其封装成AllPass子系统。
最终设计的Simulink混响模型如图9所示,并将其命名为Reverberation.mdl。
5.3 镶边、回声音效
设计镶边和回声音效的步骤及方法和建立合唱的过程相似,并分别将其命名为Flanger.mdl和Echo.mdl。
图10、图11是最终镶边和合唱模型。
5.4 数字音效系统
以上介绍了利用Simulink设计合唱、混响、镶边以及回声音效。
下面将介绍如何将上述音效组合封装成一个综合的数字音效系统。
为了设计出图12综合音效系统需要添加模块Merge和Switch Case模块。
然后
仿照设计合唱音效的方法设计如图12所示的模型。
表9、表10分别给出了Merge模块和Switch Case模块具体的参数设置。
图12中Chorus,Reverberation,Echo以及Flanging各模块可以直接调用已有
模型。
Switch Case模块决定实现具体的某个音效,比如Switch Case参数是2
意味着音效系统将实现Reverberation模块功能。
同时为了使各个音效的参数修
改更加直观将各个音效进行了封装,以Reverberation模型为例封装的步骤如下:(1) 选中Reverberation子系统,单击窗口【Edit】选单下的【Mask subsystem】命令,系统会弹出一个Mask Editor对话框,如图13所示。
可以看到此编辑对话框有4个选项卡,以下是4个选项的具体设置。
1) Icon(图标)
Frame(边框)选项为Visible(可见)和Invisible(不可见)。
将其设为Visable。
2) Transparency(透明度)
选项有两种选择:Opaque(不透明,为默认属性)和Transparent(透明)。
如果采
用默认选项,模块端口的信息将被图标上的图形完全覆盖,如果想显示端口名称,则采用Transparent选项。
这里选择Transparent。
3) Totation(旋转)
属性有两种选择:Fixed(固定的,默认选项)和Rotates(旋转),后者在旋转模块时,
也将旋转盖模块的图标。
若选择了Fixed选项,则不旋转图标。
这里设置为Fixed。
4) Units
属性有3种选项:Pixel(像素点)、Autoscale(自动定标,默认)和Normalized(归
一化)。
Pixels选项会把绘图坐标系设为绝对坐标系,其效果为模块调整大小时,
图标大小不改变。
Autoscale选项使图标图形恰好充满整个模块。
Normalized选项会把绘图比例设在0和1之间。
5) Command(命令)
属性列出了图标的绘制命令。
可以利用Matlab脚本语言绘制图标显示的图形。
6) Parameters(参数)
编辑器的参数页面如图14所示。
参数页用于产生及修改封装混响子系统相应的参数。
该页分为两个区一个是对话框参数区(Dialog parameters)另一个是已选择参
数选项区(Options for selected parameter)。
7) Initialization(初始化)
初始化页允许用户输入Matlab命令来初始化封装子系统。
初始页分为两个区:对话框变量区(Dialog variables)和初始化命令区(Initialization commands)。
对话
框变量区显示在参数页中设置好的混响子系统封装参数。
本模块显示混响各个参数变量,如图15所示。
(2) 以上封装参数设置后,单击【OK】按钮。
然后双击子系统模块,打开新建参数对话框,如图16所示。
(3) 按照以上方法,对Chorus、Echo以及Flanging模块进行封装。
最终的音效系统如图17(a)所示,双击Effect模块可以弹出图17(b)中的对话框,用以选择不同的效果。
当点击仿真按钮时,可以实时的从传声器输入音频,在计算机的扬声器里可以实时听到相应的音效。
数字效果器的硬件电路设计比较繁琐,工程上需要不断的调试、修改才能设计出比
较好的数字效果器。
本文利用Simulink仿真平台设计了具有合唱、混响、镶边以及回声功能的数字音效系统,详细给出了音效系统设计的步骤以及各个音效模块的参数和使用方法。
此系统中各种音效模型层次清晰,参数可视化灵活设置,能够加快对各种音效算法的研究和开发。