# how do i get a code for discrete random separation(DRS)？

15 views (last 30 days)
LUO LUO on 23 Apr 2024
Answered: Abhimenyu on 18 Jun 2024
hi,how do i get a code for discrete random separation(DRS),it was applied to separate periodic gear mesh signals and random bearing signals?thanks.

Abhimenyu on 18 Jun 2024
Hi,
Discrete Random Separation ('DRS') is a technique used to separate periodic signals (such as those from gear meshes) from random signals (such as those from bearing faults) in vibration data.
Please follow this example MATLAB code below to understand the basic steps for implementing 'DRS':
% Generate synthetic signal (for demonstration purposes)
Fs = 1000; % Sampling frequency
t = 0:1/Fs:1-1/Fs; % Time vector
f1 = 50; % Frequency of periodic signal (gear mesh)
f2 = 120; % Frequency of another periodic component
periodic_signal = cos(2*pi*f1*t) + 0.5*cos(2*pi*f2*t);
random_signal = 0.5*randn(size(t)); % Random noise (bearing signal)
Assume a signal 'x' that contains both periodic gear mesh signals and random bearing signals.
x = periodic_signal + random_signal;
% Plot the original signal
figure;
subplot(3,1,1);
plot(t, x);
title('Original Signal');
xlabel('Time (s)');
ylabel('Amplitude');
Data Preprocessing: Remove mean and trend from the signal. The detrend MATLAB function removes the mean or a linear trend from the signal. Follow this MATLAB R2024a documentation link to know more: https://www.mathworks.com/help/matlab/ref/detrend.html
% Step 1: Data Preprocessing (remove mean and trend)
x_detrended = detrend(x);
Statistical Analysis: Compute the power spectral density (PSD) using MATLAB's periodogram function or other statistical measures to identify periodic and random components. The threshold for identifying peaks in the PSD should be chosen carefully based on the signal characteristics. Follow this MATLAB R2024a documentation link on periodogram function to know more: https://www.mathworks.com/help/signal/ref/periodogram.html
% Step 2: Statistical Analysis (Power Spectral Density)
[Pxx, F] = periodogram(x_detrended, [], [], Fs);
% Step 3: Identify Periodic Components
threshold = mean(Pxx) + 2*std(Pxx); % Threshold for identifying peaks
peaks = Pxx > threshold;
periodic_frequencies = F(peaks);
Filtering: Apply appropriate filters to separate the periodic and random components. The bandpass filters should have appropriate bandwidth to accurately capture the periodic components without introducing artifacts. The designfilt function of MATLAB designs a digital filter with specified frequency characteristics and the filtfilt function applies a digital filter to the signal in both forward and reverse directions. Please follow this MATLAB R2024a documentation links to know more about both the functions respectively:
% Step 4: Filtering
% Create a bandpass filter for each periodic frequency
periodic_component = zeros(size(x));
for f = periodic_frequencies'
if f == 0
continue;
end
d = designfilt('bandpassiir','FilterOrder',4, ...
'HalfPowerFrequency1',f-1,'HalfPowerFrequency2',f+1, ...
'SampleRate',Fs);
periodic_component = periodic_component + filtfilt(d, x_detrended);
end
Reconstruction: Reconstruct the separated signals.
% The random component is the residual
random_component = x_detrended - periodic_component;
% Plot the separated signals
subplot(3,1,2);
plot(t, periodic_component);
title('Separated Periodic Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(3,1,3);
plot(t, random_component);
title('Separated Random Signal');
xlabel('Time (s)');
ylabel('Amplitude');
The above MATLAB code provides a basic framework for implementing 'DRS'. For real data, additional steps such as more advanced preprocessing (e.g., denoising) can be included.
I hope this helps!