主要内容

参数化音频均衡器的代码生成

这个例子展示了如何为将用于代码生成的三波段参数均衡器的算法规范建模。

所需MathWorks™产品:下载188bet金宝搏

  • MATLAB®

  • 信号处理工具箱

  • DSP系统工具箱

  • 金宝app仿真软件®

  • MATLAB®编码器™

  • 金宝app仿真软件®编码器™

  • 嵌入式编码器®

简介

参数均衡器常用于调整音频系统的频率响应。例如,参数均衡器可用于补偿在不同频率上有峰值和低谷的物理扬声器。

本例中的参数均衡器算法提供了三个二阶(双二次)滤波器,其系数可以调整以实现所需的频率响应。在模拟中使用一个用户界面来动态调整滤波器系数和探索行为。对于代码生成,系数变量被命名并放置在文件中,以便在目标处理器上运行时动态更改系数的其他软件组件可以访问它们。

下面几节将描述如何指定参数均衡器算法,如何通过模拟探索行为,以及如何生成和定制代码。

指定的算法

参数均衡器算法分为两部分:模型规范和参数化数据规范。模型规范是一个Simulink子系统,它指定了算法的信号流金宝app。模型规范还可以访问存在于MATLAB工作空间中的参数化数据。参数化数据规范是一个MATLAB脚本,用于创建可由Simulink模型访问的数据。金宝app

对于本例,模型规范是Simulink模型的均衡器子系统金宝appdspparameqcodegen.在这个子系统中,输入通过三个级联的均衡带。每个波段内的系数变化通过一个漏积分器平滑,然后传递到一个双角滤波器块。每个Biquad Filter块配置为使用不同的过滤器结构。选择不同的过滤器结构以显示本例后面代码生成中的差异。

对于本例,参数化数据规范是MATLAB脚本dspparameq_data.m.这个MATLAB脚本指定了初始滤波器系数以及代码生成属性。当您打开模型时dspparameqcodegen,模型的PreLoadFcn回调函数配置为运行dspparameq_data.m在MATLAB工作空间中创建参数数据的脚本。

通过模拟探索行为

您可以使用模拟测试平台来探索算法的行为。在本例中,测试台由仿真模型、dspparameqcodegen,以及用MATLAB编写的自定义用户界面(UI)。

这个UI可以通过点击“Launch Parameter Tuning UI”链接来启动。该UI可在仿真过程中动态调整MATLAB工作空间中的系数参数数据。

为均衡器子系统生成C代码

一旦实现了所需的模拟行为,就可以根据算法规范为均衡器子系统生成C代码。此模型被配置为显示一些可从Embedded Coder产品访问的常见代码生成定制。这些定制简化了代码审查和集成过程。以下部分展示了此模型的一些代码定制,并提供了对文档的参考,这些文档更详细地描述了这些定制。

要生成C代码,右键单击均衡器子系统,选择C/ c++ code > Build This subsystem,然后在提示输入可调参数时单击Build按钮。你也可以通过点击以下超链接来生成代码:为均衡器子系统生成代码

带有与模型的链接的代码生成报告

该模型被配置为生成一个HTML报告,该报告可用于导航生成的源文件和头文件。报告还支持生成的代码和模型之间的双向链接。例如,每个Biquad Filter块被配置为实现不同的过滤器结构。您可以通过右键单击任何Biquad Filter块,然后选择C/ c++ code > Navigate to C/ c++ code,从该块跟踪到相关的代码。

有关模型和代码之间可追溯性的更多信息,请参见在生成的代码金宝app中跟踪Simulink模型元素(嵌入式编码)

调用生成的代码

通过调用模型初始化和模型步骤函数,可以将生成的代码集成到应用程序中。一个例子ert_main.c文件,该文件显示如何调用生成的代码。请注意下面的示例main ()调用Equalizer_initialize ()初始化状态。这个例子rt_OneStep ()显示周期机制(如中断)如何调用Equalizer_step ()从文件中Equalizer.c

有关如何将生成的代码集成到另一个应用程序的更多信息,请参见将生成的独立可执行程序部署到目标硬件(嵌入式编码)

输入输出数据接口

参数化数据规范文件,dspparameq_data.m,创建而且MATLAB工作空间中的信号数据对象。这些数据对象与模型中的信号线相关联,并用于在生成的代码中指定相应变量的描述和存储类。例如,信号而且声明为全局变量Equalizer.c.要运行模型步骤函数,应用程序将数据写入,调用Equalizer_step ()函数,然后从

有关数据对象的更多信息,请参见使用数据对象向导创建用于代码生成的数据对象(嵌入式编码)

代码注释中的文本注释

您可以将模型中作为文本输入的设计文档插入到生成代码的注释中。的均衡器子系统包含带有关键字的注释文本S:描述.代码生成器识别文本以此关键字开始,并将关键字后面的文本作为注释插入到生成的代码中。

有关在代码注释中插入注释文本的详细信息,请参见在生成的代码中添加全局注释(嵌入式编码)

功能分区

为了简化所生成代码的导航,均衡器频带的每个子系统都被配置为原子的,并创建自己的函数。中可以看到调用顺序Equalizer_step ()函数。

有关自定义函数命名和放置的更多信息,请参见关于非虚拟子系统代码生成(嵌入式编码)

文件放置

参数化数据规范文件,dspparameq_data.m为MATLAB工作区中的系数创建参数数据对象。这些数据对象被配置为在单独的文件中定义和声明系数变量biquad_coeffs.c而且biquad_coeffs.h分别。将系数划分到单独的文件中可以使其他软件组件访问这些数据。例如,在已部署的应用程序中,您可以安排另一个软件组件在运行时修改这些变量,然后再使用它们Equalizer_step ()

有关数据对象的文件放置的更多信息,请参阅控制在生成的文件中全局数据定义和声明的放置(嵌入式编码)

系数变量注释中的滤波器设计参数

计算系数时(在参数化数据文件中或通过图形用户界面),滤波器设计参数存储在描述字段的系数参数数据对象。该模型被配置为将设计参数作为注释插入生成的代码中。这使得代码的审查人员可以轻松地识别用于设计过滤器的设计参数。

有关在生成的代码中自定义数据对象注释的更多信息,请参见在生成的代码中为变量添加自定义注释(嵌入式编码)

包生成的文件

HTML报告引用的生成文件存在于Equalizer_ert_rtw目录中。除了此目录中的文件外,集成到项目中可能还需要MATLAB应用程序安装目录中的其他文件。为了便于将生成的代码移植到其他环境,这个模型被配置为使用PackNGo特性,该特性将所有必需的文件打包到zip文件中Equalizer.zip.请注意,zip文件包含所有必需的文件,但也可能包含可能不需要的其他文件。

有关打包文件以集成到其他环境的详细信息,请参见将代码重新定位到另一个开发环境(嵌入式编码)