Pagina 1 di 2
stima frequenza... C
Inviato: lun 22 ott 2007, 16:54
da smtux
Salve ho una domanda per i programmatori in C:
se volessi stimare la frequenza di un segnale come fareste voi?
una fft, no?
esempio stima della freq. di una sinusoide...
sapete indicarmi un algoritmo abbastanza efficente?

Inviato: lun 22 ott 2007, 17:01
da op15l
prendi il max dell'fft (occhio alle ripetizioni periodiche)
Inviato: lun 22 ott 2007, 17:46
da lamarozzo
Penso che la libreria che rappresenta lo stato dell'arte è fftw
http://www.fftw.org/
Inviato: lun 22 ott 2007, 19:46
da smtux
lamarozzo ha scritto:Penso che la libreria che rappresenta lo stato dell'arte è fftw
http://www.fftw.org/
grazie non credevo di trovare una risposta così...
ora dato che vorrei farla girare su un micro devo vedere quanto è pesante... da un pto di vista di portabilità non ci dovrebbero essere problemi visto che è in ANSI C...

Inviato: lun 22 ott 2007, 22:27
da lamarozzo
Se hai bisogno di un codice leggero forse ti conviene implementare le funzioni by hand.
Nel seguente libro trovi tutta la teoria che ti serve ed il codice da trascrivere
(vedi il capitolo 12)
http://www.nrbook.com/a/bookcpdf.php
(per vederlo devi installare un plugin di acrobat reader).
Inviato: mar 23 ott 2007, 1:19
da Toni
su qual'è micro intendi farlo girare?
io con 3 pic 16f876 ho implementato la fast convolution e devo dire con risultati soddisfacenti
Inviato: mar 23 ott 2007, 8:51
da smtux
il_notturnista ha scritto:su qual'è micro intendi farlo girare?
io con 3 pic 16f876 ho implementato la fast convolution e devo dire con risultati soddisfacenti
come mai la fast convolution? diversa dalla fft?
il micro lo sto valutando in questi giorni.... poi ti faccio sapere
Inviato: mar 23 ott 2007, 10:22
da smtux
il_notturnista ha scritto:su qual'è micro intendi farlo girare?
io con 3 pic 16f876 ho implementato la fast convolution e devo dire con risultati soddisfacenti
questi pic li programmi in C o in assembler?
ti spiego: dovrei mostrare su un display la freq. di un'onda quadra e magari con questi pic riesco a fare tutto, hanno anche degli A/D?
scusa se ti martello..

