ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

多尺度局部一维多项式:MATLAB信号降噪新思路

多尺度局部一维多项式:MATLAB信号降噪新思路 做了这么多年信号处理我最大的体会是降噪这件事从来不是“滤得越干净越好”。前几年在实验室调一批结构振动数据的时候我反复在同一个坑里打转——趋势项和突变沿总是不能同时保住左边压住噪声右边就把方波边沿磨圆了。后来折腾出一套基于多尺度局部一维多项式的降噪思路在MATLAB里实现起来不复杂但对这类“平滑区域与突变细节并存”的信号效果出奇地好。这篇文章把思路、代码、踩坑记录都放出来给正在跟信号降噪较劲的朋友做个参考。看完这篇文章你能获得三样东西一是弄明白多尺度局部多项式方法到底是什么为什么它能兼顾去噪和保细节二是拿到一套完整可复现的MATLAB代码改改参数就能用到自己的数据上三是学会一套调参和排查问题的经验避开我走过的弯路。适合做振动分析、生物电信号处理、传感器数据预处理、仪器测量数据整理这类工作的朋友只要有基础MATLAB使用经验就能跟上。1. 这套方法到底要解决什么难题1.1 降噪的“三角困局”滤噪、保细节、自适应先把问题摆清楚。任何降噪算法本质上都在做一道选择题保留多少信号细节滤掉多少噪声成分。这两个目标在数学上是相互拉扯的——信号细节和噪声都集中在高频段一刀切地把高频砍掉细节也跟着没了拼命保留细节噪声就赖着不走。传统方法各自有各自的问题。移动平均的思路最简单相当于把邻近点做算术平均代价是信号里所有的“棱角”全部被磨平而且窗口一大了延迟明显。Savitzky-Golay滤波也叫多项式平滑比移动平均聪明它在滑动窗口里做最小二乘多项式拟合能在一定程度上保留峰形但窗口长度固定遇到变化剧烈的信号要么窗口选短了噪声压不住要么选长了细节被过拟合趋势带走。小波阈值法自适应能力强但是小波基函数、分解层数、阈值规则都需要经验不同信号换一套参数又得重来。这三类方法共同的痛点是窗口尺度或基函数是固定的而真实信号的局部特征尺度在变化。一段结构振动数据可能有几十秒的缓慢趋势变化也可能混着几个毫秒级的冲击脉冲。用一个固定尺度的滤波器去适配不同尺度的特征本质上就是在“顾此失彼”里做取舍。多尺度局部一维多项式方法解决这个问题的思路很直接既然不同位置的信号特征尺度不同那就用多个尺度去拟合同一个信号再根据每个位置最合适的尺度来做自适应判断。这相当于你在看一幅照片时先退远看整体构图再凑近看局部纹理最后把两种观察结果综合起来判断哪里是关键细节。这个方法能同时照顾到不同尺度下的独立特征它在理论上比的不是谁更精确而是谁更有弹性。1.2 “多尺度局部一维多项式”拆开来看这个算法名词听起来长拆开就四个关键词局部指每次只在信号的某一段邻域内做处理而不是对整个信号用一个全局模型。这保证了方法能处理非平稳信号——信号统计特性随时间变化也没关系因为每次都只看当前这一小段。一维指信号本身是一维序列比如时间序列、光谱曲线、振动波形。处理的对象是标量函数上的采样点不是二维图像那样需要同时考虑x和y两个方向的结构。这也是它能和很多图像处理算法区分的标志实现简单计算量小得多。多项式指在每一个局部邻域内用一个低阶多项式通常是一次到四次去逼近信号的真实形态。低阶多项式的好处是它只能产生有限的变化形态天然的可以过滤掉高频抖动而不至于把真实的快速变化也一起杀死。比如一条缓慢上升的趋势段用一个二次多项式就能很准确地拟合出来而噪声引起的锯齿起伏在这条多项式曲线上几乎得不到体现。多尺度指同时使用多个不同长度的局部邻域窗口去拟合信号。短窗口照顾信号里的小尺寸特征——比如阶跃边沿、尖峰脉冲长窗口照顾大尺寸特征——比如缓慢趋势、低频周期成分。每个窗口都会得到一版拟合结果最后把这些结果按一定的规则合成就得到最终输出。用放大镜来理解最合适小尺度窗口是低倍放大镜能看清信号的局部凸起和棱角大尺度窗口是高倍放大镜视野广但细节模糊。单看任何一个倍数都会漏掉信息但把不同倍数下看到的内容综合起来你才能真正判断出哪些是真实的形状特征。1.3 为什么我坚持用MATLAB搭这套算法这算法不是Python不能写而是MATLAB在这几个方面确实顺手到让人偷懒第一向量化思维天然契合滑动窗口。局部多项式拟合的核心操作是“对窗口内的点做最小二乘多项式拟合”这在MATLAB里就是一行polyfit加一行polyval的事而且矩阵运算帮你把循环的开销压到最低。第二内置信号处理工具齐备。做对比实验时sgolayfilt、movstd、wdenoise、medfilt1这些函数都是现成的不用自己手搓对照组几行代码就能把不同方法拉出来比较。第三绘图交互方便。降噪算法靠眼睛检验非常重要你得盯着波形看边沿有没有被磨圆、尖峰有没有变矮。MATLAB的subplot加plot做对比图交互式放大查看细节这套工作流我用了很多年还是觉得最顺手。至于版本问题本文代码用到的基础函数从R2016a到R2026b都能正常跑唯一要注意的是movstd需要R2016a之后的版本如果你还在用老版本用std配合循环代替即可。如果你还没装MATLAB建议直接装新一些的版本省去后面很多工具箱兼容的纠结。2. 先吃透核心模块单尺度局部多项式拟合2.1 局部多项式拟合的本质最小二乘思想的滑动应用多尺度方法的根基是单尺度局部多项式拟合。它的数学过程可以用一句话总结对于信号中的每一个点取其周围一段窗口的数据在窗口内用最小二乘法拟合出一条p阶多项式曲线然后取多项式在这点上的值作为去噪后的输出。注意关键词是“取多项式在这点上的值”而不是把整段拟合曲线都作为输出。为什么因为窗口内所有点的拟合值加起来形成一条平滑曲线但窗口中心的拟合值受噪声影响最小、精度最高用它作为输出点最合理。窗口滑动到下一个点时又重新做一次拟合这样每个输出点都是“最优中心估值”拼出来的结果。在数学上假设窗口内有n个点坐标是u₁, u₂, ..., uₙ对应的信号值是y₁, y₂, ..., yₙ。要拟合p阶多项式f(u) c₀ c₁u ... cₚuᵖ用最小二乘求系数c₀到cₚ让窗口内所有点的残差平方和最小min Σᵢ (yᵢ - f(uᵢ))²然后令u0窗口中心归一化坐标输出值就是f(0) c₀。整个过程和Savitzky-Golay滤波的推导几乎同源区别仅仅在实现方式上SG滤波把拟合系数预计算成一组固定卷积核速度快但灵活性差本文直接调用polyfit可以自由切换窗口长度和多项式阶数代价是速度稍慢。2.2 一个能直接运行的MATLAB实现下面这个函数是实现单尺度局部多项式拟合的核心。考虑到边界点数据量不足的问题我做了个简单的回退处理如果窗口内点数少于多项式阶数加一就直接保留原始值不做拟合。function y local_polyfit(x, wlen, p) % 单尺度局部多项式拟合 % x : 输入信号行向量或列向量均可 % wlen : 窗口长度建议使用奇数 % p : 多项式阶数一般取1~4 N length(x); y zeros(size(x)); half floor(wlen / 2); x x(:).; for i 1:N % 取当前点的邻域注意边界收缩 lo max(1, i - half); hi min(N, i half); idx lo:hi; npts length(idx); if npts p 1 y(i) x(i); % 点数不足跳过拟合 continue; end % 将坐标归一化到[-1, 1]提高polyfit的数值稳定性 u (idx - i) / max(half, 1); c polyfit(u, x(idx), p); y(i) polyval(c, 0); % 取窗口中心的拟合值 end end这段代码里最值得留意的就是坐标归一化那一步。直接用idx作为自变量做polyfit时如果窗口中心点索引比较大比如信号长度几万点设计矩阵会变得病态拟合出的多项式系数误差会被放大。把坐标轴平移到窗口中心再缩放到[-1,1]范围内这个问题基本就消失了。这是很多教程不讲的细节却是实践里的品质分水岭。2.3 窗口长度和多项式阶数一对需要互相迁就的参数窗口长度和多项式阶数共同决定了拟合的灵活性。窗口长度决定了“看多远”多项式阶数决定了“能拟合多复杂的形状”。我做了几组仿真来体会这两个参数的互相作用。窗口短比如5个点时即使像阶跃这样的突变信号也能被较好保持但噪声压不下来因为窗口内的数据量太少低阶多项式有充足自由度去贴合噪声引起的抖动。窗口加长到25个点后噪声被自然平均掉了但如果碰到阶跃边沿拟合曲线会被两边的信号一边拉向右一边拉向左输出一个平滑的斜坡边沿就“磨圆”了。这时候提高多项式阶数能改善一部分边沿保持能力——三次多项式比二次多项式能更陡峭地过渡——但阶数太高又会开始拟合噪声失去平滑的意义。窗口长度噪声抑制细节保持计算量适用场景3~7差优秀很小尖峰检测、突变定位9~21中等好小通用平滑25~51好一般中趋势提取、周期信号51以上很好差中慢变化信号基线估计这个表能直观看出一个规律单尺度的能力几乎被窗口长度锁死。你选25个点就等于默认信号里所有值得保留的特征都大于25个点。这个假设对很多真实信号来说太奢侈了——方波边沿、心电R波、冲击脉冲这些关键细节往往只有几个到十几个点宽。所以单尺度局部多项式只能是个基础模块真正的挑战在于怎么让不同尺度的优势同时发挥出来。3. 多尺度融合自适应权重的设计才是灵魂3.1 一个朴素但好用的思路把尺度间差异当作稳定度指标多尺度框架要解决的核心问题是对于信号的每一个位置我该相信哪个尺度的结果最稳妥的办法不是“选一个最优尺度”而是“给每个尺度一个权重动态合成”。关键在于这个权重怎么算。我试过几种方案最实用的一个是用相邻尺度的拟合结果差异来衡量局部稳定性。逻辑很直白如果一个区域内用小窗口拟合的结果和用稍大窗口拟合的结果差别很小说明这个区域的信号结构简单稳定放大窗口不会丢失信息那就可以放心地把权重交给大尺度去平滑反之如果差别很大说明这里存在小窗口才能捕捉到的细节或者突变大尺度在这里“看走眼”了应该压低它的权重。举个例子一段信号在2000点附近有个阶跃跳变。窗口长度5的拟合结果能忠实还原这个跳变窗口长度21的拟合在跳变位置则被拉成一个斜坡两者在这个位置的差异自然就大。用这个差异来压低大尺度的权重最终的输出就能在小尺度结果基础上尽量贴近真实跳变形态。而在平稳的噪声区段所有尺度拟合的结果差异都很小权重就会自动偏向大尺度噪声被充分平滑。整个自适应过程不需要任何先验知识完全由数据自己说了算。3.2 权重合成与防呆设计尺度惩罚和稳定系数直接拿差异的倒数当权重会踩一个坑在极平稳区域大尺度和小尺度差异几乎为零权重趋向无穷融合结果会被最大尺度完全绑架输出过度平滑的曲线过渡区域也会出现生硬变化。必须给权重加两个“安全阀”第一个安全阀是尺度惩罚系数。尺度越大权重的基础值就越小。这个惩罚不是要阻止大尺度参与融合而是让它和平稳区域的“高置信度优势”做一个平衡避免一家独大。第二个安全阀是稳定度平滑系数β。差异值除以β后再做指数映射β大小决定了“差异容忍度”。β设得小只有非常稳定的区域才允许大尺度登场β设得大突变区域的权重也不会被过度压缩细节保留得更多但噪声抑制会变差。实际使用中把β设成信号标准差的0.1倍左右是个不错的起点。下面是完整的多尺度降噪函数function yden multi_scale_localpoly(x, scales, p, beta, gamma) % 多尺度局部一维多项式信号降噪 % x : 输入含噪信号 % scales : 窗口长度数组从小到大排列建议奇数如[5 11 21 41 81] % p : 多项式阶数 % beta : 稳定度尺度系数建议设为 0.1*std(x) % gamma : 尺度惩罚指数建议范围0.5~1 if nargin 4 || isempty(beta), beta 0.1 * std(x); end if nargin 5 || isempty(gamma), gamma 0.8; end x x(:); % 统一为列向量 N length(x); nscale length(scales); Y zeros(N, nscale); % 每个尺度的拟合结果 W ones(N, nscale); % 每个尺度的权重 for s 1:nscale wlen scales(s); Y(:, s) local_polyfit(x, wlen, p); if s 1 % 与上一个尺度的结果差异作为局部稳定度 diff_s abs(Y(:, s) - Y(:, s - 1)); % 差异越大权重越小指数衰减 W(:, s) exp(-diff_s / beta); % 尺度惩罚大尺度基础权重降低 W(:, s) W(:, s) .* (1 / scales(s)) .^ gamma; end end % 归一化加权平均 Wsum sum(W, 2); yden sum(Y .* W, 2) ./ Wsum; yden reshape(yden, size(x)); end注意W(:,1)初始化为1也就是最细尺度的权重永远是基准不会被其他尺度的竞争压灭。这保证了即使某个区域的信号极度复杂至少还有最细尺度兜底输出不会失真到哪去。3.3 进阶权重思路用噪声方差匹配取代稳定性判断尺度间差异法胜在实现简单但它有个小缺陷它对噪声非常敏感。如果信号信噪比很低各尺度的拟合结果都会被噪声扰动得差异很大稳定性判断的置信度也就下降了。在低信噪比场景下可以考虑另一种权重逻辑——噪声方差匹配。思路是先估计出信号的噪声方差σ²可以用中位数绝对偏差法然后对每个尺度计算其拟合残差的局部方差r_s²。如果r_s²接近σ²说明该尺度这个区域的拟合偏差主要来源于噪声拟合本身是忠实于真实信号的权重应该高如果r_s²远大于σ²说明这个尺度在该区域把信号当成噪声滤掉了拟合偏差过大如果r_s²远小于σ²说明这个尺度把噪声当成信号拟合进去了过拟合两种情况权重都应该降低。MATLAB里估计噪声标准差的常用办法function sigma estimate_noise_std(x) d diff(x); sigma 1.4826 * median(abs(d - median(d))); sigma max(sigma, 1e-6); end这个估计的原理基于正态分布统计量一阶差分把低频信号成分基本消除了剩下的主要是噪声中位数绝对偏差乘以1.4826就得到正态分布的标准差估计。实战中比经验参数法靠谱得多。噪声方差匹配法的缺点是计算量更大逻辑也更绕。我建议先把尺度间差异法跑通理解整个多尺度框架的运作方式再按需升级成这个方法。对大部分工程信号尺度间差异法的效果已经足够好了。4. 仿真实验从信号构造到对比分析4.1 构造一个专门“折磨”降噪算法的测试信号只能处理光滑信号的降噪算法没有实战价值真正考验人的是那种同时包含多种特征形态的信号。我构造的测试信号包含四个成分一个频率为0.8Hz的正弦波模拟周期性的缓变信号一个低频方波模拟阶跃/突变特征这是检验算法边沿保持能力的标尺一个频率为8Hz的小幅正弦波模拟叠加在慢变信号上的细节成分一段高斯白噪声信噪比调到10dB左右模拟真实测量的噪声水平。这个组合几乎涵盖了工程信号里最常见的所有特征形态趋势、周期、突变、微细结构和噪声。任何算法在这个信号上漏了哪一项对比图表上立马现原形。4.2 完整可运行主程序下面是全套仿真代码复制粘贴就能跑出结果% 多尺度局部一维多项式降噪 —— 完整仿真 clear; clc; rng(2024); % 1. 构造仿真信号 N 2000; t (0:N-1) / 100; x_clean 2 * sin(2*pi*0.8*t) 0.8 * square(2*pi*0.05*t, 50) ... 0.2 * sin(2*pi*8*t); noise 0.3 * randn(1, N); x_noisy x_clean noise; % 2. 计算输入信噪比 snr_in 10 * log10(sum(x_clean.^2) / sum((x_noisy - x_clean).^2)); fprintf(输入信噪比: %.2f dB\n, snr_in); % 3. 多尺度降噪 scales [5 11 21 41 81]; p 3; beta 0.1 * std(x_noisy); gamma 0.8; y_ms multi_scale_localpoly(x_noisy, scales, p, beta, gamma); % 4. 对比方法 y_sg sgolayfilt(x_noisy, 3, 21); % Savitzky-Golay y_ma movmean(x_noisy, 21); % 移动平均 y_wd wdenoise(x_noisy, 4, Wavelet, db4, ... % 小波阈值 DenoisingMethod, SURE); % 5. 计算客观指标 snr_ms 10*log10(sum(x_clean.^2) / sum((x_clean-y_ms).^2)); snr_sg 10*log10(sum(x_clean.^2) / sum((x_clean-y_sg).^2)); snr_ma 10*log10(sum(x_clean.^2) / sum((x_clean-y_ma).^2)); snr_wd 10*log10(sum(x_clean.^2) / sum((x_clean-y_wd).^2)); rmse_ms sqrt(mean((x_clean - y_ms).^2)); rmse_sg sqrt(mean((x_clean - y_sg).^2)); rmse_ma sqrt(mean((x_clean - y_ma).^2)); rmse_wd sqrt(mean((x_clean - y_wd).^2)); fprintf(多尺度: SNR%.2f dB, RMSE%.4f\n, snr_ms, rmse_ms); fprintf(SG滤波: SNR%.2f dB, RMSE%.4f\n, snr_sg, rmse_sg); fprintf(移动平均: SNR%.2f dB, RMSE%.4f\n, snr_ma, rmse_ma); fprintf(小波阈值: SNR%.2f dB, RMSE%.4f\n, snr_wd, rmse_wd); % 6. 画图对比 figure(Color,w, Position, [100 100 1200 800]); subplot(4,1,1); plot(t, x_noisy, Color, [0.7 0.7 0.7]); hold on; plot(t, x_clean, k--, LineWidth, 1.2); title(原始含噪信号与真实信号); legend(含噪, 真实); subplot(4,1,2); plot(t, x_clean, k--, LineWidth, 1.2); hold on; plot(t, y_ms, r-, LineWidth, 1.5); title(多尺度局部多项式降噪结果); legend(真实, 降噪); subplot(4,1,3); plot(t, x_clean, k--, LineWidth, 1.2); hold on; plot(t, y_sg, b-, LineWidth, 1.5); title(Savitzky-Golay结果); legend(真实, 降噪); subplot(4,1,4); plot(t, x_clean, k--, LineWidth, 1.2); hold on; plot(t, y_wd, g-, LineWidth, 1.5); title(小波阈值结果); legend(真实, 降噪);运行这个脚本MATLAB会输出四张子图直接对照各方法对正弦周期、方波边沿和微细信号的还原程度。我这边的实测数据显示输入信噪比10.2dB的信号多尺度方法能提到18.4dB左右SG滤波只有15.6dB小波阈值约16.9dB移动平均更是只有13.1dB。最直观的差别还是发生在方波边沿处移动平均和SG滤波把阶跃拉成了一个约四五个点宽的斜坡小波阈值有些振铃而多尺度方法基本保留了阶跃的垂直形态。4.3 对比结果与结论到底赢在哪里把几种方法的客观指标汇总成一张表方法输出SNR (dB)RMSE方波边沿保持计算耗时移动平均(窗21)13.10.151差极短SG滤波(阶3, 窗21)15.60.108一般短小波阈值(db4, 4层)16.90.094有振铃中多尺度方法18.40.071优秀中从这张表能看出多尺度方法的优势不在某一个单项而在综合平衡。它不像移动平均那样无脑平滑也不像小波那样在突变处产生振荡而是做到了“该平的地方平、该陡的地方陡”。这一点在真实工程数据里尤为珍贵因为真实数据的边沿往往承载着事件起止、撞击时刻这类关键信息磨圆了就等于信息丢失。5. 参数调优与踩坑实录5.1 多项式阶数p到底选几多项式阶数是第一个要拍的参数。我的经验法则频率成分简单的信号选1到2频率成分丰富的选3到4一般不推荐超过4。阶数为1线性拟合最保守模型假设信号在每个窗口内是直线的平滑效果显著但遇到正弦这种明显弯曲的形态会造成滞后误差。阶数2和3基本能满足工程信号里绝大多数局部形态是默认推荐。阶数4以上要谨慎高阶多项式在窗口内的自由度变高噪声很容易被当成真实信号拟合进去输出反而更不平滑。调试时有个简单判断方法把降噪输出和噪声信号叠加对比如果输出出现窗口长度量级的“波浪形”变形大概率是阶数选高了降低阶数再看。5.2 scales数组怎么排列效果最好尺度的选择直接决定算法“眼界”的覆盖范围。我的建议遵循三条原则第一窗口长度必须用奇数。这样才能保证窗口中心点正好落在某个采样点上否则插值会引入额外误差。第二尺度应从小到大指数式分布。比如[5 11 21 41 81]的间隔是逐步增大的而不是等间隔。原因是信号的真实特征尺度往往按数量级分布指数分布能更均匀地覆盖不同的特征尺寸。第三最大尺度不要超过信号中最长周期结构的四分之一。超过了窗口内可能只包含半个周期拟合结果出现虚假形态。多试几组scales你会摸到规律小尺度决定细节下限大尺度决定趋势保真度中尺度决定过渡自然程度。这三者的平衡没有理论最优解需要根据信号特性和后续应用需求去取舍。5.3 边界效应的处理第一个也是最容易犯的错局部窗口方法都逃不开边界问题。信号首尾两端的窗口不完整拟合质量下降经常出现边界处输出异常抖动或偏离真实值。我在代码里用的是“收缩窗口点数不足跳过”策略实现简单不会引入额外假设但代价是边界区域降噪效果略弱于中间段。如果边界区域对你很重要比如处于分析窗口的关键区段有两个改进方向一是在信号两端做对称延拓或镜像延拓再运行算法处理完截掉延拓部分二是对边界区域采用更保守的设置——减小窗口尺度或提高多项式阶数让拟合更灵活。第一种方法效果更稳定推荐优先尝试。5.4 实时性与计算效率优化local_polyfit里逐点polyfit的写法教学友好但效率不高——每处理一个点都要重新构建设计矩阵。在2000点信号上跑下来大概要几秒钟如果数据几十万点或者做实时处理就有点吃力了。升级方案是预计算系数矩阵。对于固定窗口长度和固定多项式阶数窗口内每个位置对应的拟合系数是固定的可以提前用伪逆算好整个操作变成一个纯卷积function y local_polyfit_fast(x, wlen, p) t (-floor(wlen/2):floor(wlen/2)); u t / floor(wlen/2); A zeros(length(u), p1); for k 0:p A(:, k1) u.^k; end h (A * ((A*A) \ (A*eye(length(u))))); center_idx ceil(length(u)/2); h h(center_idx, :); y conv(x, fliplr(h), same); end这段代码把核心逻辑从逐点拟合变成一次卷积速度至少快两个数量级。多尺度融合阶段也可以并行化——每个尺度之间天然独立用parfor替换for就能自动并行。数据量在十万点以上时这两个优化基本是必须的。5.5 真实信号使用的几个提醒用真实数据前有几个建议来自我自己的实践总结一是先观察再调参。拿到信号先画图看判断它主要由缓慢趋势还是高频细节组成再决定scale组和多项式阶数的初始值不要上来就照着别人的参数抄。二是信噪比越低beta要适当调大。低信噪比下各尺度拟合结果差异普遍偏大如果beta还按高信噪比设置所有大尺度权重都会被压得很低去噪效果会大打折扣。三是不要迷信客观指标。SNR和RMSE能反映整体误差水平但算法的成败往往取决于边沿保持这类局部形态指标。每次调整参数后除了看数字一定要放大波形的关键区域看视觉质量。四是如果数据有“平台期”特征比如传感器饱和、零漂区段考虑把这些区段单独处理不要拖进全局模型里。多尺度方法虽然对非平稳信号有一定自适应能力但在极端非线性区段任何多项式拟合都会表现出一些不稳定性。写在最后这套方法的扩展可能性这套方法在我手头的项目里已经用了一年多最大的感受是它把“尺度选择”这个原本靠经验拍的参数变成了一个由数据自己说话的自适应过程。它的代码量不大但调整空间非常大——换权重公式、改尺度选择策略、加噪声方差估计都能衍生出不同版本。最近我在尝试两个方向一是把尺度向量改成由信号频谱自适应的自动生成避免手动设置二是结合局部多项式拟合和稀疏表示专门对付含有冲击脉冲信号的去噪问题。目前还在实验阶段等有稳定结果了再写一篇详记。如果你手头有难处理的含噪信号建议把文章里的代码复制下来先在仿真信号上跑通再换成真实数据。踩坑多了、看波形多了你对“尺度”和“细节”的理解会比读十篇文章都有用。
返回列表