主要内容

使用生成的C代码的Denoise信号

此示例显示了如何使用从wdenoise功能。证明了两种技术。第一个技术使用呼叫的包装函数wdenoise。第二种技术直接从wdenoise。根据您的工作流程,一种技术可能比另一种技术更喜欢。例如,要简化大型MATLAB®代码的代码生成,您可以使用包装函数来模块化代码。

使用包装器功能

创建MATLAB功能DeNoisesignal执行wdenoise并返回一个变性信号。该函数采用两个输入参数:一个1-D信号和一种denoising方法。它将这些论点传递给wdenoise。该函数包含在包含此示例的目录中。代码DeNoisesignal跟随。

函数out = deNoisesignal(input,denMthd)%#codegen out = wdenoise(输入,'denoisingmethod',denMthd);结尾

%#codegen指令表示该函数旨在用于代码生成。

利用代码根(MATLAB编码器)生成MEX功能。对于更快的汇编,请通过设置调试模式-G选项。(在调试模式下,编译器会禁用一些优化。)当您未指定构建目标时,代码生成默认为MEX代码生成。默认,代码根命名生成的MEX功能denoisesignal_mex。要允许生成MEX文件,请指定两个输入参数的属性(类,大小和复杂性):

  • coder.typeof(0,[1 Inf])指定包含真实长度的任意长度的行矢量双倍的值。

  • coder.typeof('c',[1 inf])指定任意长度的字符阵列。

代码根-GDeNoisesignal-args{coder.typeof(0,[1 inf]),coder.typeof('c',[1 inf])}}
代码生成成功。

加载信号。

加载noisdopp情节(noisdopp)标题('信号'

图包含一个轴对象。带有标题信号的轴对象包含类型线的对象。

使用两次信号denoisesignal_mex。首先,使用Denoising方法通用threshold。然后,使用当然方法。绘制两个结果。

dn = denoisesignal_mex(noisdopp,“通用threshold”);dn2 = denoisesignal_mex(noisdopp,'当然');图([DN'DN2'])传奇('普遍的',,,,'当然'

图包含一个轴对象。轴对象包含2个类型行的对象。这些对象代表通用,当然。

使用MATLAB函数和MEX函数使用该信号使用minimax方法。确认结果相等。

dna = denoisesignal_mex(noisdopp,'minimax');dnb = denoisesignal(noisdopp,'minimax');最大(ABS(DNA-DNB))
ANS = 6.2172E-15

明确使用

您也可以直接从wdenoise。生成一个MEX文件,该文件使用DB4小波。生成的MEX文件称为wdenoise_mex

代码根-Gwdenoise-args{coder.typeof(0,[1 inf]),coder.constant('wavelet'),coder.constant('db4')}
代码生成成功。

Denoise原始信号。

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

为了确认MEX文件接受可变长度输入,请将原始信号的前200个样本Denoise。

dn4 = wdenoise_mex(noisdopp(1:200),“小波”,,,,'db4');图([noisdopp(1:200)'dn4'])传奇('原来的',,,,“变态”

图包含一个轴对象。轴对象包含2个类型行的对象。这些对象代表原始的,denoed。

也可以看看

相关话题