stima frequenza... C

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

stima frequenza... C

Messaggio 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?
;)

Avatar utente
op15l
Linux 3.x
Linux 3.x
Messaggi: 604
Iscritto il: mer 26 gen 2005, 0:00
Kernel: 2.6.27
Desktop: kde 4.1.3
Località: Cattolica

Messaggio da op15l »

prendi il max dell'fft (occhio alle ripetizioni periodiche)

Avatar utente
lamarozzo
Linux 3.x
Linux 3.x
Messaggi: 732
Iscritto il: gio 14 lug 2005, 0:00
Desktop: xfce
Distribuzione: archlinux
Località: Roma

Messaggio da lamarozzo »

Penso che la libreria che rappresenta lo stato dell'arte è fftw

http://www.fftw.org/

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio 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...

:lol:

Avatar utente
lamarozzo
Linux 3.x
Linux 3.x
Messaggi: 732
Iscritto il: gio 14 lug 2005, 0:00
Desktop: xfce
Distribuzione: archlinux
Località: Roma

Messaggio 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).

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio da Toni »

su qual'è micro intendi farlo girare?

io con 3 pic 16f876 ho implementato la fast convolution e devo dire con risultati soddisfacenti

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio 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

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio 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.. ;)

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio 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

Avatar utente
ildiama
Linux 3.x
Linux 3.x
Messaggi: 536
Iscritto il: mar 27 dic 2005, 16:49
Slackware: mine
Kernel: 2.6.alto..
Desktop: KDE4
Località: Senigallia
Contatta:

Messaggio 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?

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio 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

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio 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!

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio 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?

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio 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!

Avatar utente
Toni
Linux 3.x
Linux 3.x
Messaggi: 999
Iscritto il: lun 30 gen 2006, 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Messaggio 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

Rispondi