1. 做轴承故障诊断,为什么我盯上了非下采样小波包
搞设备状态监测和轴承故障诊断这些年,我踩过最多的坑就是“信号提出来了,但特征根本看不出来”。滚动轴承早期故障的信号非常微弱,本身就被设备的工频振动、环境噪声、结构共振这些乱七八糟的成分压得死死的。早期剥落、点蚀这类故障,特征频率的能量往往比噪声还要低,直接拿原始信号做频谱分析基本是白费功夫。
不少人一开始都试过经典的小波变换,包括我自己。传统离散小波变换(DWT)在每一层分解后都要做一次降采样,这就带来一个致命问题:平移敏感性。什么意思?同一段故障信号,只要起始相位稍微偏一点,分解出来的小波系数就完全不同,而且因为降采样,高频段的频率分辨率很差,你拿它找故障特征频率的时候,频带错位、能量泄露是家常便饭。
后来我换到非下采样小波包变换(NSWPT),配上精细滤波的思路,整个诊断流程才算是真正稳定下来。非下采样小波包的核心就是不降采样,每一层分解后保留完整的信号长度,配合插值滤波,让分解结果具备平移不变性。这对轴承故障诊断来说太重要了,尤其是要保持脉冲冲击的原始位置信息、保持各频段能量的精确分配,传统降采样方法是做不到的。
这篇内容就围绕“基于非下采样小波包精细滤波的轴承故障诊断技术特征分析”这个主题,把我自己的完整处理链路、参数选择依据、踩过的坑、以及自己总结的排查方法全部摊开。适合刚接触故障诊断的同行,也适合已经在用小波分析但觉得效果不够稳定的工程师。你放心往下看,我尽量用干活时的思路来讲,不讲废话。
2. 非下采样小波包到底解决了什么问题
2.1 传统小波分析的两个根子问题
先花点时间把算法背后的逻辑捋清楚,因为很多人用不好小波包,不是操作问题,而是根本没理解它在“干什么”。
传统小波分析可以理解成用一组带通滤波器把信号不断拆开:低频做近似分量A,高频做细节分量D。问题出在每一层滤波之后的“抽稀”环节,为了让下一层计算量减半,传统做法是隔一个点取一个点,这就是降采样。降采样会带来两个直接后果:
第一,平移敏感性。位置稍微偏移一点,抽稀后保留下来的采样点就变了,小波系数的形态跟着大幅变化。轴承故障产生的脉冲冲击在时间上本来就是随机的,起点各不相同,你用传统小波去分解不同时刻的故障信号,得到的系数差异巨大,特征提取的稳定性自然就差。
第二,频率混叠。降采样不满足奈奎斯特采样率时,高频分量会折叠回低频区。原本该在30kHz附近的冲击信号,分解完可能跑到了5kHz附近,你在分析频带里看到的“特征频率”和真实故障特征频率对不上号。
非下采样小波包把“抽稀”这一步去掉了,每一层都保持和原始信号同样的长度和采样率,滤波器的带通效果用多孔算法来实现。代价是计算量变大、内存开销高,但换来的是频率定位准确、时域形态无损。对一段100k采样率的轴承振动信号做3层非下采样小波包分解,你要处理的系数总量比传统方法多几倍,但后续包络谱里的特征线干净得让你觉得这笔开销值。
2.2 非下采样小波包在轴承诊断里的实际优势
轴承故障信号有两个最关键的物理特征:一是周期性冲击,二是高频共振调制。冲击作用的持续时间极短,通常是微秒级,对应频率范围很宽,可能覆盖几千赫兹到几十千赫兹。传统小波分解在较高层数时,各频带宽度变得非常宽,分辨率不够,很难把冲击特征和结构共振区分开。
非下采样小波包的优势主要体现在三个方面。
第一是时频分辨率可以做到精细且统一。每一层的所有子带都具有原始信号的采样率,这意味着你能在构造滤波器时精确控制带宽。比如设置3层分解,就可以得到8个均匀细分的频带,每个频带都能保持高时间分辨率。你可以在各个频带中找出能量最高的那个,故障冲击的特征往往就在那里集中。
第二是平移不变性保护了包络解调的完整性。因为系数不降采样,用希尔伯特变换做包络解调时,时间序列的对齐关系不会被破坏,解调出来的包络信号仍然和原始冲击保持精确的对应关系。这对于做包络谱找特征频率极其重要,包络谱谱线的位置不会“漂移”。
第三是精细滤波的灵活性。非下采样小波包允许你在分解后只保留特定子带的系数,把其他子带全部置零再重构信号,这就构成了一种天然的自适应滤波器。针对不同转速、不同故障类型的轴承,你只需要调整保留子带的组合,相当于用同一套算法做了多组窄带滤波器,非常实用。
3. 精细滤波的完整实现步骤和参数选择
3.1 确定分解层数:不是拍脑袋选出来的
非下采样小波包的应用,第一个决定成败的环节是分解层数。
分解层数少了,频带划分过粗,故障冲击所在的共振频带会被淹没在噪声和正常振动里。分解层数多了,计算量急剧上升,而且子带过于细分反而把能量打散,包络谱里的特征线不够突出。我的经验是用采样频率和预估故障特征频率的比值来确定初始层数。
举个例子,某风机轴承的转频是29.5Hz,外圈故障特征频率BPFO约107.6Hz。采样率设成51200Hz,初选层数N的计算思路是让最窄子带的宽度接近特征频率的3到5倍。非下采样小波包第N层每个子带的频率宽度是fs/2^(N+1),所以要满足fs/2^(N+1)≈300到500Hz这个量级,取N=6是合理的,再高一两层也可以,但性能收益已经很微弱。
我通常直接做7层分解,然后用能量比和峭度指标来辅助判断。做完各子带的峭度值统计后,如果最高峭度集中在某两个相邻子带,说明层数合适;如果峭度平均散布在所有子带,说明层数太少,信号没被有效分离。
3.2 精细滤波的核心:子带筛选与信号重构
拿到各子带系数后,重点就来了。你不能简单地把几个子带叠加起来,那样等于什么都没做。
我的标准流程分四步:
第一步,计算每个子带的希尔伯特包络谱。希尔伯特变换构造解析信号,把信号的幅值包络提出来,包络信号的频谱里就能看到故障特征频率及其谐波。这个步骤是包络谱分析的核心。以滚动轴承为例,加速度传感器拾取的信号经过带通滤波后,包络谱中会出现外圈特征频率BPFO,内圈是BPFI,滚动体是BSF的可见谱线,这些频率数值和设备转速、轴承几何参数直接相关。
第二步,计算各子带包络谱的故障特征频率幅值与噪声基底之比。这个比值我习惯叫作“特征显著度”。首选显著度最高的子带之一或两个相邻子带。但这里有个容易被忽略的坑:谱线能量最大的子带不一定是故障最明显的子带。轴承故障信号通常分散在多个共振频带上,单一子带里的能量可能不高,可是特征频率线上集中了大部分有效冲击能量。所以筛选依据必须用“频率线集中度”,而不是“频带总能量”,不然你滤出来的信号还是带着一堆没用的干扰。
第三步,对选出的子带系数做精细阈值处理。我用的阈值方式是软硬阈值结合的折中方案:保留子带内绝对值较大的系数,对较小的系数做软阈值收缩,这样可以保留冲击细节又不会过度平滑。阈值大小的设置看信号噪声水平,一般是该子带系数标准差的2到3倍。这一条处理上要小心,阈值切太狠会把小冲击切没了,切太轻等于没滤,得反复对比包络谱的谱线变化。
第四步,用置零后的子带系数重构信号,然后对重构信号再做一次包络解调,直接做FFT得到最终的分析谱。
3.3 参数计算的完整数据实例
老规矩,直接给你一组我处理过的真实设备参数,这套流程跟着走一遍就能理解:
已知参数:
- 电机转速:1497r/min,转频fr=24.95Hz
- 轴承型号:SKF 6305-2RS,节径D=39.83mm,滚动体直径d=7.94mm,滚动体数量z=7,接触角α≈0°
- 采样频率:fs=51200Hz
- 采样时长:4s,共204800个点
计算特征频率:
- 外圈故障特征频率:BPFO = z/2 × fr × (1 - d/D×cosα) = 7/2 × 24.95 × (1 - 7.94/39.83) ≈ 69.8Hz
- 内圈故障特征频率:BPFI = z/2 × fr × (1 + d/D×cosα) = 7/2 × 24.95 × (1 + 7.94/39.83) ≈ 104.9Hz
- 滚动体故障特征频率:BSF = D/(2d) × fr × (1 - (d/D×cosα)²) ≈ 51.2Hz
这些特征频率是后续识别谱线位置的“坐标地图”。实际做7层非下采样小波包分解,子带频率范围如下表:
| 子带编号 | 频率范围(Hz) | 主要关注点 |
|---|---|---|
| 0 | 0 - 200 | 转频及低次谐波、外圈BPFO基频 |
| 1 | 200 - 400 | BPFO的2倍频、内圈BPFI |
| 2 | 400 - 800 | 特征频率中低频谐波 |
| 3 | 800 - 1600 | 结构共振调制频带 |
| 4 | 1600 - 3200 | 结构共振调制频带 |
| 5 | 3200 - 6400 | 共振高频带,常含冲击能量 |
| 6 | 6400 - 12800 | 高频冲击主要集中区 |
| 7 | 12800 - 25600 | 高频共振带,可能含轴承固有频率 |
这个案例里,冲击共振能量主要落在子带6和子带7,包络解调后BPFO及其谐波谱线非常突出。
4. 完整实操流程:从原始信号到诊断结论
4.1 数据准备和预处理
实际操作中,第一步永远不是直接丢进小波包,而是先把原始振动数据的基本状况摸清楚。
打开一段新的轴承振动数据,我会先做三件事:看原始时域波形的冲击形态,看频谱的整体能量分布,算一下时域峭度指标。冲击波形有明显的稀疏脉冲特征、峭度大于3.5、频谱在高频段有隆起,这三点基本能确认存在轴承早期故障的可能性。
之后做去直流和趋势项处理。用减去均值的方式去直流,用一次多项式拟合去除趋势项,这两步操作比较简单但要养成习惯。轴承振动信号里如果叠加了缓慢变化的温度漂移或者转速波动,不去掉的话后面小波分解的低频子带会出现异常的基线波动,影响重构精度。
接下来是抗混叠滤波。虽然在数字域内做非下采样小波包分解不像传统降采样那样有严格的抗混叠约束,但传感器信号在采集过程中如果引入了高频干扰,前置放大器的带宽又不够,依然会产生混叠。我一般会检查一下原始信号的功率谱,看看高频段是否存在超出传感器频响范围的非物理信号。
4.2 非下采样小波包分解的代码实操
做过工程的人都明白,纸上谈兵没用,得来看代码。我用Python实现整个流程,核心库是PyWavelets和NumPy,PyWavelets内置了非下采样小波包变换的函数,用起来很方便。
import numpy as np import pywt from scipy.signal import hilbert, find_peaks from scipy.fft import fft, fftfreq # 原始振动信号,一维数组,采样率51200Hz # signal = ... fs = 51200.0 N = len(signal) t = np.arange(N) / fs # 参数设置 wavelet = 'db8' # 小波基函数 max_level = 7 # 最大分解层数 # 非下采样小波包分解 nswpt = pywt.NSWPT(signal, wavelet, max_level, norm=True) # 查看第七层各子带节点的频率顺序 freq_order = nswpt.get_freq_order() print("节点顺序:", freq_order)这里有个关键细节:非下采样小波包返回的是NSWPTNode对象,访问各节点要按频带顺序检查,不能想当然地认为第0个节点就是最低频。get_freq_order()会返回一个标签数组,告诉你每个节点在频率轴上的实际位置。
子带能量筛选的做法:
# 获取第七层所有节点 level_nodes = nswpt.get_level(max_level) energy_dict = {} coeff_dict = {} for node in level_nodes: coeffs = nswpt[node] # 计算该子带信号的总能量 energy = np.sum(coeffs ** 2) # 计算峭度 kurt = (np.mean((coeffs - np.mean(coeffs))**4) / (np.std(coeffs)**4 + 1e-12)) - 3 energy_dict[node] = energy coeff_dict[node] = coeffs print(f"节点 {node.path}:能量 {energy:.4f},峭度 {kurt:.2f}")筛选最优子带,重点看峭度和包络谱的特征显著度。如果某个子带的峭度显著高于其他子带,说明这里集中了脉冲冲击能量,优先选择。
best_node = max(energy_dict, key=energy_dict.get) print(f"能量最大子带:{best_node.path},能量值:{energy_dict[best_node]:.4f}")注意,能量最大不一定是最优,要做包络谱验证。
接着对筛选出来的子带做精细滤波,然后重构:
selected_nodes = [...] # 手动选择或自动选择的最优子带 # 非选中子带系数置零,只保留选中子带 for node in level_nodes: if node not in selected_nodes: nswpt[node][:] = 0 # 直接覆写系数 # 重构精细滤波后的时域信号 filtered_signal = nswpt.inverse()阈值处理的代码也不复杂,但有一个事项要留意:
# 对选中子带系数做软阈值处理 def soft_threshold(coeffs, threshold): return np.sign(coeffs) * np.maximum(np.abs(coeffs) - threshold, 0) # 估计阈值,取系数标准差的2.5倍 for node in selected_nodes: coeffs = nswpt[node] sigma = np.std(coeffs) threshold = 2.5 * sigma nswpt[node][:] = soft_threshold(coeffs, threshold)小波基的选择我多说一句。db8,也就是Daubechies 8阶小波,是我在这个应用场景下试验下来的稳妥选择。它的波形和轴承冲击响应的形态比较接近,时域长度也适中,不会因为太长而拖出过多虚假振荡。如果你处理的是更强冲击的工况,可以试试sym8或者bior4.4,但db8作为默认参数完全够用。
4.3 包络谱分析与特征识别流程
重构完成之后,做包络谱分析。我直接用Python实现希尔伯特解调:
# 对重构后的信号做希尔伯特包络解调 analytic_signal = hilbert(filtered_signal) envelope = np.abs(analytic_signal) envelope = envelope - np.mean(envelope) # 计算包络谱 n_fft = len(envelope) freq_axis = fftfreq(n_fft, 1/fs)[:n_fft//2] env_spectrum = np.abs(fft(envelope))[:n_fft//2] # 观察BPFO频点处的幅值 bpfo = 69.8 idx_bpfo = int(bpfo / (fs/2) * (n_fft//2)) print(f"BPFO处幅值:{env_spectrum[idx_bpfo]:.4f}") # 找到包络谱的前10个峰值 peaks, properties = find_peaks(env_spectrum, height=np.mean(env_spectrum[:500])*10, distance=int(2.0 / (fs/2) * (n_fft//2)))峰值索引和实际频率之间要算准对应关系。包络谱的频率分辨率等于fs/n_fft,本例中n_fft=204800,频率分辨率0.25Hz,足以分辨间隔非常小的谐波与边带。
实际判断故障类型时,我根据峰值位置对照故障特征频率表:
- 如果BPFO基频处有峰值且伴随BPFO的2倍频、3倍频,判定外圈故障。
- 如果BPFI基频处有峰值且伴随显著的转频边带(BPFI ± fr),判定内圈故障。这个边带组是内圈故障的重要证据,因为内圈随轴旋转,载荷区周期性变化会产生幅度调制。
- 如果BSF基频处有峰值且伴随BSF的2倍频,判定滚动体故障。滚动体故障经常还伴随保持架频率边带,工况复杂时识别难度稍大。
我当时处理的现场信号里,7层分解后子带6重构信号包络谱中,69.8Hz处看到非常明显的谱线,139.6Hz(2倍BPFO)处也有清晰谱线,和理论值完全吻合,直接判定该轴承外圈存在局部剥落。拆下轴承后检查,外圈滚道确实有一处约2mm的剥落痕迹。
4.4 对比验证:精细滤波和传统方法的差距
有对比才有说服力。我拿同一组信号做了传统DWT加直接包络谱的对比。
传统DWT用的db8小波,7层分解,提取第5层细节信号做完包络分析。结果是BPFO处的幅值虽然有峰值,但旁边多出一排杂散谱线,噪声基底高出一截。最关键的是,2倍频处的谱线被“淹没”在背景里,无法确认谐波关系。而非下采样小波包精细滤波后的谱面上,BPFO和2倍频清晰可见,噪声基底是一马平川的直线,这个差距就是精细滤波带来的。
还有一次遇到过非常刁钻的情况:设备转速是变频调速的,实际转速在1460转到1520转之间波动。特征频率不是固定谱线,而是一片模糊的谱带。传统固定参数方法直接失效,只有用非下采样方法提取信号后,做时频分析看频率随时间的变化轨迹才行。这也证明了非下采样小波包在高分辨率时频细节上的稳定性。
5. 实际操作中常见的问题和排查方法
5.1 分解系数巨大导致的性能危机
非下采样小波包最大的硬伤就是计算量和内存占用。一段8秒采样率51200Hz的振动数据,采样点数409600个,做7层分解,每一层保留全部点数,所有子带加起来的系数总量大约是409600乘以子带数量级别,达到百万级不是夸张。内存不足的时候程序直接崩,我在早期吃过这个亏。
解决办法有两个方向:
第一,限制分解层数。不要盲目追求高分辨率,分解到峭度和包络谱已经足够辨识特征频率的层数就停。对大多数轴承诊断场景,5到7层足够。
第二,分段处理。把长信号切成分段,每段做独立分解和包络统计,再对结果做平均。这个方法还能顺带解决非平稳工况下的特征漂移问题,一段信号对应一个特征频率值,最后看统计分布。
5.2 故障特征频率被转速波动“抹平”
前面提到的变频调速场景里,转频实时变化,固定特征频率就是个错误坐标。处理这种情况时,我采用转速跟踪的方法:先把转频随时间的变化曲线从原始信号的转速计通道提出来,然后以转周期为单位做角域重采样。
角域采样就是把等时间间隔的信号重采样为等角度间隔信号,此时故障特征频率从“Hz”变成“阶次”,转速波动的影响就被消除了。阶次对应的特征值是BPFO阶次等于3.03阶、BPFI阶次等于4.55阶这些恒定值。非下采样小波包提取出共振子带信号之后再做角域重采样,得到的阶次包络谱非常干净,比任何固定频率下的分析谱都要可靠。
5.3 频谱中出现未知边带和干扰谱线
设备工况复杂时,齿轮啮合频率和边带会混进来。齿轮啮合频率通常等于轴频乘以齿数,一般是几千赫兹,刚好可能落在你关注的共振频带附近。包络谱里看到和齿轮频率相关的谱线时,很容易误判。
我的排查步骤是:
- 先计算所有已知结构的设计特征频率,包括齿轮啮合频率、叶片通过频率、皮带轮的转频等,全部列成表格。
- 然后对比包络谱峰值和这张表,对得上的初步排除。
- 最后利用启停机过程观察谱线变化:轴承故障特征频率在转速变化时随转速同步变化,齿轮啮合频率同样随转速变化,单纯看转速变化不能完全区分。
- 真正区分轴承故障频率与齿轮类频率的关键,是看诊断频率与转速的比例是否等于特征频率系数(如BPFO是0.106倍转频等级)。如果比例关系和理论特征系数一致,无论绝对频率怎么变,都可以判定为轴承故障。
5.4 阈值处理过度导致特征丢失
我在实现阶段最容易犯的错误就是阈值设太大。一次处理某齿轮箱轴承信号时,为了追求“平滑的包络谱”,把阈值调到系数标准差的4倍,结果所有较小的冲击系数全被压成0,包络谱里基频特征虽然还在,但谐波特征几乎消失了。轴承故障分析中谐波信息是用来判断故障严重程度的重要依据,切没了等于丢失了诊断深度。
之后我改用迭代试探的策略:初始阈值设为1.5倍标准差,运行一遍看包络谱的谱峰数量和基底水平;如果基底噪声仍然明显,逐步增加0.2倍标准差,直到获得足够干净的谱面。这个过程只用几分钟,但比拍脑袋设阈值可靠得多。记住一个原则:阈值的大小宁可偏小不要偏大,丢了特征比多留噪声麻烦得多,多留噪声可以靠后续子带筛选来补偿。
5.5 实测转速与设定转速不一致
这个坑很隐蔽。设备铭牌转速和实际运行转速往往有偏差,直接按铭牌转速去算特征频率,诊断结论可能就差半个谐波位置找不到。我干活时一定从数据里实测当前转速:可以从振动信号的时域波形测量转频,也可以用转速计通道获取脉冲信号计算转速。有了实测转频,再代入特征频率公式,这样得到的理论值才能作为评判坐标。
比如某风机铭牌转速1490r/min,实测下来是1478r/min,转频差0.2Hz,BPFO就差了0.7Hz左右。在频率分辨率0.25Hz的包络谱里,这0.7Hz足够让谱峰和理论坐标线错开三根谱线,肉眼直观看就“对不上”,新手很容易误判为没有故障。
6. 几个提高诊断效率的实用技巧和总结心得
6.1 建立自己的特征频率速查表
做轴承诊断多了我养成了一个习惯:对常见型号轴承提前用公式算好特征频率倍数。这个倍数和轴承几何参数一一对应,换转速只要乘一下就行。比如6305轴承的BPFO倍数0.106,BPFI倍数0.159。任何转速下,只要知道了转频,十秒钟就能算出理论故障特征频率。
我自己的速查表长这样:
| 轴承型号 | BPFO系数 | BPFI系数 | BSF系数 | 保持架FTF系数 |
|---|---|---|---|---|
| 6204 | 3.05 | 4.95 | 1.99 | 0.38 |
| 6305 | 3.44 | 4.56 | 2.42 | 0.40 |
| 6308 | 4.05 | 5.95 | 2.64 | 0.40 |
| 6312 | 5.10 | 6.90 | 2.83 | 0.43 |
用的时候只需要把系数值乘以转频,得到的就是实测状态下对应零部件的故障特征频率。注意,具体数值要以轴承手册或计算工具为准,不同厂家的滚珠直径和接触角有差异,我的数据是基于常见标准型号的典型值,给你做参考没问题,但批量替代检查时必须核算实际参数。
6.2 包络谱看多了,要注意和振动标准结合
只靠包络谱的谱线特征可以判断故障类型,但要判断故障严重程度、要不要停机更换,一定要结合振动总量标准和趋势数据。轴承早期故障的特征频率幅值可能只有正常工况下幅值的几倍,但绝对幅值还很小,设备运行没有明显异常。最好每周采集一次数据,跟踪故障特征频率幅值变化趋势,若一周内幅值翻了一倍以上,基本可以确定故障在快速扩展。
我在一个风机项目上就是这样判断的:第一次采集BPFO幅值是0.02mm/s²,两周后变成0.09mm/s²,一个月后到了0.21mm/s²且出现2倍频谐波。这时候我建议客户安排检修,拆开一看外圈滚道已经出现一条连续剥落带。如果只看单次采集的绝对幅值,以0.02的起始值确实容易被人忽视。
6.3 小波基和层数的“经验配方”
最后总结一下我这几年试下来最稳的参数组合:
- 默认用db8小波基,遇到冲击非常尖锐的工况换用sym8或bior4.4
- 分解层数设置在6到7层之间,低于5层频带太粗,高于8层计算量不划算
- 子带筛选优先用峭度加包络谱特征显著性。纯粹按能量选择会误选噪声主导的子带,尤其当采样频率很高、噪声能量广泛散布时,能量法会出大问题
- 精细滤波阈值取1.5到2.5倍标准差,以保留谐波为主要目标
- 重构后的信号必须再做一次包络解调,不要直接拿重构信号做FFT,因为冲击调制特性在频谱上很难直接看出来
在我做过的风电齿轮箱、矿山振动筛、风机水泵轴承诊断项目里,这套流程基本可以覆盖绝大多数场景。每个项目唯一需要重新调整的是分解层数和阈值系数,其他参数共用完全没问题。
6.4 诊断报告里的三条铁律
处理完信号后免不了要出诊断报告,我有三条铁律:
- 每条结论标明特征频率的理论值和实测值,两者偏差超过2%时先怀疑转速计算错误。
- 每条结论必须附带原始频谱或包络谱截图,没有图谱只有文字的结论不具备说服力。
- 给出置信度判断。只有基频且幅值微弱的情况定为“疑似早期故障”,基频加二倍频三倍频齐备的才能定“确认故障”。诊断不是测出来结果就完事,要对产线停机负责。
我个人在实际操作中的体会是,非下采样小波包精细滤波技术最大的价值不在于算法本身有多深奥,而在于它把“信号分解”和“特征增强”结合成一条流水线。你不必个个原理都深究,但一定要把每一步的筛选依据明确下来,在哪个频带里找特征、为什么选这个频带、阈值依据是什么,这些想清楚,轴承故障诊断对你来说就变成了一道固定的运算题。多存几组现场数据,反复对比不同参数下的输出效果,手感就有了。最后再提醒一句:现场采集数据时,传感器的安装位置一定要固定,磁座吸上去和用胶粘上去的频响特性差很多,安装方式变了特征频率就变了,再好的算法也救不了错误的数据源头。