Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Interference_Simple
Revision 0:6400e338266f, committed 2019-11-27
- Comitter:
- aktk
- Date:
- Wed Nov 27 23:03:42 2019 +0000
- Child:
- 1:19c3a52c80c3
- Child:
- 2:b01e84ce3ae0
- Commit message:
- nyaan
Changed in this revision
| DSinGenerator.cpp | Show annotated file Show diff for this revision Revisions of this file |
| DSinGenerator.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DSinGenerator.cpp Wed Nov 27 23:03:42 2019 +0000
@@ -0,0 +1,79 @@
+#include "DSinGenerator.h"
+
+DSinGenerator::DSinGenerator(
+ uint16_t const arg_resolution_ofsin
+):
+ ampl_max(10),
+ freq_max(5000),
+ resolution_ofsin(arg_resolution_ofsin)
+{
+ init();
+ setParam(0, 4000);
+}
+
+DSinGenerator::DSinGenerator(
+ float const arg_ampl,
+ uint16_t const arg_freq,
+ uint16_t const arg_resolution_ofsin
+):
+ ampl_max(10),
+ freq_max(5000),
+ resolution_ofsin(arg_resolution_ofsin)
+{
+ init();
+ setParam(arg_ampl, arg_freq);
+}
+
+void DSinGenerator::setParam(
+ float const arg_ampl,
+ uint16_t const arg_freq
+)
+{
+ setAmplitude(arg_ampl);
+ setFrequency(arg_freq);
+}
+
+void DSinGenerator::setAmplitude(
+ float const arg_ampl
+)
+{
+ ampl = arg_ampl;
+ for(int i = 0; i < resolution_ofsin; i++){
+ discretized_sin_p16m16[i] = static_cast<int32_t>(4095.0 / ampl_max * ampl * discretized_sin[i] );
+ }
+}
+
+void DSinGenerator::setFrequency(
+ uint16_t const arg_freq
+)
+{
+ freq = arg_freq;
+ pwth = 1000000 / freq / resolution_ofsin;
+}
+
+void DSinGenerator::init()
+{
+ discretized_sin = new float[resolution_ofsin];
+ discretized_sin_p16m16 = new int32_t[resolution_ofsin];
+
+ for(int i = 0; i < resolution_ofsin; i++){
+ discretized_sin[i] = sin( 2.0 * M_PI * static_cast<float>(i) / static_cast<float>(resolution_ofsin));
+ }
+}
+
+float DSinGenerator::getValue()
+{
+ static int itr = 0;
+ return ampl * discretized_sin[itr++ % resolution_ofsin];
+}
+
+int32_t DSinGenerator::getValue_p16m16()
+{
+ static int itr = 0;
+ return discretized_sin_p16m16[itr++ % resolution_ofsin];
+}
+
+void DSinGenerator::getValueofSamplePoints(float arg_dsin[])
+{
+ memcpy(arg_dsin, discretized_sin, sizeof(float) * resolution_ofsin);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DSinGenerator.h Wed Nov 27 23:03:42 2019 +0000
@@ -0,0 +1,96 @@
+/** Defining Discretized Sinusoidal Wave Generator
+ *
+ * \file DSinGenerator.h
+ * \author Akifumi Takahashi
+ * \date 2019/Nov/28 ver.1 publish
+ * \version 1.0.2019.Nov
+ */
+
+#ifndef DISCRETIZED_SINUSOIDAL_WAVE_GENERATOR_H
+#define DISCRETIZED_SINUSOIDAL_WAVE_GENERATOR_H
+#define _USE_MATH_DEFINES
+#include <cmath>
+
+#ifndef M_PI
+#define M_PI 3.141592
+#endif
+
+#include "mbed.h"
+/** \Class DISCRETIZED SINUSOIDAL WAVE GENERATOR
+ *
+ * Generate a discretized sinusoidal wave whose value type is float,
+ * and the range is from (-1.0f * ampl) to (1.0f * ampl).
+ *
+ */
+class DSinGenerator
+{
+private:
+ /// Amplitude of sinusoidal wave (mA)
+ float ampl;
+
+ /// Frequency of the wave (Hz)
+ uint16_t freq;
+
+ /// Pulse width fineness of dicretization (us)
+ /// pwth = 1000000 / freq / resolution_ofsin;
+ uint16_t pwth;
+
+ float* discretized_sin;
+ int32_t* discretized_sin_p16m16;
+
+ void init();
+
+public:
+ float const ampl_max;
+ uint16_t const freq_max;
+ uint16_t const resolution_ofsin; // = arg_resolution_ofsin below
+
+ DSinGenerator(
+ uint16_t const arg_resolution_ofsin = 20
+ );
+ DSinGenerator(
+ float const arg_ampl,
+ uint16_t const arg_freq,
+ uint16_t const arg_resolution_ofsin = 20
+ );
+
+ void setParam(
+ float const arg_ampl,
+ uint16_t const arg_freq
+ );
+
+ void setAmplitude(
+ float const arg_ampl
+ );
+
+ void setFrequency(
+ uint16_t const arg_freq
+ );
+
+ float getValue();
+ int32_t getValue_p16m16();
+
+ void getValueofSamplePoints(float[]);
+
+ float getAmplitude(); //inline
+ uint16_t getFrequency(); //inline
+ uint16_t getPulseWidth(); //inline
+
+};
+
+
+inline float DSinGenerator::getAmplitude()
+{
+ return ampl;
+}
+
+inline uint16_t DSinGenerator::getFrequency()
+{
+ return freq;
+}
+
+inline uint16_t DSinGenerator::getPulseWidth()
+{
+ return pwth;
+}
+#endif
\ No newline at end of file