TMS320F28P550SJ: F28p55_generic_timeseries_anomalydetection

Part Number: TMS320F28P550SJ
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

I'm working through example project F28p55_generic_timeseries_anomalydetection and have run into two separate issues. Any confirmation/guidance on either would be appreciated.

1) Inference appears to be running on CPU, not NPU

My application does not call `TI_NPU_init()` before `tvmgen_default_run()`. I measured the duration of the `tvmgen_default_run()` call itself using a cycle counter around the call: it takes approximately 5,000,000 system cycles. At 150 MHz that's ~33.3 ms.

For a small autoencoder (100-sample input), this seems far too slow for genuine NPU-accelerated execution, and I suspect the model is actually executing as generated CPU C-code rather than being offloaded to the NPU peripheral.

Could someone confirm:
- Is `TI_NPU_init()` required for the generated model to actually dispatch to the NPU, or does `tvmgen_default_run()` handle NPU dispatch internally regardless?
- Is ~33 ms consistent with a CPU-only fallback for a model of this size, versus expected NPU execution time?
- How can I verify from the generated codegen output or build log whether the model was actually compiled/targeted for NPU vs CPU in C2000Ware 26.01.00.00?

2) Reconstruction error never drops below threshold

Setup: signal generated by an external AW Generator, sampled via ADC on a 100 Hz timer-triggered ISR, 100 samples per inference window, normalized to p.u. before feeding the model.

I first tried a 1 Hz input signal (100 samples = 1 full period), per my understanding of the example's documented assumption. Reconstruction error stayed above threshold. I verified my sampling ISR timing directly: 1,500,000 cycles between ISR entries at 150 MHz = exactly 10 ms = 100 Hz, so the sampling rate itself is correct.

I then compared my captured 100-sample ADC window against the project's own shipped golden test vector (`raw_input_test[100]` from the example's C test data). Zero-crossing and autocorrelation analysis of that golden vector shows a dominant period of ~10 samples, i.e. approximately 10 full cycles across the 100-sample window - not 1 cycle as I expected for a 1 Hz signal at 100 Hz sampling.

This suggests the model was actually trained assuming a ~10 Hz input signal (10 samples/cycle, 10 cycles/window) rather than 1 Hz. When I fed a 1 Hz signal, reconstruction error got worse; a signal closer to 10 Hz produced a closer (but still above-threshold) match to the golden vector shape.

Could TI confirm:
- What is the actual intended/trained input signal frequency for this example (1 Hz or 10 Hz at 100 Hz sampling)?
- Is there a documentation mismatch between the stated "1 Hz signal sampled at 100 Hz" assumption and the actual golden test vectors shipped with the example?
Used documentation:
(https://github.com/TexasInstruments/tinyml-tensorlab/tree/main/tinyml-modelzoo/examples/generic_timeseries_anomalydetection)

Thanks in advance.

Jozef