Renamed SDF to Compute Graph - Static Flow

Updated examples.
pull/53/head
Christophe Favergeon 4 years ago
parent a11e026e4f
commit 8e4c71fd0d

@ -8,7 +8,7 @@
<url>https://www.keil.com/pack/</url> <url>https://www.keil.com/pack/</url>
<releases> <releases>
<release version="0.0.0"> <release version="1.12.0">
Active development ... Active development ...
</release> </release>
</releases> </releases>
@ -49,7 +49,7 @@
<components> <components>
<!-- CMSIS-DSP component --> <!-- CMSIS-DSP component -->
<component Cclass="CMSIS" Cgroup="DSP" Cvariant="Source" Cversion="0.0.0" isDefaultVariant="true" condition="CMSISCORE"> <component Cclass="CMSIS" Cgroup="DSP" Cvariant="Source" Cversion="1.12.0" isDefaultVariant="true" condition="CMSISCORE">
<description>CMSIS-DSP Library for Cortex-M and Cortex-A</description> <description>CMSIS-DSP Library for Cortex-M and Cortex-A</description>
<files> <files>
<!-- CPU independent --> <!-- CPU independent -->
@ -105,12 +105,12 @@
</files> </files>
</component> </component>
<component Cclass="CMSIS" Cgroup="DSP" Csub="Synchronous Dataflow" Cvariant="Source" Cversion="0.0.0" isDefaultVariant="true" condition="CMSISDSPLIB"> <component Cclass="CMSIS" Cgroup="DSP" Csub="Compute Graph Static Flow" Cversion="1.12.0" isDefaultVariant="true" condition="CMSISDSPLIB">
<description>CMSIS-DSP Synchronous Dataflow (SDF)</description> <description>CMSIS-DSP Compute Graph - Static Flow</description>
<files> <files>
<file category="header" name="SDFTools/sdf/src/GenericNodes.h"/> <file category="header" name="ComputeGraph/cg/static/src/GenericNodes.h"/>
<file category="include" name="SDFTools/sdf/nodes/cpp/"/> <file category="include" name="ComputeGraph/cg/static/nodes/cpp/"/>
<file category="include" name="SDFTools/sdf/src/"/> <file category="include" name="ComputeGraph/cg/static/src/"/>
</files> </files>
</component> </component>
</components> </components>

@ -59,11 +59,11 @@
// </e> // </e>
// <q> SDF_VHT_TX_RX_ORDERING: Force TX RX ordering // <q> CGSTATIC_VHT_TX_RX_ORDERING: Force TX RX ordering
#define SDF_VHT_TX_RX_ORDERING 0 #define CGSTATIC_VHT_TX_RX_ORDERING 0
// <<< end of configuration section >>> // <<< end of configuration section >>>
#define SDF_AUDIO_CONFIG #define CGSTATIC_AUDIO_CONFIG
#endif #endif

@ -13,12 +13,12 @@
// <<< end of configuration section >>> // <<< end of configuration section >>>
#if defined(SDF_AUDIO_CONFIG) #if defined(CGSTATIC_AUDIO_CONFIG)
#define RING_BUFSIZE_RX (AUDIO_DRV_NBSAMPLES_RX * AUDIO_DRV_NBCHANNELS_RX * AUDIO_DRV_CHANNEL_ENCODING_RX) #define RING_BUFSIZE_RX (AUDIO_DRV_NBSAMPLES_RX * AUDIO_DRV_NBCHANNELS_RX * AUDIO_DRV_CHANNEL_ENCODING_RX)
#define RING_BUFSIZE_TX (AUDIO_DRV_NBSAMPLES_TX * AUDIO_DRV_NBCHANNELS_TX * AUDIO_DRV_CHANNEL_ENCODING_TX) #define RING_BUFSIZE_TX (AUDIO_DRV_NBSAMPLES_TX * AUDIO_DRV_NBCHANNELS_TX * AUDIO_DRV_CHANNEL_ENCODING_TX)
#endif #endif
#if defined(SDF_VIDEO_CONFIG) #if defined(CGSTATIC_VIDEO_CONFIG)
#define RING_BUFSIZE_RX (VIDEO_DRV_WIDTH * VIDEO_DRV_HEIGHT * VIDEO_DRV_PIXEL_SIZE) #define RING_BUFSIZE_RX (VIDEO_DRV_WIDTH * VIDEO_DRV_HEIGHT * VIDEO_DRV_PIXEL_SIZE)
#define RING_BUFSIZE_TX 0 #define RING_BUFSIZE_TX 0
#endif #endif

@ -30,6 +30,6 @@
// <<< end of configuration section >>> // <<< end of configuration section >>>
#define SDF_VIDEO_CONFIG #define CGSTATIC_VIDEO_CONFIG
#endif #endif

@ -1,6 +1,6 @@
# RingBuffer # RingBuffer
It is a way to connect the SDF graph to an audio source or sink. It is a way to connect the compute graph with static flow to an audio source or sink.
The node part is implemented in the AudioSource and AudioSink parts. The node part is implemented in the AudioSource and AudioSink parts.

