当前位置:   article > 正文

基于小波包分析的一维信号谐波干扰去除方法(MATLAB R2021B)_谐波怎么用算法去除

谐波怎么用算法去除

小波包是由Coifman、Meyer及Wickhauser提出的。他们在研究正交小波基的基础上创立了正交小波包的概念,后来又发展到半正交小波包和广义小波包。

由于正交小波变换采用Mallat算法实现,只对信号的低频部分做进一步分解,而对高频部分不再继续分解,所以小波变换仅能很好的表征以低频信息为主要成分的信号。但是在实际应用中非平稳机械振动信号、遥感图像、地震信号和生物医学信号等包含大量细节信息,正交小波变换不能很好地分解和表示细小边缘或纹理的信号。小波包变换可以对高频部分提供更精细的分解,而且这种分解既无冗余,也无疏漏,所以对包含大量中、高频信息的信号能够进行更好的时频局部化分析。小波包变换在信号去噪、滤波、压缩、非平稳机械振动信号的分析与故障诊断、非平稳信号的特征提取及多载波调制技术等方面具有重要应用。

信号小波包分析的基本实现步骤如下:

(1)选择适当的小波滤波器,对给定的采样信号进行小波包变换,获得树形结构的小波包系数。常用的正交滤波器包括Daubechies小波滤波器、Symlets小波滤波器等,小波滤波器的性能通常与所分析的信号类型相关,可通过实验比较选取合适的滤波器。

(2)选择信息代价函数,并利用最佳小波包基选取算法选取最佳基。我们曾给出几个常用的信息代价函数的选取方法。需要说明的是,信息代价函数的选取与小波包的应用是相关的,而且人们也在不断提出新的选取方法。通常需要通过实验比较选取合适的代价函数。当代价函数选定后,可采用自底向顶的方法搜索最佳小波包基,该基能够提供所分析信号的高效表示。

(3)对最佳正交小波包基对应的小波包系数进行处理。处理方法与具体应用有关,如在去噪时,可对系数进行阈值化处理。

鉴于此,采用小波包分析对一维时间序列信号进行谐波干扰去除,运行环境为MATLAB R2021B。

  1. function [P,F,PWR] = computePersistence(opts, plotFlag)
  2. % Compute persistence spectrum
  3. % Cache probability min threshold and set it to zero in opts so that
  4. % spectrogram is computed with no threshold.
  5. minThreshold = opts.MinThreshold;
  6. opts.MinThreshold = 0;
  7. [Pspectrogram,F,~,FRES,TRES,zMin,zMax] = computeSpectrogram(opts, false);
  8. Npoints = length(F);
  9. numSpectralWindows = size(Pspectrogram,2);
  10. f1 = opts.FrequencyLimits(1);
  11. f2 = opts.FrequencyLimits(2);
  12. % Add 5% cushion so that there is some empty space above and below the
  13. % persistence spectrum image.
  14. pwrCushion = 0.05*abs(zMax-zMin);
  15. zMin = zMin-pwrCushion;
  16. zMax = zMax+pwrCushion;
  17. if coder.target('MATLAB')
  18. persistenceObj = signalanalyzer.internal.PersistenceSpectrum;
  19. else
  20. persistenceObj = signal.internal.codegenable.pspectrum.PersistenceSpectrum;
  21. end
  22. persistenceObj.setup(f1,f2,Npoints,zMin,zMax,opts.NumPowerBins);
  23. persistenceObj.computeSpectrum(Pspectrogram(:));
  24. P = persistenceObj.fetchPersistenceSpectrum2D();
  25. P = 100*(P/numSpectralWindows); % convert to probability in percentage
  26. F = persistenceObj.fetchFrequencyVector();
  27. PWR = persistenceObj.fetchMagnitudeVector(); % this is in dB
  28. if minThreshold > 0
  29. P(P<minThreshold) = 0;
  30. end
  31. if plotFlag
  32. if opts.IsSingle
  33. P = single(P);
  34. F = single(F);
  35. PWR = single(PWR);
  36. end
  37. signal.internal.pspectrum.displayPersistence(PWR,F,P,...
  38. opts.IsNormalizedFreq,opts.MinThreshold,FRES,TRES,numSpectralWindows);
  39. end
  40. % Convert PWR to linear before returning
  41. PWR = 10.^(PWR/10);
  42. %完整代码可通过知乎学术咨询获得:https://www.zhihu.com/consult/people/792359672131756032?isMe=1
  43. end

图片

图片

图片

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/675387
推荐阅读
相关标签
  

闽ICP备14008679号