The aim of our project is to develop a portable device that can measure the polarisation of light in real time, such a device is called a polarimeter. The method we used is based on a 2021 paper by researchers at the University of Victoria entitled “Portable Real-Time Polarimeter: for Partially and Fully Polarized Light”.
The device consists of a touchscreen graphical user interface, allowing a user to interact with the device during operation. The interface displays the polarisation ellipse, Stokes graph, and the Poincaré sphere (a 3D visualisation of the polarisation state), as well as live statistics such as the calculated Stokes parameters, degree of polarisation, and polarisation handedness.
The principle operation of the device is using the spinning waveplate method, which is a type of Stokes polarimeter. Light passes first through a continuously rotating quarter waveplate, subsequently passing through a linear polariser, and finally into a power meter (in our device’s case, a photodiode with a transimpedance amplifier and an analog-to-digital converter [ADC]). The result is some periodic waveform over time as the waveplate is spun and power measurements are repeatedly captured. By converting this time domain data into the frequency domain, components at DC, 2ω, and 4ω (with ω being the motor rotational speed) appear as sharp tone spikes. By using the phase and magnitudes of the complex values at these points, the Stokes parameters S0, S1, S2, S3 can be calculated, which wholly defines the polarisation state of the incident light source. These parameters can be then used to reconstruct the polarisation ellipse and a point on the Poincaré sphere, visually indicating the light polarisation to the user.
The device itself uses a Raspberry Pi Pico to sample the ADC at 166,000 samples/second. A hall eect latch sensor generates a clock signal the same period as the motor rotation which are used to count the number of motor rotational cycles (which is extremely important for the frequency transformation). After a certain number of cycles, to calculate the Stokes parameters (the polarisation state) the Pico applies the computationally eicient Goertzel’s algorithm to the collected data for detecting the DC, 2ω, and 4ω frequency components. This is done in parallel on a second core while more data is being captured on the first processing core. The results are sent back along with processing statistics over UART in serial packets to a Raspberry Pi 4 which receives and decodes the data, displaying the calculated results and visualisations to the devices interface. The Raspberry Pi Pico backend was written in C for real-time performance, while the Raspberry Pi 4 frontend was written in Python using PyQt5.