主要内容

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

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

需要MathWorks™产品:s manbetx 845

  • MATLAB®

  • 信号处理工具箱™

  • DSP系统工具箱™

  • 万博1manbetx仿真软件®

  • MATLAB®编码器™

  • 万博1manbetx仿真软件®编码器™

  • 嵌入式编码器®

介绍

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

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

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

指定的算法

参数均衡器算法分为两部分:模型规范和参数化数据规范。模型规范是一个Simulink子系统,它指定算法的信号流。万博1manbetx模型规范还访问MATLAB工作空间中存在的参数化数据。参数化数据规范是一个MATLAB脚本,它创建被Simulink模型访问的数据。万博1manbetx

对于本例,模型规范是Simulink模型的均衡器子系统万博1manbetxdspparameqcodegen.在这个子系统中,输入通过三个级联的均衡带。在进入双四滤波器块之前,每个频带内的系数变化通过漏积器进行平滑。每个Biquad滤波器块配置为使用不同的滤波器结构。选择不同的筛选器结构以显示本例后面代码生成中的差异。

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

通过模拟探索行为

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

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

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

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

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

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

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

有关模型和代码之间的可跟踪性的更多信息,请参阅跟踪生成代码万博1manbetx中的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.cbiquad_coeffs.h分别。将系数划分到单独的文件中,使其他软件组件能够访问这些数据。例如,在已部署的应用程序中,您可以安排另一个软件组件在运行时修改这些变量,然后再使用它们Equalizer_step ()

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

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

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

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

包生成的文件

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

有关打包文件以集成到其他环境的更多信息,请参见将代码迁移到另一个开发环境(嵌入式编码)