I basically want to use a digital wavelet transform to get the high frequencies of an audio signal and get the time information or really anything that can make me understand where they happen so I can compare with the data I get by reading the audio so I can perform some operations on the samples that have a high frequency.
I'm new to signal processing but I have studied a scientific paper that used DWT for that and I want to try to replicate that idea.
Yes I have studied DWT and what got me into it was the fact that you can get time information from it, as far as I understand. And I know about the coefficients but I don't know what to do with them exactly.
For all that, I'm using scipy to read a wav file and getting "data" that I suppose is the amplitude of every sample, the scipy.io.wavfile.read documentation doesn't make that clear). For the DWT itself, I'm using PyWavelets.
This is what I have right now (adapted):
from scipy.io import wavfile
import numpy as np
import pywt
sample_rate, data = wavfile.read('test.wav')
coefficientsApproximation, coefficientsDetail = pywt.dwt(data, 'db1')
coefficientsApproximation = np.array(coefficientsApproximation)
coefficientsDetail = np.array(coefficientsDetail)
The length of data is the number of samples. If I divide it by the sample rate I get the length of the audio in seconds, as expected.
The data itself is presented like this:
array([[ 19, 20],
[ 19, 19],
[ 20, 19],
...,
[-84, -84],
[-75, -75],
[-74, -74]], dtype=int16)
Which is a 2D numpy array (2D because the audio is stereo, but don't focus on that cause I'm also working with mono).
coefficientsDetail is presented like this:
array([[-0.70710678],
[ 0. ],
[ 0.70710678],
...,
[ 0. ],
[ 0. ],
[ 0. ]])
Which is again a 2D numpy array.
coefficientsApproximation is presented similarly:
array([[ 27.57716447],
[ 26.87005769],
[ 27.57716447],
...,
[-118.79393924],
[-106.06601718],
[-104.65180362]])
I want to use the information of WHERE are the high frequencies happening so that I can actually change the data variable based on that (e.g. change all the values related to a high frequency to 20). I tried to find a way to use the values of coefficientsDetail in order to do that but I wasn't able to do it.