CEEMDAN—小波阈值联合去噪

函数或变量 'PinPu' 无法识别。

出错 CEEMDAN_Wavelet (第 66 行)
[f1,A1] = PinPu(y,fs);
下载了你的资源,但是里面报错,没有pinpu这个函数,请你帮我解决一下

这个频谱函数可以注释,代码就可以完全执行了,如果你需要的话,可以私信我

运算的大小进行一定的调整。当然,更好的选择是使用函数wavedec2,其输出为一个结构体,包含各级分解后的平均部分和细节部分,可以更好的进行后续处理。 (6)函数 myidwt2 中的两个输入 HA 和 HD,实际上应该为 Hr 和 Hc,它们分别表示行和列的高频子带与低频子带,但在函数调用的时候,并不需要将它们分开,直接将 HA 与 HD 的内容组合到一个数组,作为输入参数一起传递即可。这个问题其实是语言不当造成的。

段落2: CEEMDAN和CEEMD算法matlab代码 CEEMDAN_Wavelet代码部分如下:

function [NWIMF,nimf] = CEEMDAN_Wavelet(y,fs,TN,IMF_MAX) % 基于CEEMDAN算法和小波阈值去噪的信号分解 % [NWIMF,nimf] = CEEMDAN_Wavelet(y,fs,TN,IMF_MAX) % y :输入信号 % fs :采样率 % TN :小波阈值 % IMF_MAX :最大IMF分量数目 % NWIMF :去掉了噪声的IMF分量 % nimf :IMF分量数目

% 如果只有一个输入参数,就使用默认值 if nargin == 1
fs = 1; end

% 如果只有两个输入参数,就使用默认值 if nargin < 3
TN = 0.04; end

% 如果只有三个输入参数,就使用默认值 if nargin < 4
IMF_MAX = 200; end

N = length(y);

% 启动CEEMDAN分解过程 [s y1] = CEEMDAN(y); nimf=length(y1);

display('对各IMF分量使用小波阈值去噪...'); for j=1:nimf [f1,A1] = PinPu(y,fs); % 计算每个分量的主频率 tn = TN*median(abs(A1))/0.6745; % 根据主频率计算小波阈值 y2 = wden(y1{j},'sqtwolog','h',tn,'s','sln'); % 去噪 y1{j} = y2; disp(sprintf('%d ...',j)); if j > IMF_MAX, break; end % 控制IMF分量数目 end

% 合成去掉噪声的IMF分量 NWIMF = zeros(N,1); for j=1:nimf
NWIMF = NWIMF + y1{j}'; end

如您所述,代码中第66行调用了PinPu函数进行主频率计算。但是在参考资料中并没有提供该函数的代码。因此,此处报错是正常现象。需要您检查您的代码逻辑,是否有正确调用PinPu函数的必要。如果需要使用该函数,您需要手动编写该函数或者寻找其他来源的代码。