#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
#include <sstream>
#include <vector>
#include <ap_fixed.h>

#define DT ap_fixed<14,1,AP_RND,AP_SAT>

DT fir(const DT x);

#ifndef PI
#define PI 3.141592653589793
#endif

std::string outstr(double value) {
    std::ostringstream s;
    s << value;
    std::string s1 = s.str();
    for (char &c : s1) if (c == '.') c = ',';
    return s1;
}


int main() {
    std::ofstream csv("c:/proj/simdata.csv");
    if (!csv.is_open()) {
        std::cerr << "Error opening CSV file\n";
        return 1;
    }

    csv << "n;x;y;freq\n";

    const int num_samples = 200;
    const float fs = 48000.0;    // sampling rate
    const float f_start = 1000.0; // sweep start frequency
    const float f_end   = 10000.0; // end frequency

    // Exponential sweep multiplier
    float factor = pow(f_end / f_start, 1.0f / num_samples);

    for (int n = 0; n < num_samples; n++) {
        float freq = f_start * pow(factor, n);
        float x_float = sin(2.0f * PI * freq * n / fs);

        DT x = (DT)x_float;
        DT y = fir(x);

        csv << n << ";" 
            << outstr((float)x) << ";"
            << outstr((float)y) << ";"
            << outstr(freq) << "\n";
    }

    csv.close();
    std::cout << "CSV generated: fir_output.csv\n";

    return 0;
}
