【信号分解】基于LMD算法和ELMD算法实现管道泄漏信号处理附matlab代码
?1 內容介紹
在科技水平相當發達的今天,互聯網+、大數據慢慢滲透進人們的生活當中,但
科技的進步不僅僅要體現在生活質量水平的提高、經濟的快速發展,更應該體現在對社會資源的合理利用。自建國以來,我國管道運輸得以迅速發展。從?1958?年至今,先后經歷了?11?年的初始發展、17?年的快速發展、7?年的穩步發展,現在正處于加快發展階段。管道總里程在?2008?年就已經達到?6.4?萬千米,是管道運輸最初發展階段?0.02萬千米的?3200?倍,可見管道運輸在運輸業的重要位置[1]。截至?2010?年底,全球管道干線總長度超過?200?萬千米,到了?2013?年,全球運行的管道有?3559186?公里,其中8.4%為原油運輸管線,80.5%為天然氣運輸管線,可見天然氣運輸在管道運輸中具有較大比重。中國的油氣管道長度在?2015?年也達到?10.87?萬公里,其中天然氣主干管道總里程也超過?2013?年的?5.5?萬公里[2]。
管道運輸通常伴隨著能源的存儲與使用,便會涉及到能源的可持續發展以及相應
的安全保護措施。合理的資源利用,有利于資源的再生及可持續發展;縝密的安保措施,有利于保護資源不被竊取和浪費。但隨著油氣管道運輸的發展,管線的數量越來越多,管道的敷設距離也變得越來越長,而隨著服役期的增長,加上環境和人為破壞,運行磨損,設備老化,腐蝕等多種因素,導致管道泄漏時有發生,進而引發許多重大泄漏事故。我國大部分管道目前已運行超過?40?年,且中國的管道事故率遠遠高于西方國家,數據顯示,美國、歐洲、我國的管道事故率分別為?0.42,0.46?和?0.50[3]。我國運行超過?20?年的油氣管道已經占總管道數的?60%。隨著油氣管道的控制日益復雜,運行形勢復雜多變,應該把管道運輸的安全保障問題視為首要防御任務。因此,為了節約一次能源、改善環境污染、提高人民生活水平,對城市現代化建設的便利、舒適、安全可靠性做出重要貢獻,有效的降低危及居民生活安全的燃氣管道漏損現象,對燃氣管道實行在線運行的實時監測、精確檢測定位管網泄漏具有十分重要的意義。??
針對天然氣管道泄漏檢測過程中難以提取泄漏特征信息及泄漏定位精度低的問題,本文將局部均值分解(Local Mean Decomposition,LMD)算法應用于管道泄漏檢測中,實現管道泄漏信號的分解、特征提取以及泄漏定位。首先,介紹了局部均值分解的理論算法,并將其應用在信號分解中。LMD作為處理非平穩隨機信號的一種有效手段,其具備信號分解的自適應特性和完備性。但由于算法本身的影響,易產生模態混疊。針對模態混疊現象,本文利用總體局部均值分解算法(Ensemble Local Mean Decomposition,ELMD),借助輔助噪聲技術,抑制LMD分解過程中模態混疊的問題。其次,有用信息在傳輸過程中往往會受到各種噪聲的影響和干擾,使信號源中的有用信號被削減或混淆。為增強有用信號,抑制噪聲干擾,保障后續提取的特征值能夠代表信號特征,需要對采集的原始信號進行降噪預處理。同時為避免小波分解過程存在的技術漏洞,提出基于小波包的ELMD譜峭度聯合降噪算法。該算法在ELMD分解出的各有效PF(Product Function)分量的基礎上,利用譜峭度最優參數及小波包能量分布確定信號重構節點,完成對各PF分量的信號降噪。降噪后的各PF分量可表征原始信號在不同尺度下的特征。再次,通過分析管道信號的特點,對時頻分析理論進行研究,提出基于時頻域的自適應最優核(Adaptive Optimal Kernel,AOK)譜熵參數,定量描述信號的時頻特性。對各PF分量中提取相應AOK參數用于初步判定管道是否發生泄漏及工況種類,其針對管道正常運行、管道泄漏、管道敲擊具有很好的區分度,具有良好的識別準確率。最后,介紹了基于ELMD多尺度相關的管道泄漏檢測算法。通過經ELMD分解得到的PF分量與互相關算法的融合,得到不同特征尺度下的時延差,從而完成對管道泄漏的定位。該算法相比直接利用原始信號進行相關計算得到的定位結果更加精確,有助于管道泄漏定位精度的提升。
2 仿真代碼
% clear;
 % clc;
 % close all;
 % x1=xlsread('3.xlsx');
 % Ts = 11838 ;
 % fs=1/Ts
 %?
 % VarName2=x1(:,2);
 % x=VarName2';
 % Nstd =0.1;
 % NR =100;
 %?
 % N=length(x);
 % t = linspace(0,1,N);
 clc
 clear all
 close all
 x1=xlsread('3.xlsx');
 VarName2=x1(:,4);
 x=VarName2';
 plot(x, 'b');
 Z=VarName2(1:8192,:);
 z=Z';
 % figure;
 % plot(Z, 'b');
 xlim([0 8192]);
 N=length(x);
 t = linspace(0,1,N);
 Ts = 10324;
 fs=1/Ts
 Nstd =0.1;
 NR =100
