--- /dev/null
+% adc_sfdr_ut.m
+% David Rowe Aug 2015
+%
+% Processes data collected from STM32F4 or SFDR testing of ADC
+
+s = load_raw("~/stlink/adc.raw");
+Fs = 2E6;
+N = 1024;
+num_frames = length(s)/N;
+h = hanning(N);
+XdB = zeros(N/2,1);
+
+for i=1:num_frames
+ x = s((i-1)*N+1:i*N);
+ X = fft(x .* h);
+ XdB += 20*log10(abs(X(1:N/2)));
+end
+
+XdB /= num_frames;
+XdB -= max(XdB);
+
+figure(1)
+plot((0:N/2-1)*Fs/(1000*N), XdB)
+grid
+ylabel('Amplitude dB')
+xlabel('Frequency (kHz)');
+axis([0 Fs/(2*1000) -80 0])
+
src/adc_sfdr_ut.c \
gdb_stdio.c \
../src/fifo.c \
+src/iir_tuner.c \
src/sm1000_leds_switches.c \
src/debugblinky.c \
src/system_stm32f4xx.c \
src/stm32f4_adc_tuner.o: src/stm32f4_adc_tuner.c
$(CC) $(CFLAGS) $^ -c -o $@
-adc_sfdr_ut.elf: $(TUNER_UT_SRCS) src/stm32f4_adc_tuner.o
+adc_sfdr_ut.elf: $(ADC_SFDR_UT_SRCS) src/stm32f4_adc_tuner.o
$(CC) $(CFLAGS) -O3 $^ -o $@ $(LIBPATHS) $(LIBS)
$(OBJCOPY) -O binary adc_sfdr_ut.elf adc_sfdr_ut.bin
#include "../src/codec2_fm.h"\r
#include "stm32f4xx.h"\r
\r
-#define REC_TIME_SECS 1\r
+#define BUFS 10\r
#define FS 2E6\r
-#define N (ADC_TUNER_BUF_SZ/2)\r
+#define N 1024\r
\r
extern int adc_overflow1;\r
\r
int main(void) {\r
- short buf[N];\r
- int bufs, i;\r
- FILE *fadc;\r
-\r
- ftuner = fopen("adc.raw", "wb");\r
- if (ftuner == NULL) {\r
+ unsigned short unsigned_buf[N];\r
+ short buf[N];\r
+ int sam;\r
+ int i, j, fifo_sz;\r
+ FILE *fadc;\r
+\r
+ fadc = fopen("adc.raw", "wb");\r
+ if (fadc == NULL) {\r
printf("Error opening output file: adc.raw\n\nTerminating....\n");\r
exit(1);\r
}\r
- bufs = FS*REC_TIME_SECS/N;\r
- fifo_sz = ADC_TUNER_N;\r
- printf("Starting! bufs: %d %d\n", bufs, fifo_sz);\r
+ fifo_sz = ADC_TUNER_BUF_SZ;\r
+ printf("Starting! bufs: %d %d\n", BUFS, fifo_sz);\r
\r
adc_open(fifo_sz);\r
adc_set_tuner_en(0); /* dump raw samples, no tuner */\r
\r
sm1000_leds_switches_init();\r
\r
- for (i=0; i<bufs; i++) {\r
- while(adc1_read(buf, N) == -1);\r
+ for (i=0; i<BUFS; i++) {\r
+ while(adc1_read((short*)unsigned_buf, N) == -1);\r
+\r
+ /* convert to signed */\r
+\r
+ for(j=0; j<N; j++) {\r
+ sam = (int)unsigned_buf[j] - 32768;\r
+ buf[j] = sam;\r
+ }\r
\r
/* most of the time will be spent here */\r
\r
}\r
fclose(fadc);\r
\r
- printf("Finsihed!\n");\r
+ printf("Finished!\n");\r
}\r
\r