Il mio primo suggerimento è di non eseguire l'implementazione DSP in Java. Il mio secondo suggerimento sarebbe quello di implementare le tue stesse implementazioni DSP in Java.
Perché non usare Java:
ho un sacco di esperienza di scrittura di codice DSP nel corso degli ultimi 10 anni ... e quasi nessuno di codice DSP è in Java ... quindi perdonami quando sono riluttante a leggere di qualcuno che vuole implementare DSP in Java.
Se si sta andando a fare non-banale DSP allora non si dovrebbe usare Java. La ragione per cui DSP è così doloroso da implementare in Java è perché tutte le buone implementazioni di DSP usano trucchi di gestione della memoria di basso livello, puntatori (quantità pazzesche di puntatori), grandi array di dati grezzi, ecc.
perché utilizzare Java:
Se si sta facendo semplice roba DSP rotolare il proprio implementazione Java. Semplici elementi DSP come PSD e filtri sono entrambi relativamente facili da implementare (implementazione semplice ma non veloce) perché ci sono molti esempi di implementazione e una teoria ben documentata online.
Nel mio caso ho implementato una funzione PSD in Java una volta perché stavo diagrammi il PSD in una GUI Java, quindi era più facile prendere il colpo di prestazioni in Java e avere il PSD calcolato nella GUI java e quindi tracciarlo .
Come implementare un PSD:
Il PSD è di solito solo la grandezza della FFT visualizzato in dB. Ci sono molti esempi accademici, commerciali e open source che mostrano come calcolare la grandezza della FFT in dB. Ad esempio l'output Apache has a Java implementation that gives you the FFT e quindi è sufficiente convertire in magnitudine e dB. Qualsiasi cosa dopo la FFT dovrebbe essere adattata a ciò che è necessario/desidera.
Come implementare passa-basso, il filtraggio passa-banda:
Il metodo più semplice implementazione (non il più efficiente computazionalmente) sarebbe a mio avviso essere usando un filtro FIR e fare il tempo del dominio convoluzione.
Convolution è molto facile da implementare, è due cicli nidificati per loop e ci sono letteralmente milioni di codice di esempio sulla rete.
Il filtro FIR sarà la parte difficile se non si conosce nulla sulla progettazione del filtro. Il metodo più semplice sarebbe utilizzare Matlab per generare il filtro FIR e quindi copiare i coefficenti in java. Suggerisco di usare firpmord() e firpm() da Matlab. Scatta con un'attenuazione da -30 a -50 dB nella banda di arresto e un'increspatura di 3 dB nella banda passante.
Qualcuno sa di eventuali librerie simili per C/C++? – devin
fftw, http://www.fftw.org/ – basszero
Per prima cosa, questa domanda riguarda Java, non C. :) In secondo luogo, FFTW sembra avere FFT. Che dire di bandpass, passa-basso, filtraggio passa-alto, densità spettrale di potenza, ecc.? Chiaramente FFT costituisce la base, ma non è un'interfaccia di alto livello per quelle operazioni. – dfrankow