[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2011-09-04 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: bee38acc8bed264547102a3013c76408235485e7
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=bee38acc8bed264547102a3013c76408235485e7

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2011-09-01 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: 71eba7a6507f564e22da7b8b65c3764bf1ea663d
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=71eba7a6507f564e22da7b8b65c3764bf1ea663d

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2011-08-23 Thread GIT version control
Module: xenomai-abe
Branch: experimental
Commit: 69c47ba516a3ca80095942ee9b81f039b5421eb3
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=69c47ba516a3ca80095942ee9b81f039b5421eb3

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2011-05-12 Thread GIT version control
Module: xenomai-abe
Branch: experimental
Commit: 0f0dcd0c21fdddc0d539e48488aa248313bdc270
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=0f0dcd0c21fdddc0d539e48488aa248313bdc270

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2011-01-12 Thread GIT version control
Module: xenomai-abe
Branch: experimental
Commit: 801760ab1a7d9e438c1dc3b2560ee442f9e058fd
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=801760ab1a7d9e438c1dc3b2560ee442f9e058fd

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2010-10-17 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: 1c8f7dfbae13d89c6b7474ddd6b94a1711e2f919
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=1c8f7dfbae13d89c6b7474ddd6b94a1711e2f919

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+   

[Xenomai-git] Alexis Berlemont : analogy: add first version of waveform generation

2010-10-17 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: debcfb2b698c75a1a0f2d99556595c0a296f9baa
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=debcfb2b698c75a1a0f2d99556595c0a296f9baa

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Oct 16 14:59:54 2010 +0200

analogy: add first version of waveform generation

This work is based on Daniele Nicolodi's work. Unfortunately, I could
not include the proprosal as is because it was limited for 16bits
acquisition devices.

So far, this work is not complete.

---

 src/utils/analogy/Makefile.am |6 ++
 src/utils/analogy/signal_generation.c |  157 +
 src/utils/analogy/signal_generation.h |   38 
 3 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am
index f82942e..3d8cb5e 100644
--- a/src/utils/analogy/Makefile.am
+++ b/src/utils/analogy/Makefile.am
@@ -9,6 +9,12 @@ CPPFLAGS = \
 LDFLAGS = \
@XENO_USER_LDFLAGS@
 
+lib_LIBRARIES = libwaveform.a
+
+libwaveform_a_SOURCES = signal_generation.c
+
+noinst_HEADERS = signal_generation.h
+
 analogy_config_SOURCES = analogy_config.c
 analogy_config_LDADD = \
../../drvlib/analogy/libanalogy.la \
diff --git a/src/utils/analogy/signal_generation.c 
b/src/utils/analogy/signal_generation.c
new file mode 100644
index 000..2f443c5
--- /dev/null
+++ b/src/utils/analogy/signal_generation.c
@@ -0,0 +1,157 @@
+#include stdio.h
+#include stdlib.h
+#include assert.h
+#include errno.h
+#include math.h
+
+#include analogy/analogy.h
+
+#include signal_generation.h
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+void a4l_sg_init_sine(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 + 
+   0.5 * config-wf_amplitude * cos(i * 2 * PI * ratio);
+   }
+}
+
+void a4l_sg_init_sawtooth(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+   
+   int period_idx = (int)floor(i * ratio);
+
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 -
+   period_idx * config-wf_amplitude +
+   i * ratio * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_init_triangular(struct waveform_config *config, double *values)
+{
+   int i;
+
+   double ratio = config-wf_frequency / config-spl_frequency;
+
+   for (i = 0; i  config-spl_count; i++) {
+
+   int period_idx = (int)floor(i * ratio);
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int rise = ((half_period_idx % 2) == 0) ? 1 : 0;
+
+   if (rise) {
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 -
+   2 * period_idx * config-wf_amplitude +
+   2 * i * ratio * config-wf_amplitude;
+   } else {
+   values[i] = config-wf_offset -
+   config-wf_amplitude / 2 +
+   2 * (period_idx + 1) * config-wf_amplitude - 
+   2 * i * ratio * config-wf_amplitude;
+   }
+   }
+}
+
+void a4l_sg_init_steps(struct waveform_config *config, double *values)
+{
+   int i;
+   
+   double ratio = config-wf_frequency / config-spl_frequency;
+   
+   for (i = 0; i  config-spl_count; i++) {
+   int half_period_idx = (int)floor(i * 2 * ratio);
+   int even = (half_period_idx % 2 == 0);
+   
+   values[i] = config-wf_offset - 
+   config-wf_amplitude / 2 + even * config-wf_amplitude;
+   }
+}
+
+void a4l_sg_set_sample_count(struct waveform_config *config)
+{
+   int sample_count = MIN_SAMPLE_COUNT;
+   int best_count = MIN_SAMPLE_COUNT;
+   double lowest_diff = INFINITY;
+
+   while (sample_count  MAX_SAMPLE_COUNT) {
+
+   double ratio = (double)sample_count * 
+   (config-wf_frequency / config-spl_frequency);
+   int ceiling = ceil(ratio);
+   double diff = (double)ceiling - ratio;
+
+   assert(diff = 0);
+
+   if (diff  lowest_diff) {
+   lowest_diff = diff;
+   best_count = sample_count;
+   }
+
+   if (diff == 0)
+   break;
+
+   sample_count++;
+   }
+
+   if (lowest_diff != 0) {
+   printf(Warning: unable to create a contiguous signal\n);
+