Ⅰ 如何在matlab軟體中用EMD方法分解信號,現在只是安裝了matlab軟體,接下來該做什麼啊麻煩大家幫下忙!
我也是這個課題了!哥們有答案發一份呀!謝謝了!!
應該是用matlab編寫吧...
Ⅱ 求:使用matlab自帶的小波工具箱wavemenu怎樣對[電流 時間監測數據進行分解後重構呢
是一個圖形,你可以圖形平滑(一般三角函數),或者使用函數擬合得到擬合系數可以!
(註:你可以找到在圖像上的一個點的坐標向量!我沒有你的專業知識是不明確的,我已經理解了點!)
Ⅲ 誰可以給我一個emd分解的matlab程序。只需要emd分解的。謝謝了!
%此版本為ALAN 版本的整合注釋版
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks
x= transpose(x(:));%轉置為行矩陣
imf = [];
while ~ismonotonic(x) %當x不是單調函數,分解終止條件
x1 = x;
sd = Inf;%均值
%直到x1滿足IMF條件,得c1
while (sd > 0.1) | ~isimf(x1) %當標准偏差系數sd大於0.1或x1不是固有模態函數時,分量終止條件
s1 = getspline(x1);%上包絡線
s2 = -getspline(-x1);%下包絡線
x2 = x1-(s1+s2)/2;%此處的x2為文章中的h
sd = sum((x1-x2).^2)/sum(x1.^2);
x1 = x2;
end
imf{end+1} = x1;
x = x-x1;
end
imf{end+1} = x;
% FUNCTIONS
function u = ismonotonic(x)
%u=0表示x不是單調函數,u=1表示x為單調的
u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0, u = 0;
else, u = 1; end
function u = isimf(x)
%u=0表示x不是固有模式函數,u=1表示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);
-------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function n = findpeaks(x)
% Find peaks.找到極值 ,n為極值點所在位置
% n = findpeaks(x)
n = find(diff(diff(x) > 0) < 0);
u = find(x(n+1) > x(n));
n(u) = n(u)+1;
------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
function plot_hht00(x,Ts)
% 雙邊帶調幅信號的EMD分解
% Plot the HHT.
% plot_hht(x,Ts)
%
% :: Syntax
% The array(列) x is the input signal and Ts is the sampling period(取樣周期).
% Example on use: [x,Fs] = wavread('Hum.wav');
% plot_hht(x(1:6000),1/Fs);
% Func : emd
% Get HHT.
clear all;
close all;
Ts=0.0005;
t=0:Ts:10; % 采樣率2000HZ
% 調幅信號
%x=sin(2*pi*t).*sin(40*pi*t);
x=sin(2*pi*t);
s1 = getspline(x);%上包絡線
s2 = -getspline(-x);%上包絡線
x1 = (s1+s2)/2;%此處的x2為文章中的h
figure;
plot(t,x);xlabel('Time'), ylabel('Amplitude');title('雙邊帶調幅信號');hold on;
plot(t,s1,'-r');
plot(t,s2,'-r');
plot(t,x1,'g');
imf = emd(x);
for k = 1:length(imf)
b(k) = sum(imf{k}.*imf{k});
th = angle(hilbert(imf{k}));
d{k} = diff(th)/Ts/(2*pi);
end
[u,v] = sort(-b);
b = 1-b/max(b);
% Set time-frequency plots.
N = length(x);
c = linspace(0,(N-2)*Ts,N-1);
%
figure;
for k = v(1:2)
plot(c,d{k},'k.','Color',b([k k k]),'MarkerSize',3); hold on;
set(gca,'FontSize',8,'XLim',[0 c(end)],'YLim',[0 50]);%設置x、y軸句柄
xlabel('Time'), ylabel('Frequency');title('原信號時頻圖');
end
% Set IMF plots.
M = length(imf);
N = length(x);
c = linspace(0,(N-1)*Ts,N);
for k1 = 0:4:M-1
figure
for k2 = 1:min(4,M-k1),
subplot(4,1,k2),
plot(c,imf{k1+k2});
set(gca,'FontSize',8,'XLim',[0 c(end)]);
title('EMD分解結果');
end
xlabel('Time');
end
Ⅳ matlab小波變換工具箱分解得出的柱狀圖,橫縱坐標分別什麼意思求解答謝謝
這問題還滿難的,在來幫助文源檔wavele toolbox的Advanced concepts中有一些提及。橫坐標很好理解,是leleccum信號(總點數4320)幅值,從121.8到547.4,然後按照通常定義的hist的定義,把這個范圍化為30個等分,但有意思的是縱坐標並不是某個幅值的個數,可能是密度估計值,可以參考幫助文檔(FunctionEstimation:DensityandRegression),怎麼算matlab也講得不太清楚,可能需要數理統計方面的知識。我只推出了左邊的圖是個數除總點數得到。
直接的hist圖是
完全吻合。
右邊圖貌似做了歸一化,但如何操作還沒想通,好像是累計分布,可以參考ecdfhist 的幫助文檔,這需要Statistics Toolbox中的某些知識。水平有限,僅供參考。
Ⅳ 如何用matlab做糧食總產量的emd分解
(1)函數在整個時間范圍內,局部極值點和過零點的數目必須相等,或最多相差一個;
(2)在任意時刻點,局部最大值的包絡(上包絡線)和局部最小值的包絡(下包絡線) 平均必須為零。
Ⅵ matlab中emd工具箱怎麼調用
1、首先下載emd工具箱,50樓網址裡面可以下。下載後解壓放在matlab的work工作路徑下package_emd文件夾。
2、打開內matlab,選擇File- Set Path- Add with Subfolders-你剛才下載的工容具箱(package_emd)點進去- Save- Close。
3、此時選擇work下package_emd文件夾作為工作路徑,即是D:\matlabR2006b\work\package_emd。
4、在Command Window裡面輸入mex -setup回車,問是否選擇已有的編譯器你選y回車,再問選擇哪個編譯器,你可以選擇C++的那個選擇相應的編號(如 2)回車,然後讓你核對是否選擇對了編譯器等等,你輸入y回車。。。就安裝成功了了
Ⅶ MATLAB中如何調用EMD工具箱
1、首先下載emd工具箱,50樓網址裡面可以下。下載後解壓放在matlab的work工作路徑下package_emd文件夾。
2、打開matlab,選版擇File- Set Path- Add with Subfolders-你剛才權下載的工具箱(package_emd)點進去- Save- Close。
3、此時選擇work下package_emd文件夾作為工作路徑,即是D:\matlabR2006b\work\package_emd。
4、在Command Window裡面輸入mex -setup回車,問是否選擇已有的編譯器你選y回車,再問選擇哪個編譯器,你可以選擇C++的那個選擇相應的編號(如 2)回車,然後讓你核對是否選擇對了編譯器等等,你輸入y回車。。。就安裝成功了了
Ⅷ EMD分解的matlab實現必須要用EMD工具箱么,可以給發一份么
可以不用啊。。。你也可以自己編寫。。。上ilovematlab論壇就可以下載
Ⅸ matlab emd工具箱使用
其實用起來也很簡單的,舉個例子:
clearall;
clf;
t=0:0.1:4*pi;
%構造一個信號
x=10.*sin(t)+5.*cos(2.*t);
%加點內噪容聲
noise=normrnd(0,1,1,length(x));
y=x+noise;
%emd分解
imf=emd(x);
[mn]=size(imf);
emd_visu(x,t,imf);
Ⅹ 有關EMD分解matlab程序
一般的的查詢可在matlab里的幫助界面進行搜索,點擊幫助。
打開幫助頁回面,左側檢索答欄進行檢索需要查詢的語句,然後即可查看右側查詢結果。
或者在主界面,輸入help 空格+你要查詢的內容,進行查詢。下次你可以嘗試一下。
一般程序都會有不懂得語句,或沒用過的,可以在剛剛說過的幫助頁面進行查詢,看如何使用,輸入參量什麼意義,程序輸出結果是什麼。
你這個描述太過於簡略了,我只能給出這樣的答案了,一般可以都給一點程序,也許會有對答題人幫助。
不過你這個程序的確有點復雜,不根據前後邏輯,和主程序和目的是很難解答的。
你可以看看主程序,再查查幫助。
希望對你有所幫助。謝謝。