einen Blick fragen, ist es eine ähnliche Funktion mit den intensiven CPU-Teilen in C geschrieben, die auf einem RPi ziemlich wichtig sind.
können Sie die src/impulse.c
und src/test-impulse.c
zu tun ändern, was Sie wollen, wenn Sie auch in gsl
und cblas
(dep von GSL) verknüpfen und umfassen <gsl/gsl_statistics_double.h>
. Sie werden feststellen, dass Sie ein Array [256] von im_getSnapshot()
zurückbekommen, das die FFT-Magnituden enthält. Übergeben Sie dieses Array an Ihre gewünschte Funktion. für mich ist das sd = gsl_stats_sd(array, 1, 256)
, und es wird die Standardabweichung als einfaches Doppel zurückgeben. Für Sie verwenden Sie mean = gsl_stats_mean(array, 1, 256)
, was Ihnen den Durchschnittswert der gesamten spektralen Verteilung gibt. Sie können dann etwas basierend auf dem Wert mean
tun.
Ich mache ein ähnliches Projekt, um eine RTP-Quelle basierend auf der Erkennung von weißem Rauschen zu suspendieren/entsperren (SD ist sehr niedrig für weißes Rauschen). Wenn die SD sehr niedrig ist, ist die RTP-Senke gesperrt. Ansonsten ist es aktiviert. Dies bedeutet, dass eine Flut von RTP-Paketen nur dann auftritt, wenn Nicht-Whitenoise gefunden wird.
Dies ist möglicherweise die einfachste Methode, auf ein Audio-Pegelsignal zu reagieren. ich habe hier einen schnipsel gemacht, der sowohl den stddev als auch den mittelwert des audio darstellt, das ich überwache.
#include <unistd.h>
#include "impulse.h"
#include <stdio.h>
#include <gsl/gsl_statistics_double.h>
int main() {
int i;
double stddev, stddev_max=0, mean;
im_start();
while (1) {
usleep(1000000/10);
double *array = im_getSnapshot(IM_FFT);
for (i = 0; i < 256; i+=16)
{
printf(" %.3f,", array[ i ]);
}
stddev = gsl_stats_sd(array, 1, 256);
mean = gsl_stats_mean(array, 1, 256);
if (stddev > stddev_max)
stddev_max = stddev;
printf(" = [%.05f, %.05f] %.05f\n", stddev, stddev_max, mean);
fflush(stdout);
// if (mean > some_value) { do_something(); }
// else { do_something_else(); }
}
im_stop();
return 0;
}
Vielen Dank an Sie Herr sieht aus wie etwas, mit dem ich arbeiten kann, krank versuchen Sie es in ein paar Tagen. Entschuldigung für meine späte Reaktion darauf – Slowmo