Inviato: mar 23 ott 2007, 15:42
da Toni
il pic 16f876 è dotato di convertitore a/d ed anche di circuito campionatore (Sample/hold) ti rimando al datasheet
http://ww1.microchip.com/downloads/en/D ... 39582b.pdf
la programmazione ovviamente in c , sarebbe troppo complesso in assembler
la fast convultion serve per calcolare la convoluzione la tra 2 segnali seguendo il seguento al algoritmo ( a grandi linee)
1 si fa la fft dei segnali in ingresso
2 si fa il prodotto delle fft (moltiplicare nel dominio della frequenza equivale a fare la convoluzione nel dominio del tempo)
3 si antitrasforma
ovviamente il tutto è abbastanza complesso, però se non erro esistono dei processori digitali che fanno il tutto .
per la tua applicazione ( frequenza di un onda quadra) credo che con quache amplificatore operazionale ed un controller per un display potresti cavartela , piu tardi se trovo un po di tempo ti faccio uno schemino , a limite prova a googlolare un po
Inviato: mar 23 ott 2007, 17:04
da ildiama
il_notturnista ha scritto:il pic 16f876 è dotato di convertitore a/d ed anche di circuito campionatore (Sample/hold) ti rimando al datasheet
http://ww1.microchip.com/downloads/en/D ... 39582b.pdf
la programmazione ovviamente in c , sarebbe troppo complesso in assembler
la fast convultion serve per calcolare la convoluzione la tra 2 segnali seguendo il seguento al algoritmo ( a grandi linee)
1 si fa la fft dei segnali in ingresso
2 si fa il prodotto delle fft (moltiplicare nel dominio della frequenza equivale a fare la convoluzione nel dominio del tempo)
3 si antitrasforma
ovviamente il tutto è abbastanza complesso, però se non erro esistono dei processori digitali che fanno il tutto .
per la tua applicazione ( frequenza di un onda quadra) credo che con quache amplificatore operazionale ed un controller per un display potresti cavartela , piu tardi se trovo un po di tempo ti faccio uno schemino , a limite prova a googlolare un po
Scusa, ti faccio qualche domanda anch'io.. Questo programma in C per pic 16f876 l'hai compilato su linux? e se sì, con cosa? utilizzi pikdev/piklab o roba del genere?
Inviato: mar 23 ott 2007, 19:18
da Toni
Scusa, ti faccio qualche domanda anch'io.. Questo programma in C per pic 16f876 l'hai compilato su linux? e se sì, con cosa? utilizzi pikdev/piklab o roba del genere?
compilato su win98se emulato , compilatore microchip mplab
Inviato: mar 23 ott 2007, 21:56
da smtux
il_notturnista ha scritto:il pic 16f876 è dotato di convertitore a/d ed anche di circuito campionatore (Sample/hold) ti rimando al datasheet
http://ww1.microchip.com/downloads/en/D ... 39582b.pdf
la programmazione ovviamente in c , sarebbe troppo complesso in assembler
la fast convultion serve per calcolare la convoluzione la tra 2 segnali seguendo il seguento al algoritmo ( a grandi linee)
1 si fa la fft dei segnali in ingresso
2 si fa il prodotto delle fft (moltiplicare nel dominio della frequenza equivale a fare la convoluzione nel dominio del tempo)
3 si antitrasforma
ovviamente il tutto è abbastanza complesso, però se non erro esistono dei processori digitali che fanno il tutto .
per la tua applicazione ( frequenza di un onda quadra) credo che con quache amplificatore operazionale ed un controller per un display potresti cavartela , piu tardi se trovo un po di tempo ti faccio uno schemino , a limite prova a googlolare un po
se hai voglia di buttare giù uno schemino se ne discute... grazie mille in antcipo!
Inviato: mer 24 ott 2007, 19:44
da Toni
scusa il ritardo ma sono stato molto impegnato
2 domande
1) ordine di frequenza di questa onda quadra? che so , kHz MHz etc
2)quante cifre vuoi visualizzare?
Inviato: mer 24 ott 2007, 20:04
da smtux
il_notturnista ha scritto:scusa il ritardo ma sono stato molto impegnato
2 domande
1) ordine di frequenza di questa onda quadra? che so , kHz MHz etc
2)quante cifre vuoi visualizzare?
Di che...
si parlerebbe di kHz.
Le cifre ... dire 4 al max... il pto è che di display sono praticamente a zero...
te quali usi? Ce ne sono alcuni facili da pilotare? per facili intendo le primitive in C siano qualcosa di umano non da doverci ammattire...
grazie mille per tutto!
Inviato: mer 24 ott 2007, 21:28
da Toni
per il display puo usare un display lcd " intelligente"
nel senso che gli mandi codici ASCII e lui visualizza tutto da solo , ovviamente c'è qualche pin di controllo, comunque senza scomdare microcontrollori io avevo pensato qualcosa del genere
-tramite un partitore resistivo e qualche diodo porti il segnale a livelli ttl di tensione , ovvero 0 - 5 volt ( in questo modo ottieni un clock)
-mandi questo segnale ad un contatore di implulsi esempio MC14518 B.
-il contatore possiede un pin enable , ovvero quando su questo pin c'è un segnale alto ( non ricordo se è attivo basso ) questo comincia a contare , mandare questo conteggio a driver bcd che ti visualizzano su display a sette segementi.
- costruire un oscillatore con un Ne555 ( è davvero semplice ) con il quale generi un onda quadra di periodo noto
-l' onda quadra generata dal Ne555 la mandi al pin enable del contatore
in particolare se
T è il periodo dell 'onda generata dal Ne555
N il numero di impulsi contati
Tx il periodo della onda di cui vuoi sapere la frequenza
1/Tx = N / T
dimensionando il T =1 sec , N , ovvero il numero di impulsi contati , ti da la frequenza del segnale
Ovviamente questo è solo una traccia c'è da dimensionare un bel po di cose , ma se hai una discreta conoscenza di elettronica digitale , questo potrebbe essere un buon metodo
Si puo pensare anche ad una soluzione con Pic , domani ti faccio sapere qualcosa