• MATLAB|时序数据中的稀疏辅助信号去噪和模式识别


    目录

    一、概述

    二、算例及仿真

    📢算例一:

    📢算例二:

    📢算例三:

    📢算例四:

    📢算例五:

    📢算例六:

    三、Matlab代码实现

     

    一、概述

    本文通过结合线性时不变滤波器、正交多分辨率表示和基于稀疏性的方法,解决了处理批处理模式时间序列数据时的信号去噪和模式识别问题。利用数字滤波器状态空间表示的频谱变换,将高阶零相低通、高通和带通无限脉冲响应滤波器设计为矩阵的新方法。还提出了一种基于近端梯度的技术,用于对一类特殊的零相位高通和带通数字滤波器进行因式分解,以便因式分解积保持滤波器的零相性质,并在信号模型中加入输入的稀疏导数分量。为了展示本文新颖的滤波器设计的应用,验证并提出了新的信号模型,以同时去噪和识别感兴趣的模式。首先使用我们提出的滤波器设计来测试现有的信号模型,该模型同时结合了线性时间不变(LTI)滤波器和基于稀疏性的方法。将本文提出的滤波器设计与现有信号模型相结合,开发了一种称为稀疏性辅助信号去噪(SASD)的新信号模型。使用仿真数据,证明了SASD信号模型在不同阶次滤波器和噪声水平下的鲁棒性。此后,提出并推导出一种称为稀疏性辅助模式识别(SAPR)的新信号模型。在SAPR中,还将LTI带通滤波器和基于稀疏性的方法与正交多分辨率表示(如小波)相结合,以检测输入信号中的特定模式。最后,本文将信号去噪和模式识别任务相结合,并推导出一种称为稀疏性辅助信号去噪和模式识别(SASDPR)的新信号模型。分别使用睡眠脑电图数据来检测K复合物和睡眠纺锤体,从而说明了SAPR和SASDPR框架的功能。

    二、算例及仿真

    📢算例一:

    稀疏辅助信号去噪( SASD )算法同时结合全变差去噪和低通滤波对含噪信号进行滤波,从而保持了信号的不连续性。

                  

    📢算例二:

    使用带状矩阵演示零相位滤波的示例:

               

    📢算例三:

    稀疏辅助信号去噪( SASD )算法同时结合全变差去噪和低通滤波对含噪信号进行滤波,从而保持了信号的不连续性。在这个例子中,我们使用LPF、TVD、SASS和SASD对心电信号进行去噪:

              

    📢算例四:

    稀疏辅助信号去噪和模式识别 (SASDPR) 将同时去噪和检测给定信号中感兴趣的振荡模式:

               

    📢算例五:

    稀疏辅助信号去噪和模式识别 (SASDPR) 将同时去噪和检测给定信号中感兴趣的振荡模式:

                 

    📢算例六:

    稀疏辅助模式识别 (SAPR) 将检测信号中的小波模式:

            

    三、Matlab代码实现

    本文仅展现部分代码,全部代码点这里:🍞正在为您运送作品详情

    1. function [y, f, s, x, w] = generate_signal( fs, sigma )
    2. %% 初始化噪声电平和信号长度
    3. rng('default')
    4. N = 10*fs;
    5. n = 0:N-1;
    6. %% 产生低频合成成分
    7. f = 0.1;
    8. f = sin(2*f/fs*pi*n);
    9. %% 振荡
    10. s = zeros(size(n));
    11. o = 13;
    12. s(200+(1:fs)) = sin(2*pi*o/fs*(1:fs)) .* hamming(fs)';
    13. %% 稀疏分段常数
    14. x = zeros(size(n));
    15. x(100:110) = -1;
    16. x(400:420) = 1;
    17. %% 添加噪音
    18. w = sigma*randn(size(n));
    19. y = f+s+x+w;
    20. end

     

    1. %% plot_signals( y, x_ex3, kc, k, tk, th, binX, binA, method)
    2. %
    3. % Inputs:
    4. % y - 噪声信号
    5. % x_ex3 - 睡眠纺锤信号
    6. % k - 检测到k-综合波信号
    7. % tk - Teager-Kaiser能源运营商
    8. % th - 主轴检测阈值
    9. % binX - 二进制向量
    10. % binA - 带有算法注释主轴的二进制向量
    11. % method - SASDPR/DETOKS
    12. %
    13. % Outputs:
    14. % None
    15. %% ________________________________________________________________________
    16. %%
    17. function plot_signals( y, x_ex3, kc, k, tk, th, binX, binA, method)
    18. global simdata;
    19. fs = simdata.fs;
    20. if strcmp(method, 'DETOKS')
    21. txt_1 = [method, ', EEG signal ($\mathbf{y}$), ','$\lambda_1$ = ', num2str(simdata.lam0_detoks), ...
    22. ', $\lambda_2$ = ', num2str(simdata.lam1_detoks), ', $\lambda_3$ = ', num2str(simdata.lam2_detoks),...
    23. ', $\mu$ = ', num2str(simdata.mu_detoks)];
    24. txt_2 = [method, ', Low-frequency signal'];
    25. txt_3 = [method, ', Teager-Kaiser energy operator, Threshold = ', num2str(simdata.th_detoks)];
    26. txt_4 = [method, ', Detected EEG K-complexes'];
    27. elseif strcmp(method, 'SAPR')
    28. txt_1 = [method, ', EEG signal ($\mathbf{y}$), ','$\lambda_1$ = ', num2str(simdata.lam0_sapr), ...
    29. ', $\lambda_2$ = ', num2str(simdata.lam1_sapr), ', $\eta$ = ', num2str(simdata.eta_sapr),...
    30. ', $\mu$ = ', num2str(simdata.mu_sapr)];
    31. txt_2 = [method, ', K-Complex signal ($\mathbf{x}_2$)'];
    32. txt_3 = [method, ', Teager-Kaiser energy operator, Threshold = ', num2str(simdata.th_sapr)];
    33. txt_4 = [method, ', Detected EEG K-complexes'];
    34. end
    35. N = length(y);
    36. n = 0:N-1;
    37. %% Plot
    38. figure('rend','painters','pos',[100 100 550 500]);
    39. clf
    40. subplot(4,1,1);
    41. text(-0.1,0.98,'(a)','Units', 'Normalized', 'VerticalAlignment', 'Top'); hold on;
    42. plot(n/fs, y, 'k'); hold on;
    43. p0 = plot(n/fs, x_ex3, 'r'); hold off;
    44. title(txt_1,'interpreter','latex')
    45. legend([p0], {'K-complex'},'location','north');
    46. legend boxoff;
    47. set(gca, 'box', 'off')
    48. axis tight;
    49. subplot(4,1,2);
    50. text(-0.1,0.98,'(b)','Units', 'Normalized', 'VerticalAlignment', 'Top'); hold on;
    51. p0 = plot(n/fs, kc, 'k'); hold on;
    52. p1 = plot(n/fs, k, '--k'); hold off;
    53. title(txt_2,'interpreter','latex')
    54. if strcmp(method, 'SAPR')
    55. legend([p1,p0], {'$\mathbf{\Psi} \mathbf{k}$', ...
    56. '$\mathbf{B}^T \mathbf{B} \mathbf{\Psi} \mathbf{k}$'},'interpreter','latex', ...
    57. 'location','north');
    58. legend boxoff;
    59. end
    60. set(gca, 'box', 'off')
    61. axis tight;
    62. subplot(4,1,3);
    63. text(-0.1,0.98,'(c)','Units', 'Normalized', 'VerticalAlignment', 'Top'); hold on;
    64. p0 = plot(n/fs, tk); hold on;
    65. p1 = plot(n/fs, th*ones(1,N), 'r--'); hold off;
    66. title(txt_3,'interpreter','latex')
    67. legend([p0,p1], {'TKEO','Threshold'},'location','north');
    68. legend boxoff;
    69. set(gca, 'box', 'off')
    70. axis tight;
    71. subplot(4,1,4);
    72. text(-0.1,0.98,'(d)','Units', 'Normalized', 'VerticalAlignment', 'Top'); hold on;
    73. plot(n/fs, binX, 'Color', [0,0,0]+0.7,'linewidth',1.0); hold on;
    74. plot(n/fs, binA, 'k');
    75. title(txt_4,'interpreter','latex')
    76. xlabel('Time (seconds)','interpreter','latex')
    77. legend('Expert',method,'location','north');
    78. legend boxoff
    79. set(gca, 'box', 'off')
    80. ylim([-0.2, 1.2])
    81. printme_pdf = @(ex,meth) print('-dpdf', sprintf('../../results/%s_%s',ex,meth));
    82. printme_pdf('ex6',lower(method));
    83. % printme_eps = @(ex,meth) print('-depsc', sprintf('figures/%s_%s',ex,meth));
    84. % printme_eps('ex6',lower(method));
    85. end

    程序: 

     

     

    数据: 

     

     

     

     

  • 相关阅读:
    ps gif动图怎么做,教你一招更简单
    FPGA ZYNQ VIVADO创建IP核点亮LED灯 方式一
    Dos命令
    第5章:传输层
    Java 并发编程学习总结
    股票程序化交易如何把交易分析简单化?
    数据分析9
    SpringBoot 自定义注解异步记录复杂日志
    如何管理和维护组件库?
    多线程编程(1)
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/125420045