For now, I am taking transects of this array and applying a 1D - butterworth band pass filter :
import numpy as np from scipy.signal import find_peaks, butter, sosfiltfilt, sosfreqz def Transect_angle(A, angle, Sp, length): x0, y0 = Sp, Sp x1, y1 = x0 + cosd(angle)*length, y0 + sind(angle)*length return Array_transect(A, [y0,x0], [y1,x1], 'nearest'), [x0,y0], [x1,y1] def butter_bandpass(lowcut, highcut, fs, order=5): nyq = 0.5 * fs low = lowcut / nyq high = highcut / nyq sos = butter(order, [low, high], analog=False, btype='band', output='sos') return sos def butter_bandpass_filter(data, lowcut, highcut, fs, order=5): sos = butter_bandpass(lowcut, highcut, fs, order=order) y = sosfiltfilt(sos, data) return y transect, p0, p1 = Transect_angle(Array, angle, start ,length) tr_withoutnan = transect[~np.isnan(transect)] ### removing nan filtered = butter_bandpass_filter(tr_withoutnan, low_freq, High_freq, 1)
I would like to apply the same kind of filtering but directly in 2D to my array. I have two main problems :
For me, filtering is basically a convolution between data and a filter. Based on this, I can directly make the convolution of my array with a butterworth filter having an axial symmetry. However, in my function
butter_bandpass_filter, I am using
sosfiltfilt, which mention that the filter is appplied forward and backward. I don't know what that means it terms of convolution, but I remember that someaone mentioned it was important in a topic I read a long time ago.
Ho should I deal with the Nans values (in white in my image) ?
Finally, I use a butterworth bandpass filter because I read that it was the filter that was the least likely to produce artefacts. I am open to any suggestion !