2009-06-14 12 views
8

Esiste un algoritmo che può essere utilizzato per determinare se un campione di dati prelevati a intervalli di tempo fissi si avvicina a un'onda sinusoidale?Determinare se un dataset si avvicina a un'onda sinusoidale

+1

Sarei abbastanza sicuro che dato * qualsiasi * * finito di dati (con valori X distinti), è possibile trovare un'onda sinusoidale che si adatti esattamente, se non si pone qualche tipo di vincoli sulla frequenza (all'aumentare della frequenza, l'onda sinusoidale si avvicina a una curva di riempimento dello spazio). – AakashM

+0

Questa è la definizione della trasformata di Fourier continua. In pratica, puoi solo prendere la trasformata discreta di Fourier e sarai limitato alle frequenze finite (poiché l'espansione dell'integrale di Fourier passa all'infinito nel caso continuo). La maggior parte delle funzioni "curve" può essere adattata molto bene utilizzando la trasformata di Fourier, ma le funzioni "rettangolari" avranno sempre una distorsione ai bordi, anche quando l'espansione viene continuata per un lungo periodo. (Le linee verticali sono simili al delta di Dirac, che è 1 per tutte le frequenze). – CookieOfFortune

+0

Il modo migliore dipenderà dal modo in cui ci si aspetta che i dati si allontanino dalla sineness. Rumore casuale? Forma d'onda distorta (ad esempio picchi triangolari o tagliati)? Una somma di diversi seni contro un seno puro? – DarenW

risposta

16

Prendere la trasformata di Fourier che trasforma i dati in una tabella di frequenza (ricerca di FFT, trasformazione di Fourier veloce, per un'implementazione. Ad esempio, FFTW). Se è un seno o un coseno, la tabella delle frequenze conterrà un valore molto alto corrispondente alla frequenza che stai cercando e un rumore ad altre frequenze.

In alternativa, abbina diversi sinus a varie frequenze e prova ad abbinarli usando la correlazione incrociata: la somma dei quadrati delle differenze tra il tuo segnale e il seno che stai cercando di adattare. Avresti bisogno di farlo per sinussen a una gamma di frequenze, naturalmente. E avresti bisogno di farlo mentre traduci il seno lungo l'asse x per trovare la fase.

+0

Sinussen - sini? –

+0

Anche il plurale sembra essere sinusale ... Questo è il problema quando non si digita la lingua di tua madre. Sinai allora :)? –

+3

Una buona stima della qualità sarà l'altezza del picco molto alto, diviso per la somma delle altezze degli altri picchi. Usando questa misura, 1 significa un adattamento perfetto, 0 significa nessuna misura. – Martijn

0

Verificare il least squares method.

@CookieOfFortune: Sono d'accordo, ma la misura della serie di Fourier è ottimale nel senso dei minimi quadrati (come si dice nell'articolo di Wikipedia).

Se si desidera giocare prima con i propri dati di input, controllare lo Discrete Fourier Transformation (DFT) su Wolfram Alpha. Come notato in precedenza, se si desidera un'implementazione rapida, è necessario controllare uno dei vari FFT-libraries.

+3

L'onda sinusoidale probabilmente ha uno sfasamento, il che renderebbe l'utilizzo del metodo dei minimi quadrati più difficile da implementare. – CookieOfFortune

0

Colpo in blu: è possibile sfruttare il fatto che l'integrale di a*sin(t) è a*cos(t). Tenere traccia di min/max dei dati dovrebbe consentire di conoscere a.

+0

∫ (a · sin (k · t + m) + b) dt = (-a/k) · cos (k · t + m) + b · t + C –

+0

Non sono sicuro che questa sia una direzione fruttuosa entrare. Tuttavia, potrebbe essere utile notare che la seconda derivata di un seno è proporzionale a, e negativa, dell'originale. d2/dx2) sin (kx) = -k^2 sin (x). Per ridurre gli effetti del rumore e dell'errore di arrotondamento, utilizzare una derivata levigante: consultare il filtro Savitzky-Golay. – DarenW

7

È possibile calcolare la trasformata di Fourier e cercare un singolo picco. Ciò direbbe che il dataset si avvicina a una curva sinusoidale a quella frequenza.

+0

che purtroppo funziona solo se l'onda sinusoidale ha esattamente la stessa frequenza di un fft-bin. Se è da qualche parte tra i bidoni si ottiene uno spettro completamente diverso. –

+1

Otterrai un singolo picco prominente indipendentemente dalla frequenza. La domanda non chiede di determinare la frequenza; solo per determinare se è un seno o no. – endolith

Problemi correlati