aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2013-06-23 13:34:03 +0000
committerDimitri Sokolyuk <demon@dim13.org>2013-06-23 13:34:03 +0000
commita96e6ccdca73f9c57a9d08dea3d3c36a07ab986f (patch)
tree264ff61483821b5d4bd7cff01f48a0b587a8cbcc
parentbdd4b4cd6434f8d2366085795517e2f15061581e (diff)
remove scaling, simplify fft
-rw-r--r--Makefile2
-rw-r--r--fft.c47
-rw-r--r--fft.h2
-rw-r--r--spectrogram.c13
4 files changed, 22 insertions, 42 deletions
diff --git a/Makefile b/Makefile
index 5bcfce5..25593b4 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ PCCF!= pkg-config --cflags ${LIBS}
PCLA!= pkg-config --libs ${LIBS}
CFLAGS+=${PCCF}
LDADD+= ${PCLA} -lsndio
-DEBUG+= -Wall
+DEBUG+= -Wall -ggdb
NOMAN=
.include <bsd.prog.mk>
diff --git a/fft.c b/fft.c
index a13eaad..06c1670 100644
--- a/fft.c
+++ b/fft.c
@@ -51,18 +51,12 @@ init_fft(int n)
{
struct fft *p;
- p = malloc(2 * sizeof(struct fft));
+ p = malloc(sizeof(struct fft));
- p[0].n = n;
- p[0].in = fftw_malloc(n * sizeof(double));
- p[0].out = fftw_malloc(n * sizeof(double));
- p[0].plan = fftw_plan_r2r_1d(n, p[0].in, p[0].out,
- FFTW_R2HC, FFTW_MEASURE);
-
- p[1].n = n;
- p[1].in = fftw_malloc(n * sizeof(double));
- p[1].out = fftw_malloc(n * sizeof(double));
- p[1].plan = fftw_plan_r2r_1d(n, p[1].in, p[1].out,
+ p->n = n;
+ p->in = fftw_malloc(n * sizeof(double));
+ p->out = fftw_malloc(n * sizeof(double));
+ p->plan = fftw_plan_r2r_1d(n, p->in, p->out,
FFTW_R2HC, FFTW_MEASURE);
p->window = hamming(n);
@@ -71,33 +65,28 @@ init_fft(int n)
}
int
-dofft(struct fft *p, int16_t *data, double *left, double *right, int n, float scala)
+dofft(struct fft *p, int16_t *data, double *out, int odd)
{
int i;
- for (i = 0; i < n; i++) {
- p[0].in[i] = p->window[i] * data[2 * i + 0] / (double)INT16_MAX;
- p[1].in[i] = p->window[i] * data[2 * i + 1] / (double)INT16_MAX;
- }
+ for (i = 0; i < p->n; i++)
+ p->in[i] = p->window[i] * data[2 * i + odd]
+ / (double)INT16_MAX;
- fftw_execute(p[0].plan);
- fftw_execute(p[1].plan);
+ fftw_execute(p->plan);
- for (i = 1; i < n / 2; i++) {
- left[i - 1] = sqrt(scala * i
- * (pow(p[0].out[i], 2) + pow(p[0].out[n - i], 2)));
- right[i - 1] = sqrt(scala * i
- * (pow(p[1].out[i], 2) + pow(p[1].out[n - i], 2)));
- }
+ for (i = 1; i < p->n / 2; i++)
+ out[i - 1] = sqrt(i * (pow(p->out[i], 2)
+ + pow(p->out[p->n - i], 2)));
return 0;
}
void
-del_fft(struct fft *fft)
+del_fft(struct fft *p)
{
- fftw_free(fft->in);
- fftw_free(fft->out);
- free(fft->window);
- free(fft);
+ fftw_free(p->in);
+ fftw_free(p->out);
+ free(p->window);
+ free(p);
}
diff --git a/fft.h b/fft.h
index 1e89451..6f0f3bc 100644
--- a/fft.h
+++ b/fft.h
@@ -21,7 +21,7 @@
struct fft;
struct fft *init_fft(int);
-int dofft(struct fft *, int16_t *, double *, double *, int, float);
+int dofft(struct fft *, int16_t *, double *, int);
void del_fft(struct fft *);
#endif
diff --git a/spectrogram.c b/spectrogram.c
index 3372696..58b5181 100644
--- a/spectrogram.c
+++ b/spectrogram.c
@@ -281,8 +281,6 @@ main(int argc, char **argv)
struct fft *fft;
struct data data;
- float scala = 1.0;
-
int ch, dflag = 1;
int delta;
int psize, ssize;
@@ -361,7 +359,8 @@ main(int argc, char **argv)
while (!die) {
read_sio(sio, data.buffer, data.bufsz);
- dofft(fft, data.buffer, data.left, data.right, delta, scala);
+ dofft(fft, data.buffer, data.left, 0);
+ dofft(fft, data.buffer, data.right, 1);
draw(&data);
while (XPending(dsp)) {
@@ -375,14 +374,6 @@ main(int argc, char **argv)
case XK_q:
die = 1;
break;
- case XK_KP_Add:
- scala *= 2;
- msg("inc scala: %f", scala);
- break;
- case XK_KP_Subtract:
- scala /= 2;
- msg("dec scala: %f", scala);
- break;
default:
break;
}