Go Down

Topic: vu-Meter for multichannel AVR (Read 465 times) previous topic - next topic

kimmjoe

Hey there,

I am looking for a way to built a vu-meter for my home cinemar receiver.

Most designs I found so far use the headphone (or preout) of their amplifiers to measure voltage.

But in my case thats impossible since my AVR (Denon AVR-X2300w) only has preouts for L, R and sub. But I want to visualize the surround channels too.

Putting a mic in front of every speaker and is no option because that would require me to install a lot of additional wiring.

So I guess the only way would be to somehow directly measure the speaker outputs. Is there a non invasive way to do so? Can I measure voltage similar to current with some kind of non invasive clamp? Or is using a voltage divider the only way? In that case it would have to have a very huge resistance in order not to interfere with normal speaker operation, right?

PieterP

The resistances used for voltage dividers are orders of magnitudes larger than the impedance of a typical loudspeaker, but the values are very common for small electronics. Connecting a voltage divider with resistors of a couple of kilo Ohms is not going to interfere with the normal speaker.

Scaling down the voltage is not the issue here, the problem is that the audio signal is AC, and the Arduino can only measure DC. Negative voltages will damage it.

On top of that, it cannot sample at frequencies high enough to satisfy the Nyquist criterion for audio (~20 kHz). Especially if you have to sample N channels, the sampling frequency is reduced by a factor of N.
This means you need relatively steep analog anti-aliasing filters, otherwise, the sampled signal is meaningless.
For a VU meter, this is not really an issue, since you're not interested in the high-frequency components anyway, but if you want to do some kind of spectral analysis, this is going to be a problem.

Pieter

kimmjoe

#2
Oct 11, 2019, 03:40 pm Last Edit: Oct 11, 2019, 03:41 pm by kimmjoe
Thank you very much for your reply!

What if I were to use an esp32? It has enough analog inputs and I suppose it is able to sample at higher frequencies since it has a much higher operating frequency. Or am I on the wrong track here?


And for the negative voltages, could I use a diode to filter them out? I dont want to build a spectrum analyzer and I guess for a simple vu-meter that would be accurate enough...?

How would I put the resistors an diodes together?

PieterP

#3
Oct 11, 2019, 03:44 pm Last Edit: Oct 11, 2019, 03:46 pm by PieterP
What if I were to use an esp32? It has enough analog inputs and I suppose it is able to sample at higher frequencies since it has a much higher operating frequency. Or am I on the wrong track here?
The analog inputs are multiplexed, the ESP32 has only two ADCs. They will probably be faster than say, an Arduino UNO, but you'll have to do some calculations to make sure they are fast enough. A faster clock speed doesn't necessarily mean that the ADC is faster as well.

A diode is not enough, you need a low-pass filter as well.

DVDdoug

#4
Oct 11, 2019, 07:38 pm Last Edit: Oct 11, 2019, 11:46 pm by DVDdoug
Quote
Is there a non invasive way to do so?
I'm not sure what you mean.    You'll need to wire-up to the speaker terminals.   I suppose that's not quite as easy as connecting to a line-level signal with a Y-splitter bit it's still pretty-easy...

Measuring current is not a good way to do it because speaker impedance varies over the frequency range.    Audio specs/measurements assume "constant voltage" (voltage independent of resistance/impedance) and the "nominal" impedance is used for power calculations.   For example, when measuring frequency response you apply the same voltage across the frequency range rather than maintaining true-power.   And, that's how amplifiers work.   Plus, it's just easier to measure voltage.

Quote
Or is using a voltage divider the only way? In that case it would have to have a very huge resistance in order not to interfere with normal speaker operation, right?
Yes, Voltage dividers are typically in the 10K range anyway.     

100W is 80V peak-to-peak so you'll need a 16:1 voltage divider for the 0-5V Arduino input (if you want to go up to 100W).

I'd also recommend adding protection diodes.    (The protection circuit requires a current-limiting resistor, but you already have a resistor in your voltage divider(s).

I've attached a schematic for the standard bias circuit.   The two 10K resistors "appear" in parallel to to the audio signal so they present a 5K load, which you can use for the "bottom half" of your voltage divider.  (Add another resistor in series with the capacitor.)

I wouldn't actually worry about "speed".   With normal program material most of the energy is in the mid and low frequency range.    Aliasing is NOT a factor.   Aliasing & Nyquist are related to frequency   and the amplitude  measurements will not be affected.

If you want to measure peaks, or if peak measurements are acceptable, and if you don't mind adding additional circuitry, you can use a peak detector (AKA envelope follower).   That will "catch" all of the peaks (including any high-frequency peaks depending on the op-amp, etc.) and your software is easier because you can sample at around 10 times per second instead of thousands of times per second.  (Of course, the over-voltage protection goes in front of the peak detector.)

One additional thought - Most of the time "at home", you'll be running at a few watts.   So, you may want to have multiple ranges, or make it auto-ranging.    (If you use a peak detector the input won't be biased so you can switch between the default and the 1.1V ADC reference as an easy way to increase/change sensitivity.)   

...I've made a "Giant VU Meter Effect" and it automatically adjusts based on a moving-average so I get lots of "meter action" no matter what the volume.   But of course it's totally useless as a meter.   ;)



Go Up