主要内容

环绕立体声矩阵编码和解码

这个例子展示了如何使用矩阵编码从多声道音频信号中生成立体声信号,以及如何使用矩阵解码从立体声混合信号中恢复原始信道。这个例子说明了MATLAB®和Simulink®的实现。金宝app这个示例还展示了如何通过使用数据流执行域来提高性能。

介绍

矩阵解码是一种音频技术,它将一个有M个信道的音频信号解码为一个有N个信道(N > M)的音频信号,以便在一个有N个扬声器的系统上播放。原始音频信号通常是用矩阵编码器产生的,它将n通道信号转换为m通道信号。

矩阵编码和解码使相同的音频内容能够在不同的系统上播放。例如,环绕声多通道信号可以被编码成立体声信号。立体声信号可以在立体声系统上播放,以适应没有环绕立体声接收器的设置,或者如果有环绕立体声设备,也可以解码并作为环绕立体声信号播放[1]。

在这个例子中,我们展示了一个矩阵编码器,它用于将一个四通道信号(左、右、中间和环绕)编码为一个立体声信号。然后使用矩阵解码器重新生成四个原始信号。这个例子是在Dolby Pro Logic系统[2]中使用的编码和解码方案的一个简化版本。

金宝app仿真软件版本

audiomatrixdecoding模型实现了音频矩阵编码/解码的实例。

矩阵编码器的输入包括四个独立的音频通道(中间、左、右和环绕)。

双击音频通道子系统来启动调优对话框。该对话框使您能够控制右通道和左通道输入之间的相对功率,以及环绕通道的功率级别。

您也可以切换收听任何原始,编码或解码的音频频道,通过双击音频播放器选择器子系统,并从对话框下拉菜单中选择您所选择的通道。

矩阵编码器

矩阵编码器将四个输入通道编码成立体声信号。

注意,由于输入的左通道和右通道分别只对输出的左通道和右通道起作用,因此输出的立体声信号保持了左右通道之间的平衡。

环绕输入通道通过一个希尔伯特变压器,从而创建一个180度相位差之间的环绕元件馈送左和右立体声输出[2]。

您可以通过双击按钮来收听已编码的左右立体声信号音频播放器选择器子系统,并选择'编码左总'或'编码右总'通道。

矩阵解码器

矩阵解码器从编码后的立体声信号中提取出四个原始信道。

低通频率首先使用Linkwitz-Riley交叉滤波器分离。有关Linkwitz-Riley过滤器实现的更多信息,请参阅多波段动态范围压缩

左、右立体声通道分别通过到左、右输出通道。因此,在输出中,左通道和右通道之间没有分离损失。

中心输出通道等于立体声输入信号的和,从而抵消相移环绕左右分量。

首先利用立体声信号的差值推导出环绕声输出通道。由于原始输入中心信号对两个立体声通道的贡献相等,中心通道不泄漏到输出环绕信号。此外,请注意,原始的左和右信号贡献到环绕通道的输出。环绕信号被延迟10毫秒以达到优先效果[3]。

您可以收听解码环绕信号双击音频播放器选择器子系统和选择一个解码信号。

使用数据流域提高仿真性能

这个示例可以使用Simulink中的数据流执行域来利用桌面的多个核来提高模拟性能。金宝app要了解有关数据流和如何使用多线程运行Simulink模型的更多信息,请参见金宝app使用数据流域的多核执行

指定数据流执行域

在Si金宝appmulink中,通过使用属性检查器将domain参数设置为dataflow,您可以指定dataflow作为子系统的执行域。数据流域自动划分模型并使用多线程来模拟系统,以获得更好的模拟性能。一旦您将Domain参数设置为Dataflow,您就可以使用Dataflow Simulation Assistant来分析您的模型以获得更好的性能。单击“数据流模拟助手”数据流的助理按钮下方自动车架尺寸计算属性检查器中的参数。

数据流域的多核模拟

