@@ -303,6 +303,164 @@ TF_LITE_MICRO_TEST(RfftTestSize512Int32) {
303303 g_gen_data_size_fft_length_512_int32, output, 0 ));
304304}
305305
306+ TF_LITE_MICRO_TEST (IrfftTestLength64Float) {
307+ constexpr int kOutputLen = 64 ;
308+ int input_shape[] = {1 , 66 };
309+ const float input[] = {256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
310+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
311+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
312+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
313+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 };
314+ int output_shape[] = {1 , kOutputLen };
315+ const float golden[] = {256 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
316+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
317+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
318+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
319+ float output[kOutputLen ];
320+ const TFLMRegistration* registration =
321+ tflite::tflm_signal::Register_IRFFT_FLOAT ();
322+ TF_LITE_MICRO_EXPECT_EQ (
323+ kTfLiteOk , tflite::testing::TestFFT<float >(
324+ input_shape, input, output_shape, golden, *registration,
325+ g_gen_data_fft_length_64_float,
326+ g_gen_data_size_fft_length_64_int16, output, 1e-7 ));
327+ }
328+
329+ TF_LITE_MICRO_TEST (IrfftTestLength64Int16) {
330+ constexpr int kOutputLen = 64 ;
331+ int input_shape[] = {1 , 66 };
332+ const int16_t input[] = {
333+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
334+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
335+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
336+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 };
337+ int output_shape[] = {1 , kOutputLen };
338+ const int16_t golden[] = {256 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
339+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
340+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
341+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
342+ int16_t output[kOutputLen ];
343+ const TFLMRegistration* registration =
344+ tflite::tflm_signal::Register_IRFFT_INT16 ();
345+ TF_LITE_MICRO_EXPECT_EQ (
346+ kTfLiteOk , tflite::testing::TestFFT<int16_t >(
347+ input_shape, input, output_shape, golden, *registration,
348+ g_gen_data_fft_length_64_int16,
349+ g_gen_data_size_fft_length_64_int16, output, 0 ));
350+ }
351+
352+ TF_LITE_MICRO_TEST (IrfftTestLength64Int32) {
353+ constexpr int kOutputLen = 64 ;
354+ int input_shape[] = {1 , 66 };
355+ const int32_t input[] = {
356+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
357+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
358+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
359+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 };
360+ int output_shape[] = {1 , kOutputLen };
361+ const int32_t golden[] = {256 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
362+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
363+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
364+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
365+ int32_t output[kOutputLen ];
366+ const TFLMRegistration* registration =
367+ tflite::tflm_signal::Register_IRFFT_INT32 ();
368+ TF_LITE_MICRO_EXPECT_EQ (
369+ kTfLiteOk , tflite::testing::TestFFT<int32_t >(
370+ input_shape, input, output_shape, golden, *registration,
371+ g_gen_data_fft_length_64_int32,
372+ g_gen_data_size_fft_length_64_int32, output, 0 ));
373+ }
374+
375+ TF_LITE_MICRO_TEST (IrfftTestLength64Int32OuterDims4) {
376+ constexpr int kOutputLen = 64 ;
377+ constexpr int kOuterDim = 2 ;
378+ int input_shape[] = {3 , kOuterDim , kOuterDim , 66 };
379+ const int32_t input[] = {
380+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
381+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
382+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
383+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
384+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
385+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
386+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
387+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
388+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
389+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
390+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
391+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
392+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
393+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 ,
394+ 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 , 256 , 0 };
395+ int output_shape[] = {3 , kOuterDim , kOuterDim , kOutputLen };
396+ const int32_t golden[] = {
397+ 256 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
398+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
399+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 256 , 0 ,
400+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
401+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
402+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 256 , 0 , 0 , 0 ,
403+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
404+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
405+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 256 , 0 , 0 , 0 , 0 , 0 ,
406+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
407+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
408+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
409+ int32_t output[kOuterDim * kOuterDim * kOutputLen ];
410+ const TFLMRegistration* registration =
411+ tflite::tflm_signal::Register_IRFFT_INT32 ();
412+ TF_LITE_MICRO_EXPECT_EQ (
413+ kTfLiteOk , tflite::testing::TestFFT<int32_t >(
414+ input_shape, input, output_shape, golden, *registration,
415+ g_gen_data_fft_length_64_int32,
416+ g_gen_data_size_fft_length_64_int32, output, 0 ));
417+ }
418+
419+ TF_LITE_MICRO_TEST (IrfftTestLength512Float) {
420+ constexpr int kOutputLen = 512 ;
421+ int input_shape[] = {1 , 514 };
422+ int output_shape[] = {1 , kOutputLen };
423+ float output[kOutputLen ];
424+ const TFLMRegistration* registration =
425+ tflite::tflm_signal::Register_IRFFT_FLOAT ();
426+ TF_LITE_MICRO_EXPECT_EQ (
427+ kTfLiteOk , tflite::testing::TestFFT<float >(
428+ input_shape, tflite::kIrfftFloatLength512Input ,
429+ output_shape, tflite::kIrfftFloatLength512Golden ,
430+ *registration, g_gen_data_fft_length_512_float,
431+ g_gen_data_size_fft_length_512_float, output, 1e-7 ));
432+ }
433+
434+ TF_LITE_MICRO_TEST (IrfftTestLength512Int16) {
435+ constexpr int kOutputLen = 512 ;
436+ int input_shape[] = {1 , 514 };
437+ int output_shape[] = {1 , kOutputLen };
438+ int16_t output[kOutputLen ];
439+ const TFLMRegistration* registration =
440+ tflite::tflm_signal::Register_IRFFT_INT16 ();
441+ TF_LITE_MICRO_EXPECT_EQ (kTfLiteOk ,
442+ tflite::testing::TestFFT<int16_t >(
443+ input_shape, tflite::kIrfftInt16Length512Input ,
444+ output_shape, tflite::kIrfftInt16Length512Golden ,
445+ *registration, g_gen_data_fft_length_512_int16,
446+ g_gen_data_size_fft_length_512_int16, output, 0 ));
447+ }
448+
449+ TF_LITE_MICRO_TEST (IrfftTestLength512Int32) {
450+ constexpr int kOutputLen = 512 ;
451+ int input_shape[] = {1 , 514 };
452+ int output_shape[] = {1 , kOutputLen };
453+ int32_t output[kOutputLen ];
454+ const TFLMRegistration* registration =
455+ tflite::tflm_signal::Register_IRFFT_INT32 ();
456+ TF_LITE_MICRO_EXPECT_EQ (kTfLiteOk ,
457+ tflite::testing::TestFFT<int32_t >(
458+ input_shape, tflite::kIrfftInt32Length512Input ,
459+ output_shape, tflite::kIrfftInt32Length512Golden ,
460+ *registration, g_gen_data_fft_length_512_int32,
461+ g_gen_data_size_fft_length_512_int32, output, 0 ));
462+ }
463+
306464TF_LITE_MICRO_TEST (FftAutoScaleTestSmall) {
307465 constexpr int kTensorsSize = 8 ;
308466 int shape[] = {1 , 8 };
0 commit comments