Skip to content
Snippets Groups Projects
Select Git revision
  • a1ca4d6ebc5f8c4d4959e1c7789b3cf2ad5032e4
  • master default protected
  • 1-test-vec-to-coordinates
  • patch-1
4 results

main.c

Blame
  • main.c 6.68 KiB
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <plplot.h>
    
    #define NSIZE 5000
    
    double PI = 4.0 * atan(1.0);
    
    typedef struct _rc_circuit
    {
        double r, c;
    } rc_circuit;
    
    rc_circuit rc_circuit_create(double r, double c)
    {
        rc_circuit tmp = {.r = r, .c = c};
        return tmp;
    }
    
    double rc_circuit_charge(double v_in, rc_circuit rc, double t)
    {
        return v_in * (1.0 - exp(-t / (rc.c * rc.r)));
    }
    
    double rc_circuit_discharge(double v_in, rc_circuit rc, double t)
    {
        return v_in * exp(-t / (rc.c * rc.r));
    }
    
    double solve_vc(rc_circuit rc, double v0, double v_in, double dt)
    {
        return (v_in - v0) / (rc.c * rc.r) * dt + v0;
    }
    
    // TODO: try to do the high pass filter.
    // double solve_vr(rc_circuit rc, double v0, double dv_in_dt, double dt)
    // {
    //     return (dv_in_dt * (rc.c * rc.r) - v0) / (rc.c * rc.r) * dt + v0;
    // }
    
    double solve_vr(double v_in, double vc)
    {
        return v_in - vc;
    }
    
    PLFLT rc_min(int size, PLFLT x[size])
    {
        PLFLT val = x[0];
        for (int i = 0; i < size; ++i)
        {
            val = x[i] < val ? x[i] : val;
        }
        return val;
    }
    
    PLFLT rc_max(int size, PLFLT x[size])
    {
        PLFLT val = x[0];
        for (int i = 0; i < size; ++i)
        {
            val = x[i] > val ? x[i] : val;
        }
        return val;
    }
    
    void plot_data(int size, PLFLT x[size], PLFLT y[size], PLFLT z[size], PLFLT ref[size], char *xaxis, char *yaxis, char *title)
    {
        PLFLT xmin = rc_min(size, x);
        PLFLT xmax = rc_max(size, x);