%繪制原始信號及頻譜
 figure
 subplot(211)
 plot(t,x)
 subplot(212)
 y2=x;
 L=length(y2);
 NFFT = 2^nextpow2(L);
 Y = fft(y2,NFFT)/L;
 f = fs/2*linspace(0,1,NFFT/2);
 plot(f,2*abs(Y(1:NFFT/2)))
% LMD分解
 [pf,a,si,u] = lmd(x);
 line=size(pf,1)
 NN = length(pf(1,:))
 t = linspace(0,1,NN);
 figure('Color',[1 1 1]);
 for i=1:1:line
 ? ? subplot(line+1,1,i),plot(t,pf(i,:)),ylabel(sprintf('PF%d',i));
 ? ? xlabel('Time / s'); legend('LMD')
 end
for i = 1:1:line
 ? ? ?cc(i)=min(min(corrcoef(pf(i,:), x)))
 ?end
figure
 plot(cc,'-g<','LineWidth',1.5,'MarkerEdgeColor','b','MarkerFaceColor','b','MarkerSize',5);
 set(gca,'XGrid', 'on', 'YGrid', 'on');
 legend('CC');?
 xlabel('IMF');
 ylabel('LMD相關系數');
%重構信號
 cg_ev=pf(3,:)+pf(4,:)+pf(5,:)+pf(6,:);
 figure;
 plot(t,x,'-b');hold on?
 plot(t,cg_ev,'-r');xlabel('t/s');ylabel('幅值');legend('原始信號','LMD重構信號');?
%誤差信號
 err=x-cg_ev;
 figure
 plot(t,err);xlabel('t/s');ylabel('幅值');legend('LMD誤差信號');
% ELMD分解
 modes = mlmd(x,Nstd,NR);
 [a, b]=size(modes);
% 繪制PF分量和其頻譜圖
 PF=modes;
 line=size(PF,1);?
 NN = length(PF(1,:));
 n = linspace(0,1,NN);
 for k1=0:4:line-1
 ? ? ?figure('Color',[1 1 1]);
 ? ? ?for k2=1:min(4,line-k1)
 ? ? ? ? subplot(4,2,2*k2-1);
 ? ? ? ? plot(t,PF(k1+k2,:));
 ? ? ? ? title(sprintf('第%d個PF', k1+k2))
 ? ? ? ? xlabel('Time/s')
 ? ? ? ? ylabel(sprintf('PF%d',k1+k2));legend('ELMD');
 ? ? ? ? subplot(4,2,2*k2)
 ? ? ? ? [yf, f] = FFTAnalysis(PF(k1+k2,:), Ts);
 ? ? ? ? plot(f, yf)
 ? ? ? ? title(sprintf('第%d個PF的頻譜', k1+k2))
 ? ? ? ? xlabel('f/Hz')
 ? ? ? ? ylabel('|PF(f)|');legend('ELMD');
 ? ? ?end
 end;
for i = 1:1:line
 ? ? ?cc(i)=min(min(corrcoef(PF(i,:), x)))
 ?end
figure
 plot(cc,'-g<','LineWidth',1.5,'MarkerEdgeColor','b','MarkerFaceColor','b','MarkerSize',5);
 set(gca,'XGrid', 'on', 'YGrid', 'on');
 legend('CC');?
 xlabel('IMF');
 ylabel('ELMD相關系數');
%重構信號
 cg_ev1=PF(4,:)+PF(5,:)+PF(6,:);
 figure;
 plot(t,x);
 hold on?
 plot(t,cg_ev1,'g');xlabel('t/s');ylabel('幅值')
 legend('原始信號','ELMD重構信號');?
%誤差信號
 err=x-cg_ev1;
 figure
 plot(t,err);xlabel('t/s');ylabel('幅值');legend('ELMD誤差信號');?
sigPower1 = sum(abs(cg_ev).^2)/length(cg_ev);?
 sigPower2 = sum(abs(cg_ev1).^2)/length(cg_ev1);?
 noisePower1 = sum(abs(cg_ev-x).^2)/length(cg_ev-x) ;?
 noisePower2 = sum(abs(cg_ev1-x).^2)/length(cg_ev1-x) ; ?
? %求出噪聲功率
 SNR1=10*log10(sigPower1/noisePower1)
 SNR2=10*log10(sigPower2/noisePower2)
% 平均絕對誤差mae
 MAE_LMD = mae(abs(cg_ev-x))
 MAE_ELMD = mae(abs(cg_ev1-x))
function snr=SNR_singlech(I,In)
 % 計算信噪比函數
 % I :original signal
 % In:noisy signal(ie. original signal + noise signal)
 snr=0;
 Ps=sum(sum((I-mean(mean(I))).^2));%signal power
 Pn=sum(sum((I-In).^2)); ? ? ? ? ? %noise power
 snr=10*log10(Ps/Pn);
 ?
???????
3 運行結果
4 參考文獻
[1]李博健. 改進LMD算法在管道泄漏中的應用研究[D]. 東北石油大學.
博主簡介:擅長智能優化算法、神經網絡預測、信號處理、元胞自動機、圖像處理、路徑規劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
總結
以上是生活随笔為你收集整理的【信号分解】基于LMD算法和ELMD算法实现管道泄漏信号处理附matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【PHM】PHM算法与智能分析技术——智
- 下一篇: html photoswipe原理,H5
