南宫轩宇 发表于 2011-8-19 13:11

请教一段HHT程序,请高手现身多多指教

请大家帮我看一下这个程序哪里出了问题,小弟在此先谢过了

N=1024;
fs=1000000;
t=1:N/fs:N
IMF=emd(z);                      %对输入信号进行EMD分解,并显示出筛分的过程
%h=hilbert(imf(1,:));
= size(IMF);
for i = 1:m
      imf(i) = IMF(i,:);
y(i)=abs(fft(imf(i)));
N=length(z);
f=fs/N*(0:N-1);
figure(i);
plot(f,y(i));
ylabel('幅值');
xlabel('频率');
title('imf(i)信号幅值谱');
end
为什么提示错误
??? plot(f,y(i));
                |
Error: Missing variable or function.
我是matlab菜鸟,答辩在即,求帮助啊

gongludehuxi 发表于 2011-8-19 13:56

你的Z函数表达式没有写,在IMF=emd(z)前加上Z函数表达式。
用emd_visu函数来显示你的IMF结果。

南宫轩宇 发表于 2011-8-19 14:10

回复 2 # gongludehuxi 的帖子

我采集的是超声波信号啊,没有信号的表达式呢

gongludehuxi 发表于 2011-8-19 14:24

回复 3 # 南宫轩宇 的帖子

没有表达式,那你得先把你采集的信号装载或者打开。赋值给你的变量Z。

南宫轩宇 发表于 2011-8-19 14:33

回复 4 # gongludehuxi 的帖子

对啊,我是用load data file这个按钮导入数据的啊,我这个程序的问题不在于数据吧,而是一些语句的错误,我真的对matlab知之甚少,帮我看看程序本身的可执行性吧谢谢

gongludehuxi 发表于 2011-8-19 15:17

回复 5 # 南宫轩宇 的帖子

N=1024;
fs=1000000;
t=1:N/fs:N
%先在此装载数据
L=length(z)
IMF=emd(z);                      %对输入信号进行EMD分解,并显示出筛分的过程
emd_visu(z,1:L,IMF)

南宫轩宇 发表于 2011-8-19 15:40

回复 6 # gongludehuxi 的帖子

大哥提示的还是那个错误啊{:3_50:}

gongludehuxi 发表于 2011-8-19 15:48

回复 7 # 南宫轩宇 的帖子

首先确保你的数据读取,赋值正确。
其次看你所编的程序文件是否和emd.m,emd_visu.m在同一目录下
如果以上都做了,问题有可能还是处在数据读取上。
他提示的是没有变量或者函数。

南宫轩宇 发表于 2011-8-19 16:00

回复 8 # gongludehuxi 的帖子

数据读取肯定没问题,因为我已经读取过数据做其他分析了,就是
??? plot(f,y(i));
                |
Error: Missing variable or function.
我觉得是y(i)这个循环的问题,不知道怎么修改

柳一 发表于 2011-8-19 16:22

回复 9 # 南宫轩宇 的帖子

N=1024;
fs=10000;
t=1:N/fs:N;
z=sin(2*pi*t)+sin(2*pi*10*t);
IMF=emd(z);                      %对输入信号进行EMD分解,并显示出筛分的过程
%h=hilbert(imf(1,:));
= size(IMF);
y=zeros(m,n);
for i = 1:m   
y(i,:)=abs(fft(IMF(i,:)));
N=length(z);
f=fs/N*(0:N-1);
figure(i);
plot(f,y(i,:))
ylabel('幅值');
xlabel('频率');
title('imf(i)信号幅值谱');
end
这回对了,参考这个,将z信号改成你所输入的信号即可

chenlu1986 发表于 2011-9-3 15:43

回复 7 # 南宫轩宇 的帖子

把你错误提示贴出。
页: [1]
查看完整版本: 请教一段HHT程序,请高手现身多多指教