clc; clear; close all; % Load your data (Replace this with actual loading) N = 10000; % Total number of signals M = 400; % Number of samples per signal time = linspace(0, 100, M); % Adjust time axis if needed signals = randn(N, M) * 0.01; % Example noise (Replace with real data) % Filtering parameters threshold = 0.02; % Define threshold to detect rectangular pulses window_size = 5; % Median filter window size % Initialize cleaned signals storage cleaned_signals = zeros(N, M); parfor i = 1:N % Use parallel processing for speedup signal = signals(i, :); % Step 1: Median Filtering to Remove Spikes signal_filtered = medfilt1(signal, window_size); % Step 2: Identify Pulse (Assuming Rectangular Shape) pulse_idx = signal_filtered > threshold; % Find regions above threshold % Step 3: Keep Only Rectangular Part if any(pulse_idx) cleaned_signal = zeros(1, M); cleaned_signal(pulse_idx) = signal_filtered(pulse_idx); cleaned_signals(i, :) = cleaned_signal; end end % Plot example results (first 10 signals for visualization) figure; hold on; for i = 1:10 plot(time, cleaned_signals(i, :)); end hold off; title('Rectangular Pulses Only (Noise & Spikes Removed)'); xlabel('Time (ns)'); ylabel('Amplitude (V)'); legend('Processed Signals');