forwardpeaktransform.m

来自「一些个 人收集的小波变换的程序」· M 代码 · 共 61 行

M
61
字号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                            %%
%%              前向峰值变换                   %%
%%                                            %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [H] = forwardPeakTransform(orgF, peakMap)

	N = length(orgF);

	truePeaks = zeros(1, N);
	numTruePeaks = 0;
	for k=1:N,
		if(peakMap(k)>0)
			numTruePeaks = numTruePeaks + 1;
			truePeaks(numTruePeaks) = k;
		end
	end

	numTruePeaks = numTruePeaks + 1;
	truePeaks(numTruePeaks) = N;


	H = orgF * 0;
	upLinkH = H;
	downLinkH = H;
	
	ptrUpLinkH = 1;
	ptrDownLinkH = 1;

	pos1 = truePeaks(1);
	upLinkH(1:pos1) = orgF(1, 1:pos1);

	ptrUpLinkH = pos1;
	linkFlag = 1;

	for k=1:(numTruePeaks-1),
		linkFlag = (-1) * linkFlag;

		if(linkFlag > 0)
			currPos = ptrUpLinkH;
			pos0 = truePeaks(k);
			pos1 = truePeaks(k + 1);

			upLinkH(currPos:(currPos + pos1 - pos0)) = orgF(pos0:pos1) - orgF(pos0) + upLinkH(currPos);
			ptrUpLinkH = currPos + pos1 - pos0; 
		else
			currPos = ptrDownLinkH;
			pos0 = truePeaks(k);
			pos1 = truePeaks(k + 1);

			downLinkH(currPos:(currPos + pos1 - pos0)) = orgF(pos0:pos1) - orgF(pos0) + downLinkH(currPos);
			ptrDownLinkH = currPos + pos1 - pos0; 
		end

	end

 	len = ptrUpLinkH + ptrDownLinkH - 1 ;
	sft = upLinkH(ptrUpLinkH)  - downLinkH(1);
	H(1:len) = [upLinkH(1:ptrUpLinkH), downLinkH(2:ptrDownLinkH) + sft];

return;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?