]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/audio-preprocessing.git/blobdiff - file_demo_bios/da830/components/sysbf.c
Resturcture the GIT repository for noise reduction demo:
[processor-sdk/audio-preprocessing.git] / file_demo_bios / da830 / components / sysbf.c
diff --git a/file_demo_bios/da830/components/sysbf.c b/file_demo_bios/da830/components/sysbf.c
new file mode 100644 (file)
index 0000000..0d84c56
--- /dev/null
@@ -0,0 +1,111 @@
+/*=================================================================\r
+ *  sysbf.c: BF creation routines.\r
+ *=================================================================*/\r
+\r
+#include <xdc/std.h>\r
+#include <ti/sysbios/BIOS.h>\r
+#include <xdc/runtime/System.h>\r
+\r
+#include <ti/mas/types/types.h>\r
+#include <ti/mas/util/ecomem.h>\r
+#include <ti/mas/aer/bf.h>\r
+\r
+#include "sysbfflt.h"\r
+#include "sys.h"\r
+\r
+bfSizeConfig_t bfSizeConfig = {\r
+  bf_SAMP_RATE_16K,     /* 16kHz sampling rate */\r
+  SYS_MICS_MAX,         /* Maximum number of mics in the system */\r
+  32,                   /* Maximum beamformer filter length */\r
+  bf_TYPE_FIXED         /* Fixed beamformer type */\r
+};\r
+\r
+bfConfig_t bfConfig = {\r
+  bf_SAMP_RATE_16K,     /* use 16kHz sampling rate */\r
+  SYS_MICS_MAX,         /* use all mics */\r
+};\r
+\r
+/*=================================================================\r
+ *  void sysBfCreate(void)     Create beamformers\r
+ *=================================================================*/\r
+void sysBfCreate(void)\r
+{\r
+  int k, n, err;\r
+  tint nbufs;\r
+  Fract *coeff_p;\r
+  const ecomemBuffer_t  *bufs;\r
+  bfNewConfig_t bfNewConfig;\r
+  bfControl_t   bfCtl;\r
+\r
+  System_printf("...Initializing beamformers\n");\r
+  System_flush();\r
+\r
+  /* Configure Beamformers (use same configuration for all) */\r
+  err = bfGetSizes(&nbufs, &bufs, &bfSizeConfig);\r
+  if (err != bf_NOERR) {\r
+    System_printf("*** beamformer getsizes error: %d\n", err);\r
+    BIOS_exit(0);\r
+  }\r
+  /* Allocate memory for beamformer */\r
+  if (nbufs > SYS_COMP_MAXBUFS) {\r
+    System_printf("*** not enough buffer descriptors");\r
+    BIOS_exit(0);\r
+  }\r
+\r
+  bfNewConfig.sizeCfg = bfSizeConfig;   /* Use same configuration for all */\r
+  for (k = 0; k < sysContext.nvmics; k++) {\r
+    err = sysHeapAllocAll(nbufs, sysCompBufs, (const void*)bufs);\r
+    SYS_CHECK_ERROR(err);\r
+  \r
+    /* Give memory to beamformer #k */\r
+    bfNewConfig.handle = (void*)k;        /* Indicate BF instance #k */\r
+    sysContext.bfInst_p[k] = NULL;\r
+    err = bfNew(&sysContext.bfInst_p[k], nbufs, sysCompBufs, &bfNewConfig);\r
+    if (err != bf_NOERR) {\r
+      System_printf("*** beamformer #%d new error: %d\n", k, err);\r
+      BIOS_exit(0);\r
+    }\r
+  }\r
+\r
+  /* Open BF for business */\r
+  for (k = 0; k < sysContext.nvmics; k++) {\r
+    err = bfOpen(sysContext.bfInst_p[k],&bfConfig);\r
+    if (err != bf_NOERR) {\r
+      System_printf("*** beamformer #%d open error: %d\n", k, err);\r
+      BIOS_exit(0);\r
+    }\r
+  }\r
+  /* At this point BF's are open, but DISABLED! */\r
+  /* We need to initialize filters prior to enabling them. */\r
+\r
+  for (k = 0; k < sysContext.nvmics; k++) {\r
+    coeff_p = sysBfFilters[sysContext.vmicangles[k]];\r
+    for (n = 0; n < sysContext.nmics; n++) {\r
+      err = bfPutFilter (sysContext.bfInst_p[k], coeff_p, bf_FG_BF, n, SYS_BF_FILTER_LENGTH);\r
+      if (err != bf_NOERR) {\r
+        System_printf("*** beamformer #%d put-filter error: %d\n", k, err);\r
+        BIOS_exit(0);\r
+      }\r
+      coeff_p += SYS_BF_FILTER_LENGTH;      /* point to the filter for next mic */\r
+    }\r
+  }\r
+\r
+  /* Now we can enable beamformers */\r
+  bfCtl.valid_bitfield  = bf_CTL_CONFIG;\r
+  bfCtl.config.mask     = bf_CTL_CFG_ENABLE;\r
+  bfCtl.config.value    = bf_ENABLE;\r
+  for (k = 0; k < sysContext.nvmics; k++) {\r
+    err = bfControl (sysContext.bfInst_p[k], &bfCtl);\r
+    if (err != bf_NOERR) {\r
+      System_printf("*** beamformer #%d control error: %d\n", k, err);\r
+      BIOS_exit(0);\r
+    }\r
+  }\r
+\r
+  System_printf("Done with beamformers\n");\r
+  System_flush();\r
+\r
+} /* sysBfCreate */\r
+\r
+/* nothing past this point */\r
+\r