Syntiant TinyML NDP101 - I2S Microphone Quailty really bad after EI-Image update

After updating the TinyML NDP101 dev-board with EI model (firmware or syntiant library) the recording quality of the I2S microphone is really bad when using the board as microphone (connecting with serial + press “b” to stop inversion + plug in USB into PC) . Also - speech recognition rate is much below expectation.

I have two boards, where I tested USB microphone with initial firmware - and sound quality was really well. On both boards, after updating firmware with EI version - voice quality decreased. I can provide a wave file when needed.

Its sounds like I2S is not set-up correctly.I am not sure, how this can be - maybe when writing model files with ndp10x_flash is overwriting/changing some settings on the NDP101 (I think its directly connected to the microphone - not via the ARM)

My project: https://studio.edgeimpulse.com/studio/64744
Just for fun I document my work at: https://44-2.de/ :slight_smile:

Hi @Christian42,

Which OS are you using?
Also do you have audio issues with our default firmware or with the binary you’ve generated though the Studio?

Aurelien

Hi @aurel

Thx for your quick answer.

I am using Ubuntu 20.04.2 LTS (64bit).

I have issues with the downloaded binary (where using the flash script) and with the self build binary.

When the board was doing fine, it had the original firmware that was shipped with the device.
For the 2nd device I did a test:
a) Check voice quality with original syntiant binary
b) Downloaded pre-build binary from EI
-> scrambled voice.

If needed, I can send the recording.

Regards,
Christian

Hi @aurel
did you have some time to check my answer?

I learned from Syntiant that the flash information for the model also contains configuration parameters for the microphone - so it could be the case that some settings are different and result in bad sound quality.

With the current binary/library downloaded from EI - the sound quality is really bad and NDP 101 not use-able.

Is there anybody on the forum working with the Tiny ML Syntiant NDP 101 processor and has other experience? Any feedback is really welcome!

Christian

Hi @Christian42,

Sorry for the late reply. We’re looking into it with Syntiant as we notice a similar behavior on Linux OS (doesn’t happen on macOS or Windows), it is probably a driver issue with the newest library that is part of the generated firmware.
I’ll keep you posted on the investigation.

Aurelien

Hi @aurel,

thx for following up. Not sure if I understand:

I guess the firmware for the NDP101 processor itself (with model parameters and settings) is device independent. Its using a flash-program that is different per operating system (in the folder ndp10x_flash from downloaded image from EI). I tried flashing on Linux and Windows- both having the same bad result.

If you want me to try out or support - please let me know.

Regards,
Christian

Hi Christian,

You’re correct, the bin file for NDP101 processor is independent (it contains the NN weights and other parameters). The issue is with the Arduino firmware itself running on the SAMD21, we’re releasing a fix that should be in prod tomorrow.

Aurelien

1 Like

@Christian42,

The fix is live, let me know if things work on your side.

Aurelien

Hi @aurel,
thx a lot. Its working. Downloaded the image file and tested the microphone - perfect sound.

Still I see that the inference results on the device are behind from model testing.

Will start to experiment a bit now.

Also I realize about the NDP101:

  1. A lot of parameters are fixed( number of features=1600, and most of the log mel filterbank), so that takes away some opportunity on tuning.
  2. The only inference result that is available from the NDP is the matched index, no additional details (as the probability, confidence) seems to be available.

Especially on the 2nd - do you know there any way to get more information on the inference?

Again, thx for your follow up and have a great Christmas and New Year. Will be back on the 3rd.

Christian

Keep getting the error:

‘ndp10x_flash\ndp10x_flash.exe’ is not recognized as an internal or external command, operable program or batch file.

When trying to flash Arduino MKRZero on the Syntiant TinyML board (Windows OS). Could anyone help?

Hi, that issue seems not be to be related with your board as such - it seems that Windows does not find the path to the npd10x_flash.exe. If you look into the ndp10x_flash folder you should find that program. Did you install the Arduino-cli as recommended?

Thanks for the response. Yes I did install the cli and extracted it on Windows/Ssytem32/ directory.

Actually, when i look into npd10x_flash folder i see two files; ndp10x_flash and ndp10x_flash_mac but the ndp10x_flash.exe is not there!

Hi @Christian42,

As you mentioned the NDP101 has several fixed parameters due to the nature of the NN architecture.
Regarding inferencing results, class probability is not included as it’s part of the chip post parameters. By default those values are applied:

With the main parameters phwin and phth being: the min number of consecutive windows to detect a class (the chip runs inferencing 40 times a second), the min threshold/probability.

Aurelien

Hi @Safavi40,

I’ve double checked our deployment pipeline and the windows version is in the zip file. It could be that you have an antivirus software that puts the .exe in quarantine. Could you check on this side?

Aurelien