Here are the solutions to the questions:
5. (a) With the aid of a labelled circuit diagram, explain the principle of operation of a phase sensitive rectifier.
A phase-sensitive rectifier (PSR) is a type of rectifier that produces a DC output voltage whose magnitude is proportional to the amplitude of an AC input signal and whose polarity depends on the phase relationship between the input signal and a reference signal.
Principle of Operation:
The core idea is to switch the polarity of the input signal synchronously with a reference signal. When the input signal is in phase with the reference, the output is positive. When it is 180 degrees out of phase, the output is negative. If the input is 90 degrees out of phase, the average output is zero.
1. Input Signal ($V_{in}$): This is the AC signal whose amplitude and phase relative to the reference are to be measured.
2. Reference Signal ($V_{ref}$): This is an AC signal of the same frequency as the input, used to provide a timing reference for switching.
3. Multiplier/Switching Circuit: This circuit (often implemented with analog multipliers, op-amps, or switching diodes/transistors) effectively multiplies the input signal by a square wave derived from the reference signal. When the reference is positive, the input signal passes through with its original polarity. When the reference is negative, the input signal's polarity is inverted.
4. Low-Pass Filter: The output of the multiplier is a modulated AC signal. A low-pass filter (LPF) is used to average this signal, removing the AC components and leaving a DC voltage. This DC voltage is proportional to the amplitude of the input signal and its phase relative to the reference.
Circuit Diagram:
$$
\begin{circuitikz} \draw
(0,0) node[left]{$V_{in}$} to[short, o-] (0,0)
(0,0) node[op amp, noinv input down, anchor=+] (opamp) {}
(opamp.out) to[R, l_=$R_f$] (opamp.inv)
(opamp.inv) to[R, l_=$R_1$] (0,0)
(opamp.inv) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short, -o] (opamp.out -| 4,0) node[right]{$V_{out}$}
(opamp.out) to[C, l_=$C_f$] (opamp.inv)
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}
(opamp.out) to[short] ++(0,-0.5) node[ground]{}