matlab冲击振动信号仿真建立案例
偶然看到一篇优秀EI论文(见最后引用)中提出模拟轴承内圈存在局部缺陷时产生的冲击信号,并添加强烈的白噪声模拟内圈早期故障信号。
仿真信号参数如下图:
根据论文的参数,本人复现了这个冲击仿真信号,matlab代码如下:
%% 说明
%%%%%%%%%%%%%%%%%%%%%%冲击仿真信号%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 冲击信号参数设置
clear;
fs = 16e3; % 采样频率
fr = 30; %转频
% fn = 4e3; % 固有频率
fn = 4e3; %共振频率
C = 700; %衰减系数
A0 = 0.3; % 位移常数
% g = 0.1; % 阻尼系数
T = 1/120; % 重复周期
N = 4096; % 采样点数
SNR = -13; %信噪比
NT = round(fs*T); % 单周期采样点数
tt0 = 0:1/fs:(NT-1)/fs; % 单周期采样时刻
% tt = 0:1/fs:(N-1)/fs; % 采样时刻3
tt = 0:1/fs:(N-1)/fs; % 采样时刻
p1 = ceil(N/NT)-1; % 重复次数
s = [];
% ii = 1:p1;
% [t,i] = meshgrid(tt0,ii);
for i = 1:p1 %产生p1个相同波形
tt1 = ((i-1)*NT)/fs:1/fs:(i*NT-1)/fs; %p1个周期
s = [s ((1+A0*cos(2*pi*fr*tt1)).*exp(-C.*(tt0)).*sin(2*pi*fn*(tt0)))];
%(1+A0*cos(2*pi*fr*tt1) 不同周期的幅值计算方法
% s = A*exp(-50.*(t-i.*T)).*sin(2*pi*200*(t-i.*T));
end
d = ((N/NT-p1)*NT); %p1周期后剩下的采样点数
ttt0 = 0:1/fs:((N/NT-p1)*NT)/fs; %p1周期后剩下的采样时刻
ttt1 = p1*NT/fs:1/fs:(p1*NT+(N/NT-p1)*NT-1)/fs;
s = [s ((1+A0*cos(2*pi*fr*ttt1)).*exp(-C.*(ttt0)).*sin(2*pi*fn*(ttt0)))];
s(1:NT) = 0;
%% 信号的时域,频域图
figure(1)
subplot(211)
plot(tt,s) %原信号图像
axis([0,0.253,-1.5,1.5])
title('轴承故障仿真信号时域波形图')
subplot(212)
NOISE = randn(size(s));
NOISE = NOISE-mean(NOISE);
signal_power = 1/length(s)*sum(s.*s);
noise_variance = signal_power/(10^(SNR/10));
NOISE = sqrt(noise_variance)/std(NOISE)*NOISE;
s1 = s+NOISE;
% s1 = awgn(s,-13); %加噪信号图
plot(tt,s1)
axis([0,0.253,-4,4])
title('轴承故障仿真信号加噪声时域波形图')
figure(2)
% NFFT = 2^nextpow2(N);
NFFT = N; %参加快速傅里叶变换的样本点数
fz = (1:NFFT/2)*fs/N; %信号的真实频率系列,带宽是fs/2=8000Hz
Yf = fft(s1,NFFT);
% f = fs/2*linspace(0,1,NFFT/2); %信号的真实频率系列,带宽是fs/2=8000Hz
plot(fz,abs(Yf(1:NFFT/2))*2/N) %频谱图
执行后的仿真信号时域和频域图如下
FFT得到的频谱图如下:
本人能力有限,如有错误还请谅解!!
[1]: 唐贵基,王晓龙.IVMD融合奇异值差分谱的滚动轴承早期故障诊断[J].振动、测试与诊断,2016,36(4):700-707. DOI:10.16450/j.cnki.issn.1004-6801.2016.04.014.