@ -1,7 +1,7 @@
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
* Project: CMSIS DSP Library * Project: CMSIS DSP Library
* Title: RingBuffer.h * Title: RingBuffer.h
* Description: Ring buffer to connect the SDF to audio sources and sinks * Description: Ring buffer to connect the compute graph with static flow to audio sources and sinks
* *
* $Date: 30 July 2021 * $Date: 30 July 2021
* $Revision: V1.10.0 * $Revision: V1.10.0

@ -38,7 +38,7 @@ extern ring_config_t ringConfigRX;
#ifdef __FVP_PY #ifdef __FVP_PY
__attribute__((section(".ARM.__at_0x90000000"))) __attribute__((section(".ARM.__at_0x90000000")))
#endif #endif
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
__ALIGNED(16) static uint8_t dmaRX[AUDIO_BLOCK_SIZE_RX]; __ALIGNED(16) static uint8_t dmaRX[AUDIO_BLOCK_SIZE_RX];
int rxCount=0; int rxCount=0;
#endif #endif
@ -52,7 +52,7 @@ extern ring_config_t ringConfigTX;
#ifdef __FVP_PY #ifdef __FVP_PY
__attribute__((section(".ARM.__at_0x9FFF0000"))) __attribute__((section(".ARM.__at_0x9FFF0000")))
#endif #endif
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
__ALIGNED(16) static uint8_t dmaTX[AUDIO_BLOCK_SIZE_TX]; __ALIGNED(16) static uint8_t dmaTX[AUDIO_BLOCK_SIZE_TX];
int txCount=0; int txCount=0;
#endif #endif
@ -84,7 +84,7 @@ static void AudioEvent (uint32_t event) {
if (event & AUDIO_DRV_EVENT_RX_DATA) if (event & AUDIO_DRV_EVENT_RX_DATA)
{ {
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
memcpy(reservedBufRX,dmaRX,RING_BUFSIZE_RX); memcpy(reservedBufRX,dmaRX,RING_BUFSIZE_RX);
(void)AudioDrv_Control(AUDIO_DRV_CONTROL_RX_DISABLE); (void)AudioDrv_Control(AUDIO_DRV_CONTROL_RX_DISABLE);
(void)AudioDrv_Control(AUDIO_DRV_CONTROL_TX_ENABLE); (void)AudioDrv_Control(AUDIO_DRV_CONTROL_TX_ENABLE);
@ -99,7 +99,7 @@ static void AudioEvent (uint32_t event) {
#if AUDIO_DRV_TX_ENABLED #if AUDIO_DRV_TX_ENABLED
if (event & AUDIO_DRV_EVENT_TX_DATA) if (event & AUDIO_DRV_EVENT_TX_DATA)
{ {
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
memcpy(dmaTX,reservedBufTX,RING_BUFSIZE_TX); memcpy(dmaTX,reservedBufTX,RING_BUFSIZE_TX);
(void)AudioDrv_Control(AUDIO_DRV_CONTROL_TX_DISABLE); (void)AudioDrv_Control(AUDIO_DRV_CONTROL_TX_DISABLE);
(void)AudioDrv_Control(AUDIO_DRV_CONTROL_RX_ENABLE); (void)AudioDrv_Control(AUDIO_DRV_CONTROL_RX_ENABLE);
@ -135,7 +135,7 @@ int32_t AudioDrv_Setup(void) {
int reservedRX=ringInterruptReserveBuffer(&ringConfigRX); int reservedRX=ringInterruptReserveBuffer(&ringConfigRX);
reservedBufRX=ringGetBufferAddress(&ringConfigRX,reservedRX); reservedBufRX=ringGetBufferAddress(&ringConfigRX,reservedRX);
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
ret = AudioDrv_SetBuf(AUDIO_DRV_INTERFACE_RX, ret = AudioDrv_SetBuf(AUDIO_DRV_INTERFACE_RX,
dmaRX, 1,AUDIO_BLOCK_SIZE_RX); dmaRX, 1,AUDIO_BLOCK_SIZE_RX);
#else #else
@ -146,7 +146,7 @@ int32_t AudioDrv_Setup(void) {
return ret; return ret;
} }
#if !SDF_VHT_TX_RX_ORDERING #if !CGSTATIC_VHT_TX_RX_ORDERING
ret = AudioDrv_Control(AUDIO_DRV_CONTROL_RX_ENABLE); ret = AudioDrv_Control(AUDIO_DRV_CONTROL_RX_ENABLE);
if (ret != 0) { if (ret != 0) {
return ret; return ret;
@ -177,7 +177,7 @@ int32_t AudioDrv_Setup(void) {
int reservedTX=ringInterruptReserveBuffer(&ringConfigTX); int reservedTX=ringInterruptReserveBuffer(&ringConfigTX);
reservedBufTX=ringGetBufferAddress(&ringConfigTX,reservedTX); reservedBufTX=ringGetBufferAddress(&ringConfigTX,reservedTX);
#if SDF_VHT_TX_RX_ORDERING #if CGSTATIC_VHT_TX_RX_ORDERING
ret = AudioDrv_SetBuf(AUDIO_DRV_INTERFACE_TX, ret = AudioDrv_SetBuf(AUDIO_DRV_INTERFACE_TX,
dmaTX, 1 ,AUDIO_BLOCK_SIZE_TX); dmaTX, 1 ,AUDIO_BLOCK_SIZE_TX);
#else #else

@ -1,7 +1,7 @@
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
* Project: CMSIS DSP Library * Project: CMSIS DSP Library
* Title: Sched.h * Title: Sched.h
* Description: C++ support templates for the SDF scheduler * Description: C++ support templates for the compute graph with static scheduler
* *
* $Date: 29 July 2021 * $Date: 29 July 2021
* $Revision: V1.10.0 * $Revision: V1.10.0
@ -383,7 +383,7 @@ public:
}; };
#if !defined(CHECKERROR) #if !defined(CHECKERROR)
#define CHECKERROR if (sdfError < 0) \ #define CHECKERROR if (cgStaticError < 0) \
{\ {\
break;\ break;\
} }

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

@ -26,13 +26,13 @@ function(sdf TARGET)
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/generated/scheduler.cpp) target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/generated/scheduler.cpp)
endfunction() endfunction()
set(SDFDIR ${CMAKE_CURRENT_SOURCE_DIR}/../sdf) set(CGSTATICDIR ${CMAKE_CURRENT_SOURCE_DIR}/../cg/static)
set(DSP ${CMAKE_CURRENT_SOURCE_DIR}/../..) set(DSP ${CMAKE_CURRENT_SOURCE_DIR}/../..)
function(add_sdf_dir TARGET) function(add_sdf_dir TARGET)
target_include_directories(${TARGET} PRIVATE ${SDFDIR}/src) target_include_directories(${TARGET} PRIVATE ${CGSTATICDIR}/src)
target_include_directories(${TARGET} PRIVATE ${SDFDIR}/nodes/cpp) target_include_directories(${TARGET} PRIVATE ${CGSTATICDIR}/nodes/cpp)
target_include_directories(${TARGET} PRIVATE ${CMSISCORE}) target_include_directories(${TARGET} PRIVATE ${CMSISCORE})
target_include_directories(${TARGET} PRIVATE ${DSP}/Include) target_include_directories(${TARGET} PRIVATE ${DSP}/Include)
endfunction() endfunction()

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.
@ -31,7 +31,7 @@ float32_t buf1[BUFFERSIZE1]={0};
uint32_t scheduler(int *error,int someVariable) uint32_t scheduler(int *error,int someVariable)
{ {
int sdfError=0; int cgStaticError=0;
uint32_t nbSchedule=0; uint32_t nbSchedule=0;
int32_t debugCounter=1; int32_t debugCounter=1;
@ -49,47 +49,47 @@ uint32_t scheduler(int *error,int someVariable)
Source<float32_t,5> source(fifo0); Source<float32_t,5> source(fifo0);
/* Run several schedule iterations */ /* Run several schedule iterations */
while((sdfError==0) && (debugCounter > 0)) while((cgStaticError==0) && (debugCounter > 0))
{ {
/* Run a schedule iteration */ /* Run a schedule iteration */
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = filter.run(); cgStaticError = filter.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = filter.run(); cgStaticError = filter.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = filter.run(); cgStaticError = filter.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = filter.run(); cgStaticError = filter.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = source.run(); cgStaticError = source.run();
CHECKERROR; CHECKERROR;
sdfError = filter.run(); cgStaticError = filter.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
debugCounter--; debugCounter--;
nbSchedule++; nbSchedule++;
} }
*error=sdfError; *error=cgStaticError;
return(nbSchedule); return(nbSchedule);
} }

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.

@ -1,4 +1,4 @@
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
### Define new types of Nodes ### Define new types of Nodes

@ -1,6 +1,7 @@
digraph structs { digraph structs {
node [shape=plaintext] node [shape=plaintext]
rankdir=LR rankdir=LR
@ -31,17 +32,17 @@ source [label=<
source:i -> filter:i [headlabel=< source:i -> filter:i [label="f32(11)"
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >7</FONT> ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >7</FONT>
</TD></TR></TABLE>>,taillabel=< </TD></TR></TABLE>>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT> ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT>
</TD></TR></TABLE>>,label="f32(11)"] </TD></TR></TABLE>>]
filter:i -> sink:i [headlabel=< filter:i -> sink:i [label="f32(5)"
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT> ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT>
</TD></TR></TABLE>>,taillabel=< </TD></TR></TABLE>>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT> ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >5</FONT>
</TD></TR></TABLE>>,label="f32(5)"] </TD></TR></TABLE>>]
} }

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.

@ -1,4 +1,4 @@
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
AUDIO_INTERRUPT_LENGTH = 160 AUDIO_INTERRUPT_LENGTH = 160

@ -1,6 +1,7 @@
digraph structs { digraph structs {
node [shape=plaintext] node [shape=plaintext]
rankdir=LR rankdir=LR
@ -116,62 +117,61 @@ srcDelay [label=<
</TABLE>>]; </TABLE>>];
src:i -> srcDelay:i [taillabel=< src:i -> srcDelay:i [label="",taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT> </TD></TR></TABLE>>]
srcDelay:i -> toMono:i [label="f32(330)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT>
</TD></TR></TABLE>>]
toMono:o1 -> arm_scale_f321:ia [label="f32(160)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>]
toMono:o2 -> arm_scale_f322:ia [label="f32(160)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>]
arm_scale_f321:o -> arm_add_f321:ia [label="f32(160)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>] </TD></TR></TABLE>>]
srcDelay:i -> toMono:i [headlabel=< arm_scale_f322:o -> arm_add_f321:ib [label="f32(160)"
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT> ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>,label="f32(330)"] </TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>]
toMono:o1 -> arm_scale_f321:ia [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> arm_add_f321:o -> audioWin:i [label="f32(320)"
</TD></TR></TABLE>>,taillabel=< ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> </TD></TR></TABLE>>
</TD></TR></TABLE>>,label="f32(160)"] ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>]
toMono:o2 -> arm_scale_f322:ia [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> audioWin:i -> mfcc:i [label="f32(640)"
</TD></TR></TABLE>>,taillabel=< ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >640</FONT>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> </TD></TR></TABLE>>
</TD></TR></TABLE>>,label="f32(160)"] ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >640</FONT>
</TD></TR></TABLE>>]
arm_scale_f321:o -> arm_add_f321:ia [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> mfcc:i -> mfccWind:i [label="f32(250)"
</TD></TR></TABLE>>,taillabel=< ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >250</FONT>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> </TD></TR></TABLE>>
</TD></TR></TABLE>>,label="f32(160)"] ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >10</FONT>
</TD></TR></TABLE>>]
arm_scale_f322:o -> arm_add_f321:ib [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> mfccWind:i -> TFLite:i [label="f32(500)"
</TD></TR></TABLE>>,taillabel=< ,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >500</FONT>
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT> </TD></TR></TABLE>>
</TD></TR></TABLE>>,label="f32(160)"] ,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >500</FONT>
</TD></TR></TABLE>>]
arm_add_f321:o -> audioWin:i [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >320</FONT>
</TD></TR></TABLE>>,taillabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >160</FONT>
</TD></TR></TABLE>>,label="f32(320)"]
audioWin:i -> mfcc:i [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >640</FONT>
</TD></TR></TABLE>>,taillabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >640</FONT>
</TD></TR></TABLE>>,label="f32(640)"]
mfcc:i -> mfccWind:i [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >250</FONT>
</TD></TR></TABLE>>,taillabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >10</FONT>
</TD></TR></TABLE>>,label="f32(250)"]
mfccWind:i -> TFLite:i [headlabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >500</FONT>
</TD></TR></TABLE>>,taillabel=<
<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >500</FONT>
</TD></TR></TABLE>>,label="f32(500)"]
HALF [label=< HALF [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.
@ -55,7 +55,7 @@ float32_t buf7[BUFFERSIZE7]={0};
uint32_t scheduler(int *error) uint32_t scheduler(int *error)
{ {
int sdfError=0; int cgStaticError=0;
uint32_t nbSchedule=0; uint32_t nbSchedule=0;
int32_t debugCounter=40; int32_t debugCounter=40;
@ -84,12 +84,12 @@ uint32_t scheduler(int *error)
ToReal<float32_t,512,float32_t,256> toReal(fifo5,fifo6); ToReal<float32_t,512,float32_t,256> toReal(fifo5,fifo6);
/* Run several schedule iterations */ /* Run several schedule iterations */
while((sdfError==0) && (debugCounter > 0)) while((cgStaticError==0) && (debugCounter > 0))
{ {
/* Run a schedule iteration */ /* Run a schedule iteration */
sdfError = src.run(); cgStaticError = src.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
{ {
float32_t* i0; float32_t* i0;
@ -97,22 +97,22 @@ uint32_t scheduler(int *error)
i0=fifo1.getReadBuffer(256); i0=fifo1.getReadBuffer(256);
o2=fifo2.getWriteBuffer(256); o2=fifo2.getWriteBuffer(256);
arm_mult_f32(i0,HANN,o2,256); arm_mult_f32(i0,HANN,o2,256);
sdfError = 0; cgStaticError = 0;
} }
CHECKERROR; CHECKERROR;
sdfError = toCmplx.run(); cgStaticError = toCmplx.run();
CHECKERROR; CHECKERROR;
sdfError = cfft.run(); cgStaticError = cfft.run();
CHECKERROR; CHECKERROR;
sdfError = icfft.run(); cgStaticError = icfft.run();
CHECKERROR; CHECKERROR;
sdfError = toReal.run(); cgStaticError = toReal.run();
CHECKERROR; CHECKERROR;
sdfError = audioOverlap.run(); cgStaticError = audioOverlap.run();
CHECKERROR; CHECKERROR;
sdfError = src.run(); cgStaticError = src.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
{ {
float32_t* i0; float32_t* i0;
@ -120,18 +120,18 @@ uint32_t scheduler(int *error)
i0=fifo1.getReadBuffer(256); i0=fifo1.getReadBuffer(256);
o2=fifo2.getWriteBuffer(256); o2=fifo2.getWriteBuffer(256);
arm_mult_f32(i0,HANN,o2,256); arm_mult_f32(i0,HANN,o2,256);
sdfError = 0; cgStaticError = 0;
} }
CHECKERROR; CHECKERROR;
sdfError = toCmplx.run(); cgStaticError = toCmplx.run();
CHECKERROR; CHECKERROR;
sdfError = cfft.run(); cgStaticError = cfft.run();
CHECKERROR; CHECKERROR;
sdfError = icfft.run(); cgStaticError = icfft.run();
CHECKERROR; CHECKERROR;
sdfError = toReal.run(); cgStaticError = toReal.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
{ {
float32_t* i0; float32_t* i0;
@ -139,29 +139,29 @@ uint32_t scheduler(int *error)
i0=fifo1.getReadBuffer(256); i0=fifo1.getReadBuffer(256);
o2=fifo2.getWriteBuffer(256); o2=fifo2.getWriteBuffer(256);
arm_mult_f32(i0,HANN,o2,256); arm_mult_f32(i0,HANN,o2,256);
sdfError = 0; cgStaticError = 0;
} }
CHECKERROR; CHECKERROR;
sdfError = toCmplx.run(); cgStaticError = toCmplx.run();
CHECKERROR; CHECKERROR;
sdfError = cfft.run(); cgStaticError = cfft.run();
CHECKERROR; CHECKERROR;
sdfError = icfft.run(); cgStaticError = icfft.run();
CHECKERROR; CHECKERROR;
sdfError = audioOverlap.run(); cgStaticError = audioOverlap.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = toReal.run(); cgStaticError = toReal.run();
CHECKERROR; CHECKERROR;
sdfError = audioOverlap.run(); cgStaticError = audioOverlap.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
debugCounter--; debugCounter--;
nbSchedule++; nbSchedule++;
} }
*error=sdfError; *error=cgStaticError;
return(nbSchedule); return(nbSchedule);
} }

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.

@ -1,6 +1,6 @@
import numpy as np import numpy as np
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
FS=16000 FS=16000

@ -0,0 +1,143 @@
digraph structs {
node [shape=plaintext]
rankdir=LR
edge [arrowsize=0.5]
fontname="times"
arm_mult_f321 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD PORT="ia"><FONT POINT-SIZE="9.0">ia</FONT></TD>
<TD ALIGN="CENTER" ROWSPAN="2">arm_mult_f32<BR/>(CMSIS-DSP)</TD>
<TD PORT="o"><FONT POINT-SIZE="9.0">o</FONT></TD>
</TR>
<TR>
<TD PORT="ib"><FONT POINT-SIZE="9.0">ib</FONT></TD>
<TD></TD></TR>
</TABLE>>];
audioOverlap [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">audioOverlap<BR/>(OverlapAdd)</TD>
</TR>
</TABLE>>];
audioWin [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">audioWin<BR/>(SlidingBuffer)</TD>
</TR>
</TABLE>>];
cfft [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">cfft<BR/>(CFFT)</TD>
</TR>
</TABLE>>];
icfft [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">icfft<BR/>(ICFFT)</TD>
</TR>
</TABLE>>];
sink [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">sink<BR/>(FileSink)</TD>
</TR>
</TABLE>>];
src [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">src<BR/>(FileSource)</TD>
</TR>
</TABLE>>];
toCmplx [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">toCmplx<BR/>(ToComplex)</TD>
</TR>
</TABLE>>];
toReal [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">toReal<BR/>(ToReal)</TD>
</TR>
</TABLE>>];
src:i -> audioWin:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >128</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >192</FONT>
</TD></TR></TABLE>>]
audioWin:i -> arm_mult_f321:ia [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
arm_mult_f321:o -> toCmplx:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
toCmplx:i -> cfft:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
cfft:i -> icfft:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
icfft:i -> toReal:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
toReal:i -> audioOverlap:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
audioOverlap:i -> sink:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >192</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >128</FONT>
</TD></TR></TABLE>>]
HANN [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">HANN</TD>
</TR>
</TABLE>>];
HANN:i -> arm_mult_f321:ib
}

@ -25,12 +25,12 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
############################################ ############################################
from cmsisdsp.sdf.nodes.simu import * from cmsisdsp.cg.static.nodes.simu import *
from custom import * from custom import *
from cmsisdsp.sdf.nodes.host.FileSink import * from cmsisdsp.cg.static.nodes.host.FileSink import *
from cmsisdsp.sdf.nodes.host.FileSource import * from cmsisdsp.cg.static.nodes.host.FileSource import *
from cmsisdsp.sdf.nodes.CFFT import * from cmsisdsp.cg.static.nodes.CFFT import *
from cmsisdsp.sdf.nodes.ICFFT import * from cmsisdsp.cg.static.nodes.ICFFT import *
from cmsisdsp.sdf.nodes.ToComplex import * from cmsisdsp.cg.static.nodes.ToComplex import *
from cmsisdsp.sdf.nodes.ToReal import * from cmsisdsp.cg.static.nodes.ToReal import *

@ -1,6 +1,6 @@
import numpy as np import numpy as np
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
FS=16000 FS=16000

@ -1,5 +1,5 @@
# #
# Generated with CMSIS-DSP SDF Scripts. # Generated with CMSIS-DSP Compute Graph Scripts.
# The generated code is not covered by CMSIS-DSP license. # The generated code is not covered by CMSIS-DSP license.
# #
# The support classes and code is covered by CMSIS-DSP license. # The support classes and code is covered by CMSIS-DSP license.
@ -10,7 +10,7 @@ import sys
import numpy as np import numpy as np
import cmsisdsp as dsp import cmsisdsp as dsp
from cmsisdsp.sdf.nodes.simu import * from cmsisdsp.cg.static.nodes.simu import *
from appnodes import * from appnodes import *
from custom import * from custom import *
@ -71,7 +71,7 @@ for i in range(FIFOSIZE7):
def scheduler(dispbuf): def scheduler(dispbuf):
sdfError=0 cgStaticError=0
nbSchedule=0 nbSchedule=0
debugCounter=42 debugCounter=42
@ -99,99 +99,99 @@ def scheduler(dispbuf):
toCmplx = ToComplex(256,512,fifo2,fifo3) toCmplx = ToComplex(256,512,fifo2,fifo3)
toReal = ToReal(512,256,fifo5,fifo6) toReal = ToReal(512,256,fifo5,fifo6)
while((sdfError==0) and (debugCounter > 0)): while((cgStaticError==0) and (debugCounter > 0)):
nbSchedule = nbSchedule + 1 nbSchedule = nbSchedule + 1
sdfError = src.run() cgStaticError = src.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioWin.run() cgStaticError = audioWin.run()
if sdfError < 0: if cgStaticError < 0:
break break
i0=fifo1.getReadBuffer(256) i0=fifo1.getReadBuffer(256)
o2=fifo2.getWriteBuffer(256) o2=fifo2.getWriteBuffer(256)
o2[:]=dsp.arm_mult_f32(i0,HANN) o2[:]=dsp.arm_mult_f32(i0,HANN)
sdfError = 0 cgStaticError = 0
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toCmplx.run() cgStaticError = toCmplx.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = cfft.run() cgStaticError = cfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = icfft.run() cgStaticError = icfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toReal.run() cgStaticError = toReal.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioOverlap.run() cgStaticError = audioOverlap.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = src.run() cgStaticError = src.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioWin.run() cgStaticError = audioWin.run()
if sdfError < 0: if cgStaticError < 0:
break break
i0=fifo1.getReadBuffer(256) i0=fifo1.getReadBuffer(256)
o2=fifo2.getWriteBuffer(256) o2=fifo2.getWriteBuffer(256)
o2[:]=dsp.arm_mult_f32(i0,HANN) o2[:]=dsp.arm_mult_f32(i0,HANN)
sdfError = 0 cgStaticError = 0
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toCmplx.run() cgStaticError = toCmplx.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = cfft.run() cgStaticError = cfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = icfft.run() cgStaticError = icfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toReal.run() cgStaticError = toReal.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioWin.run() cgStaticError = audioWin.run()
if sdfError < 0: if cgStaticError < 0:
break break
i0=fifo1.getReadBuffer(256) i0=fifo1.getReadBuffer(256)
o2=fifo2.getWriteBuffer(256) o2=fifo2.getWriteBuffer(256)
o2[:]=dsp.arm_mult_f32(i0,HANN) o2[:]=dsp.arm_mult_f32(i0,HANN)
sdfError = 0 cgStaticError = 0
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toCmplx.run() cgStaticError = toCmplx.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = cfft.run() cgStaticError = cfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = icfft.run() cgStaticError = icfft.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioOverlap.run() cgStaticError = audioOverlap.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = sink.run() cgStaticError = sink.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = toReal.run() cgStaticError = toReal.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = audioOverlap.run() cgStaticError = audioOverlap.run()
if sdfError < 0: if cgStaticError < 0:
break break
sdfError = sink.run() cgStaticError = sink.run()
if sdfError < 0: if cgStaticError < 0:
break break
debugCounter = debugCounter - 1 debugCounter = debugCounter - 1
return(nbSchedule,sdfError) return(nbSchedule,cgStaticError)

@ -0,0 +1,143 @@
digraph structs {
node [shape=plaintext]
rankdir=LR
edge [arrowsize=0.5]
fontname="times"
arm_mult_f321 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD PORT="ia"><FONT POINT-SIZE="9.0">ia</FONT></TD>
<TD ALIGN="CENTER" ROWSPAN="2">arm_mult_f32<BR/>(CMSIS-DSP)</TD>
<TD PORT="o"><FONT POINT-SIZE="9.0">o</FONT></TD>
</TR>
<TR>
<TD PORT="ib"><FONT POINT-SIZE="9.0">ib</FONT></TD>
<TD></TD></TR>
</TABLE>>];
audioOverlap [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">audioOverlap<BR/>(OverlapAdd)</TD>
</TR>
</TABLE>>];
audioWin [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">audioWin<BR/>(SlidingBuffer)</TD>
</TR>
</TABLE>>];
cfft [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">cfft<BR/>(CFFT)</TD>
</TR>
</TABLE>>];
icfft [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">icfft<BR/>(ICFFT)</TD>
</TR>
</TABLE>>];
sink [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">sink<BR/>(FileSink)</TD>
</TR>
</TABLE>>];
src [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">src<BR/>(FileSource)</TD>
</TR>
</TABLE>>];
toCmplx [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">toCmplx<BR/>(ToComplex)</TD>
</TR>
</TABLE>>];
toReal [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">toReal<BR/>(ToReal)</TD>
</TR>
</TABLE>>];
src:i -> audioWin:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >128</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >192</FONT>
</TD></TR></TABLE>>]
audioWin:i -> arm_mult_f321:ia [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
arm_mult_f321:o -> toCmplx:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
toCmplx:i -> cfft:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
cfft:i -> icfft:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
icfft:i -> toReal:i [label="f32(512)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >512</FONT>
</TD></TR></TABLE>>]
toReal:i -> audioOverlap:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >256</FONT>
</TD></TR></TABLE>>]
audioOverlap:i -> sink:i [label="f32(256)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >192</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >128</FONT>
</TD></TR></TABLE>>]
HANN [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">HANN</TD>
</TR>
</TABLE>>];
HANN:i -> arm_mult_f321:ib
}

@ -25,16 +25,16 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
############################################ ############################################
from cmsisdsp.sdf.nodes.simu import * from cmsisdsp.cg.static.nodes.simu import *
from custom import * from custom import *
# Host only nodes # Host only nodes
from cmsisdsp.sdf.nodes.host.NumpySink import * from cmsisdsp.cg.static.nodes.host.NumpySink import *
from cmsisdsp.sdf.nodes.host.WavSource import * from cmsisdsp.cg.static.nodes.host.WavSource import *
# Embedded nodes # Embedded nodes
from cmsisdsp.sdf.nodes.StereoToMono import * from cmsisdsp.cg.static.nodes.StereoToMono import *
from cmsisdsp.sdf.nodes.MFCC import * from cmsisdsp.cg.static.nodes.MFCC import *

@ -1,6 +1,6 @@
import numpy as np import numpy as np
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
from sharedconfig import * from sharedconfig import *

@ -0,0 +1,960 @@
#
# Generated with CMSIS-DSP Compute Graph Scripts.
# The generated code is not covered by CMSIS-DSP license.
#
# The support classes and code is covered by CMSIS-DSP license.
#
import sys
import numpy as np
import cmsisdsp as dsp
from cmsisdsp.cg.static.nodes.simu import *
from appnodes import *
from custom import *
DEBUGSCHED=False
#
# FIFO buffers
#
FIFOSIZE0=384
buf0=np.empty(FIFOSIZE0,dtype=np.int16)
for i in range(FIFOSIZE0):
buf0[i] = 0
FIFOSIZE1=768
buf1=np.empty(FIFOSIZE1,dtype=np.int16)
for i in range(FIFOSIZE1):
buf1[i] = 0
FIFOSIZE2=1024
buf2=np.empty(FIFOSIZE2,dtype=np.int16)
for i in range(FIFOSIZE2):
buf2[i] = 0
FIFOSIZE3=377
buf3=np.empty(FIFOSIZE3,dtype=np.int16)
for i in range(FIFOSIZE3):
buf3[i] = 0
FIFOSIZE4=754
buf4=np.empty(FIFOSIZE4,dtype=np.int16)
for i in range(FIFOSIZE4):
buf4[i] = 0
def scheduler(mfccConfig,dispbuf):
cgStaticError=0
nbSchedule=0
debugCounter=12
#
# Create FIFOs objects
#
fifo0=FIFO(FIFOSIZE0,buf0)
fifo1=FIFO(FIFOSIZE1,buf1)
fifo2=FIFO(FIFOSIZE2,buf2)
fifo3=FIFO(FIFOSIZE3,buf3)
fifo4=FIFO(FIFOSIZE4,buf4)
#
# Create node objects
#
audioWin = SlidingBuffer(1024,256,fifo1,fifo2)
mfcc = MFCC(1024,13,fifo2,fifo3,mfccConfig)
mfccWin = SlidingBuffer(754,377,fifo3,fifo4)
sink = NumpySink(754,fifo4,dispbuf)
src = WavSource(384,fifo0,True,"test_stereo.wav")
toMono = StereoToMono(384,192,fifo0,fifo1)
while((cgStaticError==0) and (debugCounter > 0)):
nbSchedule = nbSchedule + 1
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = src.run()
if cgStaticError < 0:
break
cgStaticError = toMono.run()
if cgStaticError < 0:
break
cgStaticError = audioWin.run()
if cgStaticError < 0:
break
cgStaticError = mfcc.run()
if cgStaticError < 0:
break
cgStaticError = mfccWin.run()
if cgStaticError < 0:
break
cgStaticError = sink.run()
if cgStaticError < 0:
break
debugCounter = debugCounter - 1
return(nbSchedule,cgStaticError)

@ -0,0 +1,87 @@
digraph structs {
node [shape=plaintext]
rankdir=LR
edge [arrowsize=0.5]
fontname="times"
audioWin [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">audioWin<BR/>(SlidingBuffer)</TD>
</TR>
</TABLE>>];
mfcc [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">mfcc<BR/>(MFCC)</TD>
</TR>
</TABLE>>];
mfccWin [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">mfccWin<BR/>(SlidingBuffer)</TD>
</TR>
</TABLE>>];
sink [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">sink<BR/>(NumpySink)</TD>
</TR>
</TABLE>>];
src [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">src<BR/>(WavSource)</TD>
</TR>
</TABLE>>];
toMono [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="CENTER" PORT="i">toMono<BR/>(StereoToMono)</TD>
</TR>
</TABLE>>];
src:i -> toMono:i [label="q15(384)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >384</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >384</FONT>
</TD></TR></TABLE>>]
toMono:i -> audioWin:i [label="q15(768)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >768</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >192</FONT>
</TD></TR></TABLE>>]
audioWin:i -> mfcc:i [label="q15(1024)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >1024</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >1024</FONT>
</TD></TR></TABLE>>]
mfcc:i -> mfccWin:i [label="q15(377)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >377</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >13</FONT>
</TD></TR></TABLE>>]
mfccWin:i -> sink:i [label="q15(754)"
,headlabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >754</FONT>
</TD></TR></TABLE>>
,taillabel=<<TABLE BORDER="0" CELLPADDING="2"><TR><TD><FONT COLOR="blue" POINT-SIZE="12.0" >754</FONT>
</TD></TR></TABLE>>]
}

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.
@ -39,7 +39,7 @@ float32_t buf3[BUFFERSIZE3]={0};
uint32_t scheduler(int *error,arm_mfcc_instance_f32 *mfccConfig) uint32_t scheduler(int *error,arm_mfcc_instance_f32 *mfccConfig)
{ {
int sdfError=0; int cgStaticError=0;
uint32_t nbSchedule=0; uint32_t nbSchedule=0;
int32_t debugCounter=1; int32_t debugCounter=1;
@ -61,47 +61,47 @@ uint32_t scheduler(int *error,arm_mfcc_instance_f32 *mfccConfig)
FileSource<float32_t,192> src(fifo0,"input_example6.txt"); FileSource<float32_t,192> src(fifo0,"input_example6.txt");
/* Run several schedule iterations */ /* Run several schedule iterations */
while((sdfError==0) && (debugCounter > 0)) while((cgStaticError==0) && (debugCounter > 0))
{ {
/* Run a schedule iteration */ /* Run a schedule iteration */
sdfError = src.run(); cgStaticError = src.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
sdfError = mfcc.run(); cgStaticError = mfcc.run();
CHECKERROR; CHECKERROR;
sdfError = mfccWin.run(); cgStaticError = mfccWin.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = src.run(); cgStaticError = src.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
sdfError = mfcc.run(); cgStaticError = mfcc.run();
CHECKERROR; CHECKERROR;
sdfError = mfccWin.run(); cgStaticError = mfccWin.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = audioWin.run(); cgStaticError = audioWin.run();
CHECKERROR; CHECKERROR;
sdfError = mfcc.run(); cgStaticError = mfcc.run();
CHECKERROR; CHECKERROR;
sdfError = mfccWin.run(); cgStaticError = mfccWin.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
sdfError = sink.run(); cgStaticError = sink.run();
CHECKERROR; CHECKERROR;
debugCounter--; debugCounter--;
nbSchedule++; nbSchedule++;
} }
*error=sdfError; *error=cgStaticError;
return(nbSchedule); return(nbSchedule);
} }

@ -1,6 +1,6 @@
/* /*
Generated with CMSIS-DSP SDF Scripts. Generated with CMSIS-DSP Compute Graph Scripts.
The generated code is not covered by CMSIS-DSP license. The generated code is not covered by CMSIS-DSP license.
The support classes and code is covered by CMSIS-DSP license. The support classes and code is covered by CMSIS-DSP license.

@ -1,6 +1,6 @@
import numpy as np import numpy as np
from cmsisdsp.sdf.scheduler import * from cmsisdsp.cg.static.scheduler import *
from sharedconfig import * from sharedconfig import *

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save