对图像进行emd分解程序得到各个imf分量

对图像进行emd分解程序得到各个imf分量,第1张

emd.m文件

function imf = emd(x)

% Empiricial Mode Decomposition (Hilbert-Huang Transform)

% EMD分解或HHT变换

% 返回值为cell类型,依次为一次IMF、二次IMF、...、最后残差

x = transpose(x(:))

imf = []

while ~ismonotonic(x)

x1 = x

sd = Inf

while (sd >0.1) || ~isimf(x1)

s1 = getspline(x1)% 极大值点样条曲线

s2 = -getspline(-x1) % 极小值点样条曲线

x2 = x1-(s1+s2)/2

sd = sum((x1-x2).^2)/sum(x1.^2)

x1 = x2

end

imf{end+1} = x1

x = x-x1

end

imf{end+1} = x

% 是否单调

function u = ismonotonic(x)

u1 = length(findpeaks(x))*length(findpeaks(-x))

if u1 >0

u = 0

else

u = 1

end

% 是否IMF分量

function u = isimf(x)

N = length(x)

u1 = sum(x(1:N-1).*x(2:N) <0)% 过零点的个数

u2 = length(findpeaks(x))+length(findpeaks(-x)) % 极值点的个数

if abs(u1-u2) >1

u = 0

else

u = 1

end

% 据极大值点构造样条曲线

function s = getspline(x)

N = length(x)

p = findpeaks(x)

s = spline([0 p N+1],[0 x(p) 0],1:N)

这是对信号进行分解的程序,看看对你有没有帮助

一般的的查询可在matlab里的帮助界面进行搜索,点击帮助。

打开帮助页面,左侧检索栏进行检索需要查询的语句,然后即可查看右侧查询结果。

或者在主界面,输入help 空格+你要查询的内容,进行查询。下次你可以尝试一下。

一般程序都会有不懂得语句,或没用过的,可以在刚刚说过的帮助页面进行查询,看如何使用,输入参量什么意义,程序输出结果是什么。

你这个描述太过于简略了,我只能给出这样的答案了,一般可以都给一点程序,也许会有对答题人帮助。

不过你这个程序的确有点复杂,不根据前后逻辑,和主程序和目的是很难解答的。

你可以看看主程序,再查查帮助。

希望对你有所帮助。谢谢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11638379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存