数据流仿真助手建议更改模型设置以获得最佳仿真性能。接受所建议的模型设置,旁边仿真性能的建议模型设置,点击接受所有.或者,您也可以展开该部分来单独更改设置。在“数据流模拟助手”中,单击分析按钮,开始对数据流域进行仿真性能分析。一旦分析完成,数据流模拟助手将显示数据流子系统在模拟期间将使用多少线程。

对于这个模型,助手显示一个线程,因为块之间的数据依赖关系阻止它们并发执行。通过对依赖于数据的块进行流水线处理,数据流子系统可以提高并发性以获得更高的数据吞吐量。Dataflow Simulation Assistant显示了管道延迟的推荐数量建议延迟.对于该模型,建议延迟为2。单击接受旁边的按钮建议延迟在数据流仿真助手中使用推荐的数据流子系统延迟。Dataflow Simulation Assistant现在将线程数显示为三个,这意味着数据流子系统中的块使用三个线程并行模拟。

弥补延迟

当延迟在数据流执行域中增加以打破块之间的数据依赖并创建并发时,该延迟需要在模型的其他部分中考虑。例如,与数据流子系统输出端口的信号进行比较或组合的信号必须延迟,以便与数据流子系统输出端口的信号及时对齐。在这个例子中,来自音频通道块的音频信号必须延迟到音频播放器选择器块,以与其他信号对齐进入音频播放器选择器块。为了补偿在数据流子系统上指定的延迟,使用延迟块将该信号延迟两帧。对于这个信号,帧长是1024。在延迟块中设置延迟值2048,以对齐来自Audio Channels块的信号和经过Dataflow子系统处理的信号。

数据流仿真性能

要衡量使用数据流获得的性能改进,可以比较有数据流和没有数据流的模型的执行时间。Audio Device Writer块是实时运行的,并将模型的模拟速度限制为实时。在测量执行时间时注释掉Audio Device Writer块。在使用Intel®Xeon®CPU W-2133 @ 3.6 GHz 6核12线程处理器的Windows桌面计算机上,该模型使用数据流域执行速度比原始模型快2.6倍。

MATLAB版本

HelperAudioMatrixDecoderSim是包含音频矩阵解码器示例的MATLAB函数的实现。它实例化、初始化并逐步遍历构成算法的对象。

这个函数audioMatrixDecoderApp包裹在HelperAudioMatrixDecoderSim并不断地调用它。

执行audioMatrixDecoderApp来运行模拟。请注意,模拟将一直运行,直到您显式地停止它为止。

audioMatrixDecoderApp启动一个设计用于与模拟交互的UI。与示例的Simulink版本类金宝app似,UI允许您调整右通道和左通道输入之间的相对功率,以及环绕通道的功率级别。通过改变UI中的“audio Output”下拉框的值,您还可以在收听任何原始、编码或解码音频通道之间进行切换。

UI上还有三个按钮——“重置”按钮将模拟内部状态重置为初始状态,“暂停模拟”按钮将保持模拟,直到你再次按下它。模拟可以通过关闭UI或点击“停止模拟”按钮来终止。

MATLAB编码器可以用来生成C代码的函数HelperAudioMatrixDecoderSim.为了为您的平台生成一个mex -文件,请执行该命令HelperMatrixDecodingCodeGeneration从一个有写权限的文件夹中。

通过调用包装器函数audioMatrixDecoderApp“真正的”作为参数,可以使用生成的mex -文件代替HelperAudioMatrixDecoderSim的模拟。在这个场景中,UI仍然在MATLAB环境中运行,但是主要的处理算法由一个mex文件执行。在这种模式下,性能得到了改善,而不会影响调优参数的能力。

参考文献

[1]https://en.wikipedia.org/wiki/Matrix_decoder

杜比专业逻辑环绕解码器:操作原理,罗杰·德雷斯勒,杜比实验室

[3]https://en.wikipedia.org/wiki/Precedence_effect