In this laboratory exercise, three different techniques were used to eliminate a 400Hz signal from a captured speech signal. To begin with, the magnitude of the noise signal was subtracted from the magnitude of the corrupt voice data in the Fourier domain (based on the Discrete Fourier transform), to yield a resultant magnitude plot A. The phase of the corrupted signal was then added to A to yield a signal whose inverse Fourier transform comprised a cleaner/filtered speech signal. The second technique, the adaptive notch filter, cleaned up the corrupt voice data by first blurring the noise signal by convolving it with a 1-2-1 Gaussian filter. Points on the magnitude plots of the blurred noise data (in the Fourier domain) that exceeded a specified threshold were then used to determine the values of the corrupt signal that had to be multiplied by some factor to reduce noise. The third technique cleaned up the corrupt voice data by removing the specified frequency (400Hz) and its harmonies.
This exercise was aimed at providing an introduction to the Fourier transform. The Fourier transform, a pervasive and versatile tool, is used in many fields of science as a mathematical or physical tool to alter a problem into one that can be more easily solved. Its utility in the analysis of linear systems, antenna studies, optics, random process modeling, probability theory, quantum physics, and boundary-value problems mainly stems from the fact that multiplication in the time domain is equal to convolution in the frequency domain.
In this exercise, the Fourier transform was used to remove repeating signals from a composite input signal. As aforementioned, a 400 Hz sinusoidal signal was eliminated from a captured speech signal. The Discrete Fourier Transform was used to process the voice data since the latter was a string of samples as opposed to a continuous signal.
Methods used in this experiment were based on the instructions given in the set up and task sections of the E12 Lab #2 hand out with one main additional procedure. This addition was necessary because after executing task number 10, that is, suppressing the 400Hz frequency and its harmonics in the noise signal, there was an unwanted DC spike at 0 in the FFT plots. This DC component of the signal was eliminated by the subtraction of the average value from the signal (in the time domain). We did not do any of the extensions.
% Fighting Corrupt Speech: method1 % cleaned-data = method1( corrupt-data, noise-data ) % % Attempts to clean up the corrupt voice data by subtracting % the noise signal frequency magnitude in the Fourier domain % and then recreates the phase information to regenerate the % hopefully cleaner signal. % % This function takes the corrupt and noise signals, as read % by the wavread function. The function assumes 11.025 kHz % recording.
% Fighting Corrupt Speech: method2 % cleaned-data = method2( corrupt-data, noise-data ) % % Attempts to clean up the corrupt voice data by blurring the % noise signal by convolving it with a 1-2-1 Gaussian filter. % Then, if the magnitude of the frequency in the blurred noise data % (in the Fourier domain) is greater than some threshold (i.e. 10), % the corresponding value in the corrupt signal is multiplied by some % small number to reduce the noise. % % This function takes the corrupt and noise signals, as read % by the wavread function. The function assumes 11.025 kHz % recording.
% Fighting Corrupt Speech: method3 % cleaned-data = method3( corrupt-data, frequency ) % % Attempts to clean up the corrupt voice data by simply % removing the specified frequencies and its harmonics. % % This function takes the corrupt signal, as read % by the wavread function, and the frequency (in Hz) to % filter out. The function assumes 11.025 kHz % recording.
Generally, our overall final signal was an improvement on the corrupt signal As seen in the graphs.
Both the second and third methods seemed to have worked well in recreating the original voice recording. Unfortunately, the resulting cleaned-up signal from method 1, which theoretically was the most accurate method, was not very effective. This was because the dominant noise frequency in the voice signal did not match the frequency of the noise signal itself. We suspected that this was simply due to slight variations in the function generator. When subtracting the magnitude of the noise in the Fourier Domain, the large spike in the corrupt sound was not removed since the frequencies did not line up correctly.
Perhaps impurities in the output signal of the function generator resulted in other frequencies than just a pure 400 Hz sine wave. As a result, the harmonics of those frequencies would be present as well, although not as strongly. The other frequencies apart from 400Hz and its harmonics in the noise signal were from background noise from the function generator, microphone, and the surroundings.
This method worked about equally well as the one based on the blurred noise data. However, depending on how large a frequency threshold was used to decided which frequencies to reduce in the corrupt signal, the output could be tailored. Too large a threshold would remove too much of the good signal, while a too narrow one would leave a lot of noise behind.
By blurring the noise signal, the frequency of the main noise spike is spread out slightly, resulting in a greater chance that the appropriate noise is removed from the input signal. Blurring smoothens out the signal by eliminating the sharp edges of the signal (it works like a low pass filter).
Applying an arbitrary phase would cause the magnitude of the voice signal to be shifted left or right, such that the frequencies would not line up with the time in the original signal. This is because the phase information contains the time information in the Fourier domain. This is why we tried to keep the phase the same as in the original signal.
We would go with the method one (assuming an ideal system). A microphone would be inserted in the cockpit which would at all times collect and record both the background noise and the actual voice of the pilot. The recorded corrupted signal would then be fed into a digital system which would be capable of doing a Fourier Transform on the corrupt and noise signals. The output of this would then be sent into another device that would subtract the two signals and then convert the result into the time-domain before transmitting it.
Another suggestion would be to use a combination of methods two and three. That is, building filters that would be able to blur (Gaussian filter) and also block out specific frequencies (like the known frequencies from the engines, etc) from the corrupted signal in the Fourier domain and then also install a device capable of converting the resulting signal back into the time domain.