主要内容

环绕声矩阵编码和解码

这个例子展示了如何使用矩阵编码从多声道音频信号中生成立体声信号,以及如何使用矩阵解码从立体声混合信号中恢复原始信道。这个例子说明了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中使用DataFlow执行域以在桌面上使用多个核心来提高模拟性能。金宝app要了解有关DataFlow以及如何使用多个线程运行Simulink模型的更多信息,请参阅金宝app使用数据流域的多核执行

指定数据流执行域

在Si金宝appmulink中,使用属性检查器将域参数设置为DataFlow将DataFlow指定为子系统的执行域。DataFlow域自动分区模型并使用多个线程模拟系统以进行更好的仿真性能。将域参数设置为DataFlow后,您可以使用DataFlow Simulation Assistant来分析您的模型以获得更好的性能。您可以通过单击打开DataFlow Simulation AssistantDataFlow Assistant.按钮下方自动帧尺寸计算属性检查器中的参数。

数据流域的多核模拟

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

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

弥补延迟

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

数据流仿真性能

要衡量使用数据流获得的性能改进,可以比较有数据流和没有数据流的模型的执行时间。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.