声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: zhangnan3509

[HHT] EMD的小结(连载)

  [复制链接]
发表于 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 [y]/n? y

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

[0] None

Compiler: 2

Please verify your choices:

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

Are these correct?([y]/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 . . .
回复 支持 反对
分享到:

使用道具 举报

发表于 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帮我解释一下
谢谢了
发表于 2011-4-29 10:06 | 显示全部楼层
回复 55 # 憨憨帝 的帖子

建议你先学习一下emd的原理。论坛里就有很多能学习的知识。
论坛里也有程序可以下载,你先找个吧试试。看看emd是怎样 分解信号的
发表于 2011-5-26 20:19 | 显示全部楼层
回复 1 # zhangnan3509 的帖子

对原始信号进行处理,先求出各个局部极大值
发表于 2011-5-28 19:44 | 显示全部楼层
刚研究EMD,才分解出IMF,不知怎做边际谱
发表于 2011-5-29 08:52 | 显示全部楼层
回复 64 # sunsun1212 的帖子

边际谱是时间-频率图,所以要先求出IMF的瞬时频率:用Hilbert变换法。
多看看论坛学习一下。
发表于 2011-6-16 08:34 | 显示全部楼层
受教了 目前在做用labview分析信号方面的东西 论文题目一直定不下来  貌似阶次分析方面的论文少
发表于 2011-7-12 11:29 | 显示全部楼层
本帖最后由 zhangnan3509 于 2013-4-19 21:48 编辑

回复 3 # zhangnan3509 的帖子

请问,我的emd分解出的图形的x轴对应的为点数N,怎么才能使得x轴对应的是时间t?本人初学者,请指教
发表于 2011-9-3 09:18 | 显示全部楼层
回复 70 # 文龙轩夕林梦 的帖子

时间t=N/fs
发表于 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);
[A, fa, tt] = hhspectrum(imf);
if size(imf,1) > 1
    [A,fa,tt] = hhspectrum(imf(1:end-1, :));
else
    [A,fa,tt] = hhspectrum(imf);
end
[E, tt1] = 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,[0,0.5*fs],E);
set(gca,'YDir','normal')
% 使用灰度??示
% colormap(flipud(gray))

figure(3)
plot(f, bjp);
发表于 2011-9-23 08:49 | 显示全部楼层
回复 67 # cassie920920 的帖子

贴出你的错误部分和图?
发表于 2011-9-23 10:35 | 显示全部楼层
我也做信号处理,不过越做越模糊,不知道该往哪那些方面做了,要创新点不容易啊
发表于 2011-10-25 20:45 | 显示全部楼层
本帖最后由 cassie920920 于 2011-10-25 21:54 编辑

回復67# chenlu1986的帖子

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

原始圖
擷取1.JPG

Hilbert譜
擷取2.JPG


Hilbert邊際譜
擷取3.JPG



另外我想問一下
如果我想自己寫程式不用函式庫的話(將來須轉移到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));
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 21:21 , Processed in 0.092963 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表