I am making a PCB that receives a signal with a frequency band of 3-50 Hz and peaks of up to 10's of uV. I have implemented proper analog LP and HP (band-pass) filters and am using a 16-bit isolated ADC to send the data to a computer.
I am using Python to read the lines (derial communication) from the ADC (which is acting as a slave to my MCU.) The system diagram would look something like this:
simulate this circuit – Schematic created using CircuitLab
When I get my data and do real-time FFT (since it is a non-stationary signal,) one obvious feature is a peak at 50 Hz (the mains has a frequency of 50 Hz in the UK,) and for that I can add a notch filter to reject the 50 Hz component, but that would mean extra cost and time to implement it.
I don't have much experience with digital filtering, but I was thinking, rather than implementing a hardware-based analog filter, is it possible to do the following procedure:
- Perform the FFT.
- Reject and suppress the 50 Hz component.
- Convert the signal back into time domain.
- Perform the analysis.
Will the time delay for this kind of filtering be just the number of machine cycles the computer goes thorugh to preform this task?
If this is plausible, is there anything that's wrong with just amplifying the signal and getting rid of the high frequency noises and spikes with a passive filter and performing all the mentioned filtering (notch, LP and HP) in the computer with Python or any other software methodology for that matter?
In terms of resolution, is it correct to assume that the final signal resolution under analysis is the multiplication of the resolution of the ADC by the digital filtering's resolution, since in my code values are saved as 32-bit floats?