主要内容

用生成的C代码去噪信号

这个例子展示了如何使用生成的C代码去噪信号wdenoise函数。演示了两种技术。第一种技术使用包装器函数调用wdenoise.第二种技术直接生成C代码wdenoise.根据您的工作流程,一种技术可能优于另一种技术。例如,为了简化大型MATLAB®代码的代码生成,可以使用包装器函数对代码进行模块化。

使用包装器函数

创建MATLAB函数denoiseSignal执行wdenoise并返回一个去噪信号。该函数有两个输入参数:一个一维信号和一个去噪方法。它将这些参数传递给wdenoise.该函数包含在包含该示例的目录中。的代码denoiseSignal遵循。

function out = denoissignal (input,denMthd) %#codegen out = wdenoise(input,'DenoisingMethod',denMthd);结束

% # codegen指示该函数用于代码生成。

使用codegen(MATLAB编码器)以生成MEX函数。要加快编译速度,可以通过设置- g选择。(在调试模式下,编译器会禁用一些优化。)当您没有指定构建目标时,代码生成默认为MEX代码生成。默认情况下,codegen命名生成的MEX函数denoiseSignal_mex.要允许生成MEX文件,请指定两个输入参数的属性(类、大小和复杂性):

  • 编码器。typeof(0,[1正])指定任意长度的包含实数的行向量值。

  • 编码器。typeof(“c”,[1正])指定任意长度的字符数组。

codegen- gdenoiseSignalarg游戏{编码器。typeof(0,[1正]),编码器。typeof(“c”,[1正])}
代码生成成功。

加载一个信号。

负载noisdopp情节(noisdopp)标题(“信号”

图中包含一个轴对象。标题为Signal的axis对象包含一个类型为line的对象。

将信号降噪两次denoiseSignal_mex.首先,使用去噪方法UniversalThreshold.然后,使用确定方法。阴谋的结果。

dn = denoiseSignal_mex (noisdopp,“UniversalThreshold”);dn2 = denoiseSignal_mex (noisdopp,“确定”);情节([dn的dn2])传说(“通用”“确定”

图中包含一个轴对象。轴对象包含两个类型为line的对象。当然,这些对象代表Universal。

利用MATLAB函数和MEX函数对信号进行去噪极大极小方法。确认结果相等。

dnA = denoiseSignal_mex (noisdopp,极大极小的);dnB = denoiseSignal (noisdopp,极大极小的);马克斯(abs (dnA-dnB))
ans = 6.2172 e15汽油

使用显式地

您也可以直接生成C代码wdenoise.生成一个MEX文件,使用db4小波。将调用生成的MEX文件wdenoise_mex

codegen- gwdenoisearg游戏{编码器。typeof(0,[1正]),coder.Constant(“小波”),coder.Constant (db4)}
代码生成成功。

对原始信号去噪。

dn3 = wdenoise_mex (noisdopp,“小波”“db4”);

要确认MEX文件接受可变长度输入,对原始信号的前200个样本去噪。

dn4 = wdenoise_mex (noisdopp (1:200),“小波”“db4”);情节([noisdopp (1:200) ' dn4 '])传说(“原始”“去噪”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表原始的,去噪的。

另请参阅

相关的话题