top of page

Windowing

We used various windows throughout this project during the research process, however the main use of windowing in the final build is the gaussian window for filtering out the high frequency noise. As discussed in lecture, convolution with a window function in the time domain yields multiplication in the frequency domain, and we convolved a gaussian window with our noisy signal to reduce the high frequency noise. Below we can see a magnitude FFT semi log plot of a gaussian window of width n = 100000, which should provide some intuition on why this works:

gausswinfft.png

Homomorphic Filtering

For our out of class DSP tool, we chose to use homomorphic filtering to reduce hisses, clicks, pops, etc. This filter takes advantage of the properties of the Fourier transform and logarithm in order to turn nonlinear combinations (convolution, multiplication, etc.) into a linear problem. Once we put the convolved signal through the Fourier transform, it becomes a multiplication in the frequency domain:

F [a(t) * b(t)] = A(ω) · B(ω).

Once the two signals are in a multiplicative form, we can take the logarithm to convert it into summation form:

log(A·B) = log(A) + log(B)

which is linear. Once we reach this form we can apply linear filtering (in this method we use a high pass filter to suppress the low frequencies that represents noise, while amplifying the high frequencies that represent the desired audio) to attenuate the log of the noise which will leave us with the log of the desired audio signal. With this remaining signal we simply invert all of the initial transforms, so we apply inverse logarithm, then the inverse Fourier transform. These operations separate the audio from the noise and attenuate the noise to result in a cleaner audio signal. With Homomorphic filtering, our algorithm can now handle both linear and nonlinear combinations of audio and noise. 

One issue that we did notice was that the homomorphic filter would compress clicks and pops into a lower amplitude constant signal that sounded like a hum, and since this kind of noise is uniform we applied another Gaussian filter to filter out the hums that all the clicks and pops were converted to.

(Based our research on "Nonlinear filtering of multiplied and convolved signals" by A. Oppenheim, R. Schafer, T. Stockham)

Impulse Response

For our sharpening filter, we used an impulse response to characterize the modifications we made to the audio in Adobe Audition, and then use. We then took that impulse response and convolved it with the signal in MATLAB. Logically, characterizing an LTI (linear time-invariant) system with an impulse response makes sense as the delta function δ[n] in the time domain yields a unit step response u[k] in the frequency domain, which allows us to measure the effect a filter has on each discretized portion of the frequency domain. This is incredibly useful, as if we did not have the impulse response, we would have to replicate each little filtering step used in Adobe Audition in MATLAB, which would be time consuming to both build and modify when we needed to change the filtering steps. Instead, we can simply apply the following equation and replicate a filter without having to mathematically express the entirety of the filter by itself:

x[n]*h[n] = y[n]     <=>     X[k]H[k] = Y[k]

Linear Filtering

Throughout the entirety of our project, we have used multiple linear filters to clean up different portions of the song. High pass, low pass, band pass, and even filtering via impulse response. We use the impulse response generated as specified above to filter a specific style of signal. We used high pass, low pass, and band pass filters to target specific frequencies of the song. For example, our equalizer utilizes FIR band pass and high pass filters to target specific frequency bands to amplify or attenuate. These filters were designed using the designfilt function in MATLAB. We ran our signals through the filter function in MATLAB to apply these filters to our signals. The filter function multiplies the signal and the filter in the discrete domain and outputs the result. We are able to apply many of these filters multiple times due to their linearity.

bottom of page