MCPcopy Create free account
hub / github.com/ArashPartow/exprtk / real_1d_discrete_fourier_transform

Function real_1d_discrete_fourier_transform

exprtk_simple_example_23.cpp:27–130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25
26template <typename T>
27void real_1d_discrete_fourier_transform()
28{
29 typedef exprtk::symbol_table<T> symbol_table_t;
30 typedef exprtk::expression<T> expression_t;
31 typedef exprtk::parser<T> parser_t;
32 typedef exprtk::function_compositor<T> compositor_t;
33 typedef typename compositor_t::function function_t;
34
35 const T sampling_rate = 1024.0; // ~1KHz
36 const T N = 8 * sampling_rate; // 8 seconds worth of samples
37
38 std::vector<T> input (static_cast<std::size_t>(N),0.0);
39 std::vector<T> output(static_cast<std::size_t>(N),0.0);
40
41 exprtk::rtl::io::println<T> println;
42
43 symbol_table_t symbol_table;
44 symbol_table.add_vector ("input" , input );
45 symbol_table.add_vector ("output" , output );
46 symbol_table.add_function ("println" , println );
47 symbol_table.add_constant ("N" , N );
48 symbol_table.add_constant ("sampling_rate", sampling_rate);
49 symbol_table.add_pi();
50
51 compositor_t compositor(symbol_table);
52 compositor.load_vectors(true);
53
54 compositor.add(
55 function_t("dft_1d_real")
56 .var("N")
57 .expression
58 (
59 " for (var k := 0; k < N; k += 1) "
60 " { "
61 " var k_real := 0.0; "
62 " var k_imag := 0.0; "
63 " "
64 " for (var i := 0; i < N; i += 1) "
65 " { "
66 " var theta := 2pi * k * i / N; "
67 " k_real += input[i] * cos(theta); "
68 " k_imag -= input[i] * sin(theta); "
69 " }; "
70 " "
71 " output[k] := hypot(k_real,k_imag); "
72 " } "
73 ));
74
75 const std::string dft_program =
76 " "
77 " /* "
78 " Generate an aggregate waveform comprised of three "
79 " sine waves of varying frequencies and amplitudes. "
80 " */ "
81 " var frequencies[3] := { 100.0, 200.0, 300.0 }; /* Hz */ "
82 " var amplitudes [3] := { 10.0, 20.0, 30.0 }; /* Power */ "
83 " "
84 " for (var i := 0; i < N; i += 1) "

Callers

nothing calls this directly

Calls 1

valueMethod · 0.45

Tested by

no test coverage detected