Matlab使用EMD
先產生了一個正弦信號便于分解,顯示其波形和頻譜圖便于對照。
clear;clc; %% 產生原始信號 f1=5; % 信號1的頻率 f2=2; % 信號2的頻率 f3=10; % 信號3的頻率 fs=30; % 采樣率 N=fs*60; t = 0 : 1/fs : (N-1)/fs; y1=5*sin(2*pi*f1*t)+10*sin(2*pi*f2*t)+8*sin(2*pi*f3*t); figure(1);subplot(2,1,1);plot(y1,'r'); %% 畫出原信號的頻率譜 n=0:N-1; f=n*fs/N; y=fft(y1,N); mag=abs(y)*2/N; subplot(2,1,2); plot(f(1:N/2),mag(1:N/2)); %% 畫出EMD分解的IMF值的圖像 % [imf,residual,info] = emd(y1,'Interpolation','pchip'); emd(y1,'Interpolation','pchip');原始信號的波形及頻譜圖如圖所示:
EMD函數畫出的圖像如圖所示:(只自動顯示了3個IMF圖像)
在空白位置單擊右鍵可以選擇顯示剩下的IMF值。
按OK后即可同時顯示所有IMF的圖像。
同時顯示波形和頻譜圖
對上面的代碼需要簡單的修改,該方法需要知道每個IMF分解出的值,并通過FFT變換為頻域中畫圖。
運行結果如下圖所示:
[imf,residual,info] =emd(y1,‘Interpolation’,‘pchip’);該式子可獲取到EMD分解的結果,即IMF值及殘差值等參數,在后續可以通過for循環畫出對應的波形和頻譜圖。
可以通過matlab右側的變量區看分解出來的IMF是橫著的還是豎著的格式。
在EMD函數中可以通過添加參數來增多分解的IMF值,在matlab的輸入參數部分可以找到詳細介紹,同時也推薦一位up主的學習視頻。
可以通過[imf,residual,info] = emd(y1,‘Interpolation’,‘pchip’,“SiftRelativeTolerance”,0.02);個人理解的是修改后面的參數值會分解得更細致,本來默認的0.2可能會使幅度相近的兩個信號在一個IMF中,改小可以識別到這樣的情況會減小混疊情況。
推薦學習視頻https://www.bilibili.com/video/BV1Tk4y1r7h1
總結
以上是生活随笔為你收集整理的Matlab使用EMD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑编程需要下载什么软件吗
- 下一篇: 学电脑编程能干什么