憨憨帝 发表于 2011-4-28 08:20

我按您说的一步一步的做了,还是没有在工具箱里面看到emd的模块啊,请问安装成功之后怎么用呢?
下面是我安装成功后Command Window里面的代码:
>> mex -setup
Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers /n? y

Select a compiler:
Lcc C version 2.4 in D:\MATLAB7\sys\lcc
Microsoft Visual C/C++ version 6.0 in D:\Program Files\Microsoft Visual Studio

None

Compiler: 2

Please verify your choices:

Compiler: Microsoft Visual C/C++ 6.0
Location: D:\Program Files\Microsoft Visual Studio

Are these correct?(/n): y

Try to update options file: D:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R14\mexopts.bat
From template:            D:\MATLAB7\BIN\WIN32\mexopts\msvc60opts.bat

Done . . .

chenlu1986 发表于 2011-4-28 15:07

本帖最后由 chenlu1986 于 2011-4-28 15:08 编辑

回复 53 # 憨憨帝 的帖子

您安装成功了呀。下面就是写程序实现了~
先找一个合成的两正弦信号emd分解实验下~

PS:注意要先选择这个工作路径下进行实验

憨憨帝 发表于 2011-4-28 19:30

回复 54 # chenlu1986 的帖子

太感谢你帮我解答这么多问题了,我才学matlab好多都不懂,你说的写程序实现是要自己写一个分解的emd程序吗?网上提供的那些程序能用吗?
我该怎么用这个emd工具箱呢?
能不能加QQ帮我解释一下
谢谢了

chenlu1986 发表于 2011-4-29 10:06

回复 55 # 憨憨帝 的帖子

建议你先学习一下emd的原理。论坛里就有很多能学习的知识。
论坛里也有程序可以下载,你先找个吧试试。看看emd是怎样 分解信号的

fancaogong 发表于 2011-5-26 20:19

回复 1 # zhangnan3509 的帖子

对原始信号进行处理,先求出各个局部极大值

sunsun1212 发表于 2011-5-28 19:44

刚研究EMD,才分解出IMF,不知怎做边际谱

chenlu1986 发表于 2011-5-29 08:52

回复 64 # sunsun1212 的帖子

边际谱是时间-频率图,所以要先求出IMF的瞬时频率:用Hilbert变换法。
多看看论坛学习一下。

fstawn 发表于 2011-6-16 08:34

受教了 目前在做用labview分析信号方面的东西 论文题目一直定不下来貌似阶次分析方面的论文少

文龙轩夕林梦 发表于 2011-7-12 11:29

本帖最后由 zhangnan3509 于 2013-4-19 21:48 编辑

回复 3 # zhangnan3509 的帖子

请问,我的emd分解出的图形的x轴对应的为点数N,怎么才能使得x轴对应的是时间t?本人初学者,请指教

chenlu1986 发表于 2011-9-3 09:18

回复 70 # 文龙轩夕林梦 的帖子

时间t=N/fs

cassie920920 发表于 2011-9-14 15:48

想請問54樓高手,不知道您有沒有看過網上某位大大貼的這段程式,網址:http://forum.vibunion.com/thread-95023-1-1.html,怎麼我使用package_emd的工具,可以順利執行,但是跑出來的E數值卻會顯示Too many elements??無法像作者跑出來的結果一樣??執行後只有第一張圖有訊號,第二張跟第三張都是錯誤的><"程式如下:
clear;
rand('seed', 0);

T = 0.05;                % 仿真??
R = 500;               % ?速率
fd = 1000;               % ?波?差
fc = 2000;               % ?波?率
fs = 20000;            % 采?率
samp = fs/R;             % 每??元上的采???
N = T*fs;
n = 1:N;
x = randint(1, R*T, 2);
y = fskmod(x, 2, fd, samp, fs);
y = y .* exp(i*2*pi*fc/fs*n);
y = real(y);
% z = awgn(y, 20, 'measured');
z = y;

imf = emd(z);
= hhspectrum(imf);
if size(imf,1) > 1
    = hhspectrum(imf(1:end-1, :));
else
    = hhspectrum(imf);
end
= toimage(A,fa,tt,length(tt));   

for k = 1:size(E,1)
    bjp(k) = sum(E(k,:))*1/fs*1/T;
end
f = (0:N-3)/N*(fs/2);

figure(1)
plot(z);

figure(2)
imagesc(tt1,,E);
set(gca,'YDir','normal')
% 使用灰度??示
% colormap(flipud(gray))

figure(3)
plot(f, bjp);

chenlu1986 发表于 2011-9-23 08:49

回复 67 # cassie920920 的帖子

贴出你的错误部分和图?

xldelg 发表于 2011-9-23 10:35

我也做信号处理,不过越做越模糊,不知道该往哪那些方面做了,要创新点不容易啊

cassie920920 发表于 2011-10-25 20:45

本帖最后由 cassie920920 于 2011-10-25 21:54 编辑

回復67# chenlu1986的帖子

不好意思太晚回您
我最近重新整理了一下之前貼的程式範例
目前程式可以順利執行了
但是在Hilbert譜跟Hilbert邊際譜的部分結果還是錯誤,出來的值是空的
可否麻煩大大幫我看看~感謝您

原始圖


Hilbert譜



Hilbert邊際譜




另外我想問一下
如果我想自己寫程式不用函式庫的話(將來須轉移到DSP晶片,因此不能使用函式庫)
該怎麼去計算Hilbert譜及Hilbert邊際譜???
我自己撰寫程式目前已經到EMD拆解已經完成,
但接下來要計算Hilbert譜及Hilbert邊際譜時,
出來的結果卻是錯誤的,我大概寫一下我的計算方式,麻煩大大可否幫我看一下到底是哪邊計算或是畫圖時出了錯誤,導致結果都出不來??Hilbert譜不就是時間、頻率跟振幅值對應出來的結果??難道是我誤解了??
假設我分解出來IMF1,對IMF1做Hilbert譜及Hilbert邊際譜,以下為我的程式撰寫方法(emd部分省略):

fs = 1000;
N = 1000;
n = 1:N;
t = n/fs;
IMF1 = cos(2*pi*10*t);%原始訊號(模擬EMD拆解後訊號)

N = length(IMF1);
T = 1/fs;
t = 1/fs:1/fs:N/fs;

data_hilbert = hilbert(IMF1);
data_ang = angle(data_hilbert);%取得相位
data_IF = abs(diff(data_ang)/(1/fs)/(2*pi));%取得頻率軸
data_AT = abs(sqrt(real(data_hilbert(1:end-1).^2)+imag(data_hilbert(1:end-1).^2)));%取得振幅

M = max(max(data_IF));
log_AT = 20*log10(data_AT/M);

figure
plot(t,IMF1)

figure
imagesc(t,data_IF,log_AT)
axis xy;

兰州的竹子 发表于 2011-10-27 18:50

回复 61 # chenlu1986 的帖子

请问一下,为什么我做的时候出现以下这个:
??? Undefined function or variable "A".

Error in ==> hhspectrum at 46
A(i,l+1:end-l)=abs(an(i,l+1:end-l));
页: 1 2 3 [4] 5 6 7 8 9 10
查看完整版本: EMD的小结(连载)