Peak detector vs half-wave rectifier

Thread Starter


Joined Jun 2, 2011
Hi all,

I need to feed an ADC with a 0-5V signal and the circuit I'm using, a photodiode transimpedance circuit with a feedback loop to reject ambient light (see schematic attached) produces an AC signal.

I'm only using a small uprocessor to record the ADC stream so I can't do a whole lot of digital post processing on the signal, apart from a bit of averaging. The photodiode measures scattered light from a LED modulated at 1kHz, which at times can can be very small (photocurrents of the order of 100s of nA). I therefore need a output stage on the output of this circuit that will condition the signal (linearly) over a large range of voltages.

I've read a little bit on half-wave rectifiers but it sounds like they run into problems for small signals, and the linearity drops out. Is a peak detector a possible solution? Are there other options I'm not considering? The device (which is portable) takes measurements periodically (say every 10 or so minutes), so I can ideally run a single measurement over a relative long timescale to get the best result.

Any suggestions welcome! Thanks in advance....



Joined Oct 2, 2009
A half-wave rectifier and a peak detector are almost the same thing. The latter is simply a half-wave rectifier feeding at a charge holding capacitor. You then need a reset circuit to discharge the capacitor after the reading is taken. An alternative is to simply use a resistor across the capacitor so that it has a discharge time constant. In your case you have a huge range to play with if you are going to sample once every 10 minutes.

The half-wave rectifier will be a precision rectifier using a diode in the feedback loop of an opamp circuit. This has been discussed on many occasions on AAC.


Joined Nov 22, 2011
An RC time constant isn't linear though. *laughing* not that I feel it matters really though. But I do know that it takes 5 TCs for a capacitor to charge to the supply rail. From memory the first TC is 63% of VCC. I forget the second, third, and forth.

How are you going to analyse the data that you record, and for what purpose will it have?


Joined Dec 26, 2010
Whether or not sample-and-hold smoothing is required is not necessarily a question of level linearity. It is true however that using a discharge resistor may require an excessively large filter capacitor at the detector to obtain an approximation to the peak level measured over a long time. This could result in an inability to follow rapid changes in carrier level, so that a short-term rise in amplitude might not be captured.

According to your application, you might in any case like to think about whether you really want the peak carrier level during your sample time to be captured, or the mean. All well and good to measure the peak if this is required, but this will make your system more sensitive to noise spikes, which may be significant an a system exposed to stray light. A detector with modest smoothing, followed by separate heavy low-pass filtering, may be more appropriate if an averaged measurement is acceptable.

At very least, the sort of precision or active rectifier recommended by MrChips is required, as ordinary rectifiers respond poorly to low-level signals. A minimum voltage swing is required to switch a diode on and off: a plain silicon diode requires of the order of 0.6V peak to get any significant response at all, a Schottky type maybe half that. Judicious DC biasing can improve the performance a bit, but the non-linearity cannot be removed.

If the noise situation is really dire, synchronous detection (as in "lock in amplifier") may be the order of the day. Even a precision rectifier may give very poor results if there is a large amount of noise present. The problem is that the signal level itself determines the switching process. If there is too much noise, the carrier rectification can be disrupted. A synchronous or "driven" rectifier of course requires a reference signal, and extra complexity, but potentially works much better with "dirty" signals.