Dehum Dehiss: Removing noise from GBA audio
The Game Boy Advance is known to have much more audio noise than any of the other consoles. Many people believed it was the amp on the GBA itself that was noisy. After lifting the original amp, reverse engineering it and hooking it up on a separate PCB and driving it with a clean function generator signal, I discovered it can amplify the audio perfectly clean with no noise. The issue is the console itself making the noise.
As you add amplifiers like the CleanAmp, the noise is much worse, enough that it can really annoy people and be a distraction to the playing experience.
I decided to spend some time to fix this issue as nobody else has ever fixed it. The only other solutions were the wrong solutions, trying to filter out the noise be effectively removing most of the original sound using simple low pass filters. This is not the solution I wanted. I want the fix the cause, not mask it.
After many hours of investigating, and working on the consoles for over a year I knew the system and how it operates. Taking the time scope out all the chips and parts, and many false leads, I narrowed down the cause of the noise. It isn't simple and there are 6 causes. Here are the fixes to them all.
The Volume Wheel
The volume wheel is referenced to ground, and also fed into the amplifier on the GBA for adjusting the output stage. Any dirty in the wheel which builds up can add feedback to the ground plane causing noise. The amount of noise this adds is not usually a lot, but its still worth fixing.
Tip IPA (Isopropyl Alcohol) on the wheel, then push down with your fingernail on the outer edge of the wheel that's on the inside of the console, and use your other finger to turn the volume wheel up and down about 20 times. Basically you are pressing the metal contacts inside the wheel firmly against the metal PCB contacts, and rubbing them. This with the IPA scrubs the metal contacts clean.
The Power Switch
The power switch on the GBA is known to generate a black grime over time. It looks like copper oxidation if I were to guess.
Using a soldering iron, add some solder to one side of the metal housing that is holding the plastic power switch in place. Get tweezers inside the metal housing between the metal and the power switch when doing this, and as you warm up one side of the metal solder pad with the soldering iron, gently lift the metal up. Be careful not to flick the metal up as its springy, and can flick molten metal towards you (perhaps wear eye protection).
Now remove the plastic power switch and notice the dirt inside the actual switch.
It should be perfectly clean copper/gold but its usually blackened. Drop some IPA in the switch, and using the tweezers gently rub sideways until the dirt comes loose. Use a cotton bud dipped in more IPA to rub the loose dirt away. Repeat once or twice.
Place the power switch back into place and re-solder the metal cover back down.
Using a flat or philips screwdriver, apply some force to the power switch metal cover and create a score down the middle which applies more pressure to the switch and the contacts, giving better conductivity. Some newer GBAs already have this groove. For those it is no necessary.
The loud hiss
This is by far the loudest noise on the system, and one that nobody has since managed to find the source of. After investigating, I found that the VDD2 power rail is very noisy. This is because it is shared with the SRAM and the CPU as well as other high speed lines.
The main cause of the noise is insufficient bypass capacitors near the CPU and SRAM, to supply the needed quick bursts of power. When a chip is switching fast, it needs fast current locally, that's the purpose of bypass capacitors. A lack of capacitance near the switching pins means the power rail dips and rises in and out of phase to the source switching, causing the noise. When systems don't have audio output its not always audible or noticeable, but on the GBA with it's audio output, its very noticeable.
This noise introduced by the CPU and SRAM cause the hiss (high pitched noise).
The best spot and the best value capacitor to remove this hiss completely is C15 to the bottom right of the CPU. Leave C15 in place, and solder an additional 1uF 50V capacitor to it. If you cannot fit the capacitor on the same pads as the C15 capacitor, solder one side of the new capacitor to one side of the C15 capacitor and use a small jumper wire to connect the other side. If you position it just right however and are handy at soldering, you won't need any wire.
With this capacitor in place, a huge portion of the audio noise is removed.
Some GBAs (typically those where the CPU has "CPU AGB" without the extra "A" after it, have more noise, and need a 10uF capacitor as well as a 1uF capacitor attaching to C15. So you can have 2 more attached like this.
If you buy the kit from us and you get 2 SMD capacitors and they are not labelled, the one with the color on the paper tape they come in is the 10uF (not that it matters as both go on the same pad).
I would install both the 1uF and 10uF regardless of your CPU version, as it doesn't harm, just adds more capacitance to keep the noise down.
The low hum
Once the hiss is removed, we can now here the low hum component of the noise. After more investigation I could also remove this. This noise was tricky to fix, but I found the perfect specification part to do it.
It seems like the hum comes from power regulation circuit and specifically the inductor. It's frequency matches the harmonics of the hum. It is due to poor power regulator design. I plan to create a CleanPower board for the GBA in future, making this fix irrelevant then, but until then you will need to place a solid state capacitor (not a normal aluminium capacitor) on the VDD2 rail. Solid state capacitors have lower ESR than the aluminium capacitors and that is key to the filtering working.
Place a 680uF 6.3V solid state capacitor on the ground pin of the headphone jack and S1 pin on the far right of the cartridge pins. Make sure to connect the negative leg (the one by the red half-circle) on the ground, and the other leg on S1.h
Also be sure not to short the legs of the capacitor, or the body, with the pin 1 or 2 of the headphone jack. Perhaps apply some electrical tape over them if you are unsure. It's easy to short pin 2 of the headphone jack with the capacitor and it will make lots of noise then, so tape over the headphone jack pins with electrical tape is recommended.
In this specific position, the capacitor will fit perfectly in the case.
With this capacitor in place, the low pitched hum will be filtered out. This is less noticeable than the hiss, but cleans up the audio even more.
Over Current Noise
In situations such as IPS mods or other power hungry mods, you will get more noise both hum and hiss due to the power regulator on the board being incapable of cleanly providing higher current.
When the current cannot be provided every part of the circuit that has any kind of high frequencies or large pulses of current will be heard even more through the speaker.
To solve this better I will make a CleanPower board for the GBA, but for now, the solution is to add extra capacitance on the main VCC line of the regulator. Attach the same sized 680uF solid capacitor to the CP1 capacitor pads, taking note to put the negative (red bar, shorter leg) of the capacitor to the negative of the aluminium capacitor (top pad with black bar), and the positive to the bottom.
With this on you will get no extra noise when using IPS mods or other power hungry mods. Keeping your audio lovely and clean.
The white noise
The last piece of noise that seems present on after filtering the hiss and hum appears to be the white noise caused by the PWM switching of the CPU audio out pins (not confirmed yet but I presume so).
The CPU generates the audio by pulsing high and low 2 data lines at a fixed frequency. The duty cycle of those pulses indicates the volume level, and the pitch is generated by varying the width over time.
This PWM DC signal is then converted to AC inside the amplifier, and output to the headphones and speaker.
When no audio is playing, the PWM should generate perfectly identical periods. However it varies slightly every other pulse. This is likely due to the clock speed of the CPU and its period at which it updates the width. It varies by a few clock cycles, generating a small difference every other pulse, that the amplifier then converts to a low voltage wave that comes out of the amplifier even when there is no audio playing.
As this is very low and consistent, and due to its frequency (65khz) we only hear the harmonics of the wave, as we cannot hear above 20kHz. Also the noise is not annoying like a hiss or a hum, just general white noise.
This signal is a little tricky to filter, as we cannot just do a low or high pass filter as you would expect on the incoming wave as it is a PWM signal, with the width dictating the noise we see.
The output phase we could do a low pass filter to remove the 65kHz signal, however due to the closeness to the 20kHz audible range, if we filter it this way we remove some of the original audio. As I am not a fan of removing any of the original audio, for now, this white noise stays.
I have ideas how to remove it other ways, but for now its there.
Does it improve the headphones?
Yes. Filtered correctly like this, the noise will not be present on the headphones either.
Buying the parts
We sell all the kits to remove the hum, hiss and amp the audio in our store.
Improving the audio further
If you would like to give feedback on this article or help out, I have an open discussion on the forum here.