/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <math.h>
using namespace std;
#define PI 3.14159265358979323846
static double Sinc(double x)
{
if (x == 0.0) return 1.0;
return sin(PI * x) / (PI * x);
}
static double SymmetricBlackmanHarris(double i, int n)
{
i += (double)n / 2.0;
double factor = i * 2.0 * PI / (double)n;
const double a0 = 0.35875;
const double a1 = 0.48829;
const double a2 = 0.14128;
const double a3 = 0.01168;
return a0 - a1 * cos(1.0 * factor) + a2 * cos(2.0 * factor) - a3 * cos(3.0 * factor);
}
static double SymmetricBlackman(double i, int n)
{
i += (double)n / 2.0;
double factor = i * 2.0 * PI / (double)n;
// Constants from https://e...content-available-to-author-only...a.org/wiki/Window_function#Blackman_window
const double a0 = 0.42;
const double a1 = 0.5;
const double a2 = 0.08;
return a0 - a1 * cos(1.0 * factor) + a2 * cos(2.0 * factor);
}
static double SymmetricHamming(double i, int n)
{
i += (double)n / 2.0;
double factor = i * 2.0 * PI / (double)n;
const double a0 = 25.0 / 46.0;
const double a1 = 1.0 - a0;
return a0 - a1 * cos(1.0 * factor);
}
static double SymmetricHann(double i, int n)
{
i += (double)n / 2.0;
double factor = i * 2.0 * PI / (double)n;
const double a0 = 0.5;
const double a1 = 1.0 - a0;
return a0 - a1 * cos(1.0 * factor);
}
int main()
{
static constexpr int FIRN = 52;
float tblF[FIRN];
const double cutoff = 1.0;
printf("Hello World\n");
double sum = 0;
for (size_t i = 0; i < FIRN; i++)
{
double t = double(i) - double(FIRN / 2.0) + 1.0 - 0.5;
sum += tblF[i] = SymmetricBlackmanHarris(t, FIRN) * cutoff * Sinc(cutoff * t);
}
// Normalize
for (size_t i = 0; i < FIRN; i++)
tblF[i] *= 1.0 / sum;
for (size_t i = 0; i < FIRN; i++)
printf("%.20g\n", tblF[i]);
return 0;
}