毕设课题突发奇想,想做个声振融合的轴承故障诊断,但是经费有限条件有限,采到的数据如下图所示,干扰很大根本无法拿来做诊断分析,调研后发现是传声器泰拉胯,高分贝的正弦波还比较稳定,低分贝或者静置的时候有电压波动很大的,传声器商家表示测低声压级的最好用1英寸的传声器,灵敏度高一些,而价格……我承担不起啊,几乎快要放弃的时候,遇到高人指点
高人看了我的频谱图后表示10HZ以下的信号有明显的冲击和干扰,如下图所示于是我想到,那么我把10HZ以下频率信号过滤掉不就能用了吗,滤波后的信号果然有模有样
但是也不能高兴的太早,让我们看看频率特征是否真的有效
通过把同一时间采集的声音信号和振动信号放在一起对比可以发现包络谱重合度很高而频谱上对应的点也与我设置的转频25HZ基本对得上,甚至声音特征比振动还要更明显一些呢,这可真是柳暗花明又一村呢,采的数据再烂,也有办法把它搞好
给大家分享一下一个简单的滤波函数程序吧
function [filteredSignal, f, F_fft] = F_CutFFTResult(signal, fs, startFreq, stopFreq)
% 对信号进行FFT
N = length(signal); % 信号长度
F_fft = fft(signal); % 计算信号的FFT
% 生成频率向量
f = (0:N-1)*(fs/N); % 频率范围从0到采样频率
f = f(1:floor(N/2)+1); % 只取一半范围(正频率)
% 创建一个频率掩码,只允许通过startFreq到stopFreq之间的频率
mask = (f >= startFreq) & (f <= stopFreq);
mask = [mask, fliplr(mask(2:end-1))]; % 将掩码应用于负频率
% 应用带通滤波
F_fft = F_fft .* mask;
F_fft = F_fft(1:floor(N/2)+1); % 只保留正频率部分
% 对滤波后的信号进行逆FFT
filteredSignal = ifft([F_fft, conj(fliplr(F_fft(2:end-1)))], 'symmetric');
end