I've got a 3D time-frequency sound intensity vector that I've derived from Ambisonic b-format signals. W
acts as the sound pressure P
, and x,y,z
acts as the particle velocity U
vector for the respective Cartesian axes. The intensity vectors are then derived using I = P*U
. I then derive the direction of arrival estimation vector by taking the opposite of the intensity vector so D = - I
.
I'm looking to normalise these to between [-1,1]
for the purposes of using them as target outputs for a machine learning algorithm. The normalisation (should) make it easier for the algorithm to converge and the output is still in Cartesian space.
However, due to the time varying nature of data I can't figure out the best way to normalise them.
I have already tried normalising using the max and min of the collective I
matrix/vectors. But then converting from Cartesian to Spherical as a sanity check, I'm presented with different results when compared to transforming the raw intensity values. Specifically, it causes many of the results to be squeezed down to the same value when working to 5 decimal places.
My intuition is because the pressure for each time-frequency step can be drastically different so it's not appropriate to globally normalise them as P
can be different for each time-frequency tile and thus U
can also contain drastically different ranges of values as well.
Any suggestions? My only other thought is to maybe normalise each vector individually according to the timestep and frequency. Which in code would look something like this:
for timestep in range(timesteps):
for freq_bin in range(num_bins):
D_norm = normalise(I[batch, timestep, freq_bin, D])
This also seemed to produce different results when trying to transform into Spherical coordinates.