I have a recording device that exhibits Wow and Flutter, or periodic frequency deviation. I use this device to record a calibrated 3.15kHz test tone from a tape film to generate a .wav file on my PC.
In an ideal world, an FFT on the data contained in the .wav file would result in a single sharp peak at 3.15kHz. In the real world, there is deviation in this frequency due to mechanical errors such as head scrape, non-concentric film rollers, motor vibration which all cause the tape film to either speed up or slow down slightly.
These deviations are called Wow and Flutter, and appear as errors frequency modulated by the 3.15kHz test tone.
What I would like to do:
Assume I have the .wav file, sampled at 48kHz. Let's say it contains an FM waveform with carrier frequency at 3.15kHz, and a message signal with bandwidth ~200Hz.
I'd like to build a python script to analyse and demodulate the signal to give me just the 200Hz signal. I've tried several models across the internet simulating PLLs, slope detectors etc. But these are all hard coded difficult to understand and I just can't seem to mould them to be used in my application.
I want to try implementing an IQ FM demodulator but I am unable to find a good reference to how FM waves are modulated via IQ signals and I definitely can't find one for demodulation.
Can someone point me in the right direction and let me know off the bat if there are any problems or roadblocks with what I'm trying to do?