Interpreting a wavelet transform produced using scipy.signal.cwt

101 views Asked by At

Within a single "received signal", I am trying to separate different signals of approximately the same frequency but arriving at different times. It was my opinion that the best way to do this was using a wavelet transform.

I used scipy.signal.cwt for this. I used a bespoke wavelet for the transform.

(For context) The experimental set-up used to obtain this 1D received signal (shown at the top of the attached plots, the y-axis is only relevant to the wavelet transform) involved a travelling wave being excited in an elongated structure (seen at approx. 0ms), it then travelled the length of an elongated structure, reflected off the end and then travelled back along the elongated structure where it was received (seen at approx. 6.5ms). The excited signal is a torsional mode but other modes are possible in the received signal. This signal is comprised of a lot of small amplitude reflections of the same frequency superimposed on top of one another. It was the goal to be able to separate these different reflections that correspond to different features in the elongated structure.

(For context) The wavelet used for this transform was bespoke and was the same shape as the initial excited travelling wave, the logic being that all reflections would be somewhat of the same form.

I used a wavelet transform to try and separate these signals temporally. I have attached screenshots of the produced plots below. Image1 and Image3 show the whole trace (in different color schemes), Image2 and Image4 show the "low-amplitude" region of this signal (in different color schemes), this is the region of interest (approx. 1.2ms to 6.2ms).

I was wondering if anyone with experience of wavelet transforms can possibly advise what the various features seen in Image2 and Image4 might say about the make-up of this region of the signal? Do I have enough information here to separate this received signal into different approx. 10kHz components? How might I be able to perform this separation? Is a wavelet transform the best method for separating signals of the same frequency in this way (I tried STFT and it didn't work anywhere near as well).

Core of python code included below:

t = signal[71000:276000,0]
y = signal[71000:276000,3]
sample_frequencies = np.arange(0.25, 50.25, 0.25)
array_of_tens = np.full(200, 10.0)
widths = array_of_tens/sample_frequencies
cwtdata = signal.cwt(y, function1, widths)
cwtdata_yflip = np.flipud(cwtdata)

plt.imshow(cwtdata_yflip, extent=[t[0], t[(len(t)-1)], 0, 50], cmap='RdYlGn', aspect='auto', vmax=abs(cwtdata_yflip).max(), vmin=-abs(cwtdata_yflip).max())
plt.plot(t, (20*y)+35, color='#016937', lw=0.5)
...
plt.show()

signal is an array of raw data obtained experimentally

function1 is a function to return a normalised wavelet of particular width corresponding to the array sample_frequencies

image1, full signal, original color scheme

image2, low amplitude region, original color scheme

image3, full signal, bespoke color scheme

image4, low amplitude region, bespoke color scheme

0

There are 0 answers