**[»] Engineering**and

**[»] Optics**.

I recently decided to improve the [∞] OpenRAMAN project by proposing a complete set of spectroscopy experiments among which absorbance, emission, and fluorescence spectroscopy. As a backbone to all these experiments, I’m presenting here a generic 350-700 nm spectrometer which can be seen in Figure 1 and which can be downloaded [∞] here under a CERN open-hardware license for reproduction. The spectrometer is also compatible with the [∞] SpectrumAnalyzer software of OpenRAMAN.

Since I already presented a methodology to develop spectrometers [»] here, I will focus on aspects that I did not mention previously, among which spectral readability and dynamic range.

I chose the 350-700 nm range for the spectrometer because most Thorlabs optics are optimized for that range. I could have selected a different range, such as 400-800 nm or 500-1000 nm, but I felt that the 350-700 nm would be better suited to the type of experiments that I intend to perform later. Recall that the **free spectral range** of a simple grating spectrometer like this one is limited to the condition *λ _{max}<2*λ_{min}* because we’re diffracting

*m*λ*(where

*m*is an integer) and it’s therefore not possible to separate a wavelength from its multiples.

I also chose to work with a maximum of COTS elements that I already possessed, in particular the camera (a BFLY-PGE-31S4M-C and a MER2-160-75GM-P) and machine vision lenses (a 35 mm and a 50 mm Navitar lenses). I also had 300 lp/mm and 600 lp/mm gratings in stock to work with. Under these hypotheses, I identified the solutions listed in Figure 2. Other variations are eventually possible depending on what hardware is available to you.

Based on previous experience with OpenRAMAN, I also decided to keep an angle of 47.5° between the input and output arms. It’s possible to use any other angles but I recommend sticking to the 30-60° range for efficiency and component placement purposes. Too low angles make it difficult to get the components closer together, and too large angles reduce the grating efficiency.

We see in Figure 2 that we either have a design with a slightly shorter span (326 nm) or much longer span (446 and 448 nm). I chose to favor the first variant with the 326 nm span because it was offering better overall resolution. The drop of resolution from variant #0 to #1 is directly due to the larger span because we have the same amount of pixels to image a larger spectral range.

Finally, I chose to use a fiber as source of light in the spectrometer and not a slit (the fiber acts here as a slit). This was to reduce the number of components in the system and keep the price low. It also allows to easily change the resolution of the system by changing the fiber core diameter which can be done very easily without needing to realign the spectrometer. The only downside with this approach is that I wasn’t able to find a 15 µm core fiber and used a 10 µm one which is a bit small compared to the usual recommendation that you should keep a ratio of at least 3 between the dispersion and the resolution in your spectrometer to resolve peaks properly. Note that I already made (professionally speaking) a spectrometer in the deep UV with a ratio of 2 and, although it was working, I don’t necessarily recommend it. An alternative is to use a stock 25 µm fiber which I expect to produce a 0.71 nm resolution with variant #0. Below, you will also find the results of experiments performed with 50 µm and 200 µm fibers and with a 15 µm slit as well.

If you followed my [»] previous post, you know that there is a formula to estimate the efficiency of the grating. It’s always very important to check these plots when making the initial system design to assess that you will keep enough signal at all wavelengths. It’s very common when working on large spectral ranges or when selecting an incorrect grating for the application to get extremely low efficiencies (<20%). All variants in Figure 1 have good theoretical efficiencies typical to the one of Figure 3 which was computed for variant #0.

Using [»] slit magnification and [»] the effect of the psf, it’s also possible to estimate what would be the resolution of the spectrometer at different slit/fiber widths. The results are presented in Figure 4 for a diffraction-limited psf and will be compared with experimental values below. Note that the theoretical limit of the grating is about ~0.03 nm (wavelength divided by the number of illuminated lines) but in practice, for ruled grating, a factor of 10 is usually observed which would give ~0.3 nm here so we’re safe anyway. Even variants #1 and #2 which use less lines density (300 lp/mm instead of 600 lp/mm) should still be safe in that regards. Never forget to check if the number of illuminated lines in your grating could be a bottleneck for resolution.

Concerning the assembly, the spectrometer and its cover can be 3D printed. I recommend using a 100% infill and PETG for resistance. Assembly is performed just like with the OpenRAMAN spectrometer (see instructions [∞] here). A small difference compared to OpenRAMAN is that I decided to try using a different kinematic mount this time. I’m not necessarily 100% convinced about this new mount because it’s not holding the grating tight enough compared to my experience when it goes to things like transportation. So, I don’t think I will reuse that mount ever again in future designs.

The first experiment I made was to analyze the effect of changing the fiber core diameter on spectral readability (how “clean” the spectra look). The results are shown in Figure 5.

In the experiment of Figure 5, I set an integration time of 0.89 ms such as to reach 80% of the CMOS sensor saturation with the 200 µm fiber. I then replaced the 200 µm fiber by a 50 µm fiber and a 10 µm fiber keeping the integration time constant. The resolution was measured on the 440 nm peak of the fluocompact lamp and gave 0.39 nm using the 10 µm fiber, 1.00 nm using the 50 µm fiber and 4.41 nm using the 200 µm fiber. This is very close to the theoretical expected values of 0.30 nm, 1.37 nm and 5.45 nm respectively. The differences can probably be explained by the fact that the spectrometer was slightly more open than 0.10 NA and that the PSF is not exactly diffraction-limited. Nonetheless, these results are pretty satisfactory.

If you were asked, you would probably say that the “best” spectrum is the one with the 50 µm fiber because it’s both clean with well detailed peaks. Clearly, at low noise values, spectra with sharp peaks looks better. Alternatively, at equivalent resolution, spectra with less noise looks more readable. We can therefore state that:

(1) At equivalent noise level, spectral readability increases with resolution, and,

(2) At equivalent resolutions, spectral readability increases as the noise decreases.

A good quantification of the noise level of a spectrum is its **dynamic range** which is defined as the height of the tallest peak divided by the rms value of the noise in a flat section of its baseline. When computing the rms value of the baseline, I usually select a range of about 100 points where the spectrum looks flat and remove a low-order polynomial from it. Alternatively, it’s possible to use a high-pass filter but beware that the results will be slightly different. It’s therefore important to compare dynamic range computed using the same method.

In Figure 5, the dynamic range of the spectra were 1:185 using the 10 µm fiber, 1:2,984 using the 50 µm fiber and 1:10,721 using the 200 µm fiber. We therefore see that the dynamic range seems to be somehow proportional to the fiber core diameter. However, if you plot the dynamic range as a function of fiber core diameter, you don’t get a straight line at all. Let’s analyze why.

The problem with the experiment of Figure 5 is that the fibers have different numerical apertures (NA). The higher the numerical aperture, the higher the energy that can be injected in the spectrometer. So, it’s not possible to compare the 10 µm fiber to the 50 µm and 200 µm fibers because they have different NAs (0.10 against 0.22). Note that the spectrometer itself clips the allowable NA to about 0.125 or a touch more because of the grating dimensions and the optical properties of the machine vision lenses (entrance pupil position).

A better way to look at our fiber is through their **étendue** which is a measurement proportional to energy and is defined as

We can verify this assertion by plotting the integrated signal measured by the spectrometer against the étendue. The integrated signal is the total number of photons detected by the sensor over the complete field of view of the camera and is therefore a measurement of the energy reaching the sensor. The results are shown in Figure 6 and display the expected linear trend between energy and étendue.

If we now plot the dynamic range observed in Figure 5 against étendue, we get something that follows relatively well a square root. The results are shown in Figure 7.

The square root pattern is due to the presence of the *d ^{2}* in the computation of the étendue. Let’s explain why.

As we said, dynamic range is given as the ratio between peak height and the noise floor. At a given exposure time, the noise floor is a constant value and does not depend on how much energy is injected in the fiber because, by definition, it corresponds to a region of the spectrum with no light reaching. Now, concerning regions where light hits the sensor, we need to divide what happens to the fiber between two effects: horizontal and vertical effects.

Since the grating disperses the light horizontally, we just plot the data of the sensor along the horizontal axis and the energy is therefore spread on multiple pixels. A “wide” fiber or slit will not produce a brighter spot than a “narrow” one, just a larger spot image. In consequence, the peak height is not affected by how wide the fiber/slit is.

On the other hand, there is no dispersion on the vertical axis, and we can therefore integrate (sum) all the data on columns of the sensor. As a consequence, the “taller” the slit or fiber, the more photons we collect along the same column and the higher the peak width will be.

As we increased the size of the fiber in Figure 5, the number of photons grew up linearly per column while the noise floor remained the same. Consequently, the dynamic range would have increased linearly with fiber core diameter if the numerical aperture had been kept the same. But since we need to take into account the increased number of photons due to the higher NA of the 50 µm and 200 µm fibers, we observe that the dynamic range grows up with the square root of the étendue. Don’t confuse however that the square root really originates from the fiber core diameter and that the plot of the étendue is only required to compensate for the different NAs.

Note that although the experiment in Figure 5 is fine, it does not correspond to what a spectroscopist would do when measuring spectra. Usually, you don’t keep a constant integration time but adapt the integration time such as to always use the maximum range allowed by the camera, typically 80% of its saturation capacity. This is a different experiment for which I have shown the results in Figure 8.

At first, all the spectra in Figure 8 looks relatively clean. Nonetheless, it is worth measuring what are the actual dynamic range in each of them.

I measured 1:1,439 using the 10 µm fiber, 1:3,750 using the 50 µm fiber and 1:7,121 using the 200 µm fiber. Although the exact value will depend on how close I was to saturation in each case (compare the results with the dynamic range of Figure 5 for the 200 µm fiber for instance), it is relatively clear that, even when adjusting exposure time, the dynamic range is still influenced by the size of the slit or fiber to some degree.

If we now plot the dynamic range vs. étendue, we get a different relationship that is proportional to the power 1/4^{th} of the étendue as shown in Figure 9.

We can explain this as well.

Concerning the peak height, the previous analysis remains the same and we expect, at constant NA, that the peak height will increase linearly with the fiber core diameter.

On the other hand, we cannot assume anymore that the rms noise floor will remain the same across all spectra because we changed the integration time during the experiment. An analysis of the camera model (more on that in another post), which applies as well to camera as to linear sensors, states that the noise floor rms value depends on the square root of the integration time. Since to achieve the same saturation capacity across all spectra we increased the integration time linearly with the fiber core diameter, the noise floor therefore varied as the square root of the fiber core diameter – provided we use the same NA for all fibers.

The dynamic range is therefore expected to vary as the square root of the fiber core diameter when using the same numerical aperture, or as the power 1/4^{th} of the étendue as shown in the plot of Figure 9.

This has important implications for our fiber-based spectrometer because it means that, using the same system design, dynamic range is bound to resolution. It’s therefore not possible to control resolution __and__ dynamic range separately in this design.

If you would like to control separately the resolution and the dynamic range, you would need to split the horizontal and vertical effects discussed here-above and change the system for a fiber coupled to a slit. The width of the slit will then control the resolution of the spectrometer and the diameter of the fiber will control how much light you put in the system and therefore what dynamic range you can achieve.

Re-imaging the fiber on the slit is largely superior to putting the fiber in front of the slit but requires more components. Ideally, you will want to build the re-imager as a 4f system with a magnification ratio designed to compensate the ratio between the fiber numerical aperture and the system acceptance. In our 0.125 NA spectrometer, a good match would be to use a 19 mm lens with a 35 mm lens when using a 0.22 NA fiber. The direct consequence is that the system is designed for a specific numerical aperture and although you can swap any fiber, it will only be optimal for 0.22 NA fibers.

Such a slit system is shown in Figure 10. Since I did not have a 35 mm achromat on hand, I designed mine using a 50 mm achromat which is inferior because it decreases the numerical aperture to 0.084 and underfills the spectrometer. Due to the rotation mount, it also does not perfectly fit the spectrometer CAD of Figure 1, especially the cover. If you wish to use the system of Figure 10, I would recommend to modify the CAD of the spectrometer baseplate first.

The experimental result obtained with the slit system is shown in Figure 11 with a 15 µm slit and a 400 µm fiber. The measured resolution was 0.44 nm with a dynamic range of 1:22,206. Compared to the results of Figure 9, we could have expected a dynamic range 1:1,934 when using a 15 µm fiber – more than 10× less. In fact, it is even possible that the dynamic range given here is under-estimated by a factor 2~3 because I wasn’t able to use as much vertical information as I wanted to due to a technical issue with the software I was using to acquire the spectra. Nonetheless, the spectrum of Figure 11 is extremely clean for an integration time of only 11.2 ms compared to 100 ms used for the 10 µm fiber in Figure 8.

That being said, the applicability of the slit system shown in Figure 10 is relatively limited. It’s only possible to use it when the source has a very large étendue which is not the case in experiments like Raman spectroscopy where all the energy is concentrated in a tight spot. In Raman spectroscopy, if you try to couple the small spot in a large core fiber you will actually dilute your signal and decrease the overall energy injected on the camera sensor. The same reasoning applies to other techniques that I will show in future post, reason for which I do not push forward at all the system of Figure 10 but prefer, at the very least in this specific context, a direct fiber-based approach.

Now that we have a working spectrometer, it’s time to measure something with it! Let’s therefore meet in the next post to do something useful with it :)

Want to discuss this further? Check out our new [∞] community board!

I would also like to give a big thanks to **Young**, **Naif**, **Samuel**, **Sebastian**, **James**, **Lilith**, **Alex**, **Stephen**, **Jesse**, **Jon**, **Sivaraman**, **Cory**, **Karel**, **Themulticaster**, **Tayyab**, **Marcel**, **Samy**, **Kirk**,** David**,** Dennis** and **M **who have supported this post through [∞] Patreon. I also take the occasion to invite you to donate through Patreon, even as little as $1. I cannot stress it more, you can really help me to post more content and make more experiments!

**You may also like:**

[»] Complete 400-800 nm Spectrometer Design from A to Z

[»] Resolution in Spectroscopy