Hi Kyle
I’ve looked at your commit. They way you are calculating the derivative of the sample may not actuate enough. I’m calculating the derivative as ds(n) = (s(n+1) - s(n-1))/2. Implementing a higher order derivative gives better sound, but eats the performance gain.
I’ve also tried to make a integer only version of the demodulator, but the rounding errors makes it sound terrible. Strange enough it is also faster doing things partly in integer and partly in floats.
I’v tried to profile the four methods in osx:
atan Fast: 11.5%running time aran:lut 17.6% running time atan std: 49.6% running time aes: fm_demod2 22.9% running time
The percentage given is time spend in fm_dmod relative to the rest of the program. /Anders
Den 30/01/2014 kl. 16.35 skrev keenerd keenerd@gmail.com:
On 1/30/14, keenerd keenerd@gmail.com wrote:
On 1/30/14, Anders Lynge Esbensen anders@lyes.dk wrote:
I've implemented a faster FM demodulator for rlt_fm.
Let me see if I can get a fixed-point version written.
I've cleaned it up and it is in my repo. You can enable it with "-A ale" https://github.com/keenerd/rtl-sdr/commit/025fb56dff98
Some quick benchmarks: std: 10% fast: 7% lut: 7% ale: 7%
Sound quality is also noticably worse with ale, but that might be from an error in the fixed point conversion. How does the math look to you?
-Kyle http://kmkeen.com