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
risposta
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.
Sinussen - sini? –
Anche il plurale sembra essere sinusale ... Questo è il problema quando non si digita la lingua di tua madre. Sinai allora :)? –
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
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.
L'onda sinusoidale probabilmente ha uno sfasamento, il che renderebbe l'utilizzo del metodo dei minimi quadrati più difficile da implementare. – CookieOfFortune
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
.
∫ (a · sin (k · t + m) + b) dt = (-a/k) · cos (k · t + m) + b · t + C –
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
È 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.
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. –
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
- 1. Come verificare se un DataSet è vuoto?
- 2. Come si importa da Excel a un DataSet utilizzando Microsoft.Office.Interop.Excel?
- 3. Determinare se un punto si trova all'interno di un triangolo
- 4. Si avvicina il collo di bottiglia con le prese?
- 5. Come determinare se un indirizzo IP appartiene a un paese
- 6. Attiva il display Android quando qualcuno si avvicina al dispositivo
- 7. Migrazione da DataSet a EntityFramework
- 8. Come aumentare la dimensione dell'elemento quando il mouse si avvicina?
- 9. come determinare se esiste un campo?
- 10. Scrittura di file sinusoidale PCM a 8 bit produce sovratoni
- 11. La copia di oggetti si avvicina a .net: Auto Mapper, Emit Mapper, Operazione implicita, Copia proprietà
- 12. Generatore sonoro sinusoidale in Java
- 13. Riproduzione sinusoidale per ora sconosciuta
- 14. Come partecipare a Dataset su più colonne?
- 15. Determinare se un carattere è alfabetico
- 16. Determinare se un tipo è statico
- 17. Come UIAutomation determinare se un UIAElement.isVisible()
- 18. C++ determinare se un contenitore ha :: find()
- 19. Come si stampa l'ultima osservazione di un dataset SAS?
- 20. Generazione dell'audio sinusoidale in Python
- 21. Determinare se si è verificata una variazione di giorno
- 22. Come determinare se un poliedro è convesso?
- 23. Determinare se QTableView ha un editor aperto
- 24. Come determinare se l'aereo si trova nella fotocamera Three.js Frustum
- 25. Come determinare se NSBezierPaths si interseca in Cocoa?
- 26. disegno onda sinusoidale con opencv
- 27. Creare un caso, un grafico sinusoidale come sprite paesaggio
- 28. Determinare se due segmenti di linea si intersecano?
- 29. determinare se si tratta di ambiente jenkins all'interno gradle
- 30. La curva sinusoidale si adatta a lm e nls in R
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
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
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