这个例子展示了如何使用生成的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)标题(“信号”)
将信号降噪两次denoiseSignal_mex
.首先,使用去噪方法UniversalThreshold
.然后,使用确定
方法。阴谋的结果。
dn = denoiseSignal_mex (noisdopp,“UniversalThreshold”);dn2 = denoiseSignal_mex (noisdopp,“确定”);情节([dn的dn2])传说(“通用”,“确定”)
利用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 '])传说(“原始”,“去噪”)