Skip to content

TESTS

tiny_view_test.h

/**
 * @file tiny_view_test.h
 * @author SHUAIWEN CUI (SHUAIWEN001@e.ntu.edu.sg)
 * @brief tiny_view | test | header
 * @version 1.0
 * @date 2025-04-29
 * @copyright Copyright (c) 2025
 *
 */

#pragma once

/* DEPENDENCIES */
#include "tiny_view.h"

#ifdef __cplusplus
extern "C"
{
#endif

void tiny_view_test(void);

#ifdef __cplusplus
}
#endif

tiny_view_test.c

/**
 * @file tiny_view_test.c
 * @author SHUAIWEN CUI (SHUAIWEN001@e.ntu.edu.sg)
 * @brief tiny_view | test | source
 * @version 1.0
 * @date 2025-04-29
 * @copyright Copyright (c) 2025
 *
 */

/* DEPENDENCIES */
#include "tiny_view_test.h"
#include <math.h>

/**
 * @brief Generate a test signal (sine wave with noise)
 */
static void generate_test_signal(float *signal, int len, float freq, float sample_rate)
{
    for (int i = 0; i < len; i++)
    {
        float t = (float)i / sample_rate;
        signal[i] = sinf(2.0f * M_PI * freq * t) + 0.1f * sinf(2.0f * M_PI * freq * 3.0f * t);
    }
}

void tiny_view_test(void)
{
    printf("========== TinyView Test ==========\n\n");

    const int signal_len = 64;
    const float sample_rate = 1000.0f;
    float signal[signal_len];

    // Generate test signal
    generate_test_signal(signal, signal_len, 10.0f, sample_rate);

    // Test 1: Signal visualization
    printf("Test 1: Signal Visualization\n");
    printf("  Input: Sine wave signal (length=%d)\n", signal_len);
    tiny_view_signal_f32(signal, signal_len, 64, 16, 0, 0, "Test Signal: 10 Hz Sine Wave");

    // Test 2: Array printing
    printf("Test 2: Array Printing\n");
    printf("  Input: Signal array (length=%d)\n", signal_len);
    tiny_view_array_f32(signal, signal_len, "Test Signal", 3, 8);

    // Test 3: Statistics
    printf("Test 3: Signal Statistics\n");
    printf("  Input: Signal array (length=%d)\n", signal_len);
    tiny_view_statistics_f32(signal, signal_len, "Test Signal");

    // Test 4: Power spectrum visualization
    printf("Test 4: Power Spectrum Visualization\n");
    printf("  Input: Simulated power spectrum (length=128)\n");
    float power_spectrum[128];
    for (int i = 0; i < 128; i++)
    {
        // Simulate power spectrum with peaks at 10 Hz and 30 Hz
        float freq = (float)i * sample_rate / 256.0f;
        if (fabsf(freq - 10.0f) < 2.0f)
        {
            power_spectrum[i] = 100.0f - fabsf(freq - 10.0f) * 10.0f;
        }
        else if (fabsf(freq - 30.0f) < 2.0f)
        {
            power_spectrum[i] = 50.0f - fabsf(freq - 30.0f) * 5.0f;
        }
        else
        {
            power_spectrum[i] = 1.0f + (float)(i % 5);
        }
    }
    tiny_view_spectrum_f32(power_spectrum, 128, sample_rate, "Power Spectrum: Peaks at 10 Hz and 30 Hz");

    printf("========================================\n");
}

TEST RESULTS

========== TinyView Test ==========

Test 1: Signal Visualization
  Input: Sine wave signal (length=64)

Test Signal: 10 Hz Sine Wave
Value
  1.07 |                                                                
  0.93 |                 *****************                              
  0.80 |            *****                 *****                         
  0.66 |         ***                           ***                      
  0.53 |       **                                 **                    
  0.39 |     **                                     **                  
  0.26 |   **                                         **                
  0.12 | **                                             **              
 -0.01 |*                                                 **            
 -0.15 |                                                    *           
 -0.28 |                                                     **         
 -0.42 |                                                       **       
 -0.56 |                                                         **     
 -0.69 |                                                           ***  
 -0.83 |                                                              **
 -0.96 |                                                                
       ----------------------------------------------------------------
       0       8       16      24      32      40      48      56       (Sample Index)
Range: [-0.962, 1.069], Length: 64

Test 2: Array Printing
  Input: Signal array (length=64)

Test Signal [64 elements]:
  [  0]   0.000   0.082   0.162   0.241   0.317   0.390   0.459   0.523 
  [  8]   0.582   0.635   0.683   0.725   0.762   0.793   0.819   0.840 
  [ 16]   0.857   0.870   0.880   0.887   0.892   0.896   0.898   0.899 
  [ 24]   0.900   0.900   0.900   0.899   0.898   0.896   0.892   0.887 
  [ 32]   0.880   0.870   0.857   0.840   0.819   0.793   0.762   0.725 
  [ 40]   0.683   0.635   0.582   0.523   0.459   0.390   0.317   0.241 
  [ 48]   0.162   0.082  -0.000  -0.082  -0.162  -0.241  -0.317  -0.390 
  [ 56]  -0.459  -0.523  -0.582  -0.635  -0.683  -0.725  -0.762  -0.793 

Test 3: Signal Statistics
  Input: Signal array (length=64)

=== Statistics: Test Signal ===
  Length:     64 samples
  Min:        -0.792711 (at index 63)
  Max:        0.900000 (at index 25)
  Peak:       0.900000 (at index 25)
  Mean:       0.414478
  Std Dev:    0.530688
  Variance:   0.281630
  Range:      1.692711
========================

Test 4: Power Spectrum Visualization
  Input: Simulated power spectrum (length=128)

Power Spectrum: Peaks at 10 Hz and 30 Hz
Power
 82.81 |   |                                                            
 77.36 |   |                                                            
 71.90 |   |                                                            
 66.45 |   |                                                            
 61.00 |   |                                                            
 55.54 |   |                                                            
 50.09 |   |                                                            
 44.63 |   |    |                                                       
 39.18 |   |    |                                                       
 33.72 |   |    |                                                       
 28.27 |   |    |                                                       
 22.82 |   |    |                                                       
 17.36 |   |    |                                                       
 11.91 |   |    |                                                       
  6.45 |   ||   ||   ||   ||   ||   ||   ||   ||   ||   ||   ||   ||   |
  1.00 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       ----------------------------------------------------------------
       0.0    31      62      94      125     156     188     219                          (Hz)
Range: [1.000, 82.812], Nyquist: 500.0 Hz

========================================

Warning

As can be seen, the output through serial terminal is not quite accurate due to the limitation of character-based visualization. For more precise and detailed visualization, consider using graphical tools or libraries that support plotting and rendering of signals and spectra.