Hi List,
I've done a bit more investigation into this as I can see the effect here but no difference showed up in Claudio's noise floor tests. I modified the synthetic test signal in the fpga, see below, to give a small signal. On the 12bit code no signal is visible(both in SparkSDR and PowerSDR) and the data is all zeros so the signal is lost. On the 16 bit code it is easily visible at 4.6Mhz approx. To identify where the signal is being lost I tried multiplying the signal by 16 (by shifting) before each stage of the receiver in turn. Multiplying before the first cic was the only thing that created a signal so I guess there is an issue with this cic. I want to learn how to do this in the emulator before going further as it is painfully slow testing this way.
In viewing these small clean signals other small spurs become visible as you tune, I guess from the cordic. They may well be of no consequence in the real world but I do wonder if there are sweet spot cordic values that can be used with fine tuning done on the pc. I remember Steve mentioning something like this when he was looking at NCOs.
73 Alan M0NNB
case (incnt)
4'h0 : temp_ADC = 12'h000;
4'h1 : temp_ADC = 12'h000;
4'h2 : temp_ADC = 12'h000;
4'h3 : temp_ADC = 12'h000;
4'h4 : temp_ADC = 12'h000;
4'h5 : temp_ADC = 12'h000;
4'h6 : temp_ADC = 12'h000;
4'h7 : temp_ADC = 12'h000;
4'h8 : temp_ADC = 12'h000;
4'h9 : temp_ADC = 12'h000;
4'ha : temp_ADC = 12'h000;
4'hb : temp_ADC = 12'h000;
4'hc : temp_ADC = 12'h000;
4'hd : temp_ADC = 12'h000;
4'he : temp_ADC = 12'h000;
4'hf : temp_ADC = 12'h001;
endcase