使用生成的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'])传奇('普遍的',,,,'当然')
使用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'])传奇('原来的',,,,“变态”)