File: filter_designer_test.c

package info (click to toggle)
libad9361 0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,440 kB
  • sloc: ansic: 16,065; sh: 165; makefile: 7
file content (68 lines) | stat: -rw-r--r-- 1,785 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68


#include "ad9361.h"
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check_result(short *taps, char tap_filename[100])
{
    FILE *fp;
    char buffer[255];
    printf("FN: %s\n",tap_filename);
    fp = fopen(tap_filename, "r");

    uint8_t k = 0;

    while (fgets(buffer, 255, (FILE *)fp)) {
        int tap = atoi(buffer);
        // printf("|%i|%i|\n", tap, taps[k]);
        // Taps need to be within 2 samples (remez had randomness in it)
        if (abs(tap - taps[k])>2) {
            fclose(fp);
            printf("Error: Tap missmatch\n");
            return -2;
        }
        k++;
    }
    fclose(fp);
    return 0;
}

int main(void)
{
    struct filter_design_parameters fdpTX;
    struct filter_design_parameters fdpRX;
    short outputTaps[128];
    int num_taps, ret, gain, k;
    char filename[100];

    unsigned long rates[] = {1000000, 10000000, 20000000, 60000000};

    for (k = 0; k < 4; k++) {

        // Generate rates in filter struct
        ret = ad9361_calculate_rf_clock_chain_fdp(&fdpTX, &fdpRX, rates[k]);

        // Test RX side
        ret = ad9361_generate_fir_taps(&fdpRX, outputTaps, &num_taps, &gain);
        if (ret < 0)
            return ret;
        sprintf(filename,"rateRX_%lu.taps",rates[k]);
        ret = check_result(outputTaps,filename);
        if (ret < 0)
            return ret;

        // Test TX side
        ret = ad9361_generate_fir_taps(&fdpTX, outputTaps, &num_taps, &gain);
        if (ret < 0)
            return ret;
        sprintf(filename,"rateTX_%lu.taps",rates[k]);
        ret = check_result(outputTaps,filename);
        if (ret < 0)
            return ret;
    }
    return 0;
}