Per postare lo schema mi devo attrezzare perché non ho confidenza con FidoCad.
E' un filtro a quattro poli (un po' rabberciato).
Lo schema comunque è qui:
http://thermidor.altervista.org/wp-cont ... l-Rev1.pdf
Beh il silenzio tra una nota è l' altra funziona con il comando di Gate che è quello che fa partire i generatori di inviluppo.
In pratica l' ultima tensione di comando, ai Vco Vcf e Vca, deve rimanere memorizzata, anche quando si stacca la mano dalla tastiera, per permettere il tempo di rilascio, che può avere valori lunghissimi.
Dithering
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
21 messaggi
• Pagina 2 di 3 • 1, 2, 3
0
voti
[12] Re: Dithering
Ok, credo che qualcosa si possa fare, hai un filtro di ordine elevato quindi i conti che ho fatto sulla frequenza di rinfresco qui sono molto piu` rilassati.
Parlando del filtro, come hai stabilito la posizione dei poli? Facendo un po' di conti, vengono due poli con un Q di 1.1 a circa 580Hz e altri due reali a 1200Hz e 3000Hz circa. Con che criterio li hai posizionati in quel modo?
Direi che di sicuro si possa far qualcosa per conquistare almeno un bit o due in piu`, cioe` i valori possono essere ad esempio 513, 513.25, 513.5, 513.75 e poi 514 o anche solo un bit in piu`, 513, 513.5 e 514.
Cerca fra le routine del PIC se ne esistono che generano un bit casuale, oppure due bit casuali. Nel frattempo faccio un po' di conti per vedere come fare. Probabilmente le tabelle con i valodi di duty cycle devono essere riscritte come numero che abbia anche un bit o due decimali, quindi su 11 o 12 bit, da ridursi poi a 10bit prima di mandarli al generatore PWM.
Parlando del filtro, come hai stabilito la posizione dei poli? Facendo un po' di conti, vengono due poli con un Q di 1.1 a circa 580Hz e altri due reali a 1200Hz e 3000Hz circa. Con che criterio li hai posizionati in quel modo?
Direi che di sicuro si possa far qualcosa per conquistare almeno un bit o due in piu`, cioe` i valori possono essere ad esempio 513, 513.25, 513.5, 513.75 e poi 514 o anche solo un bit in piu`, 513, 513.5 e 514.
Cerca fra le routine del PIC se ne esistono che generano un bit casuale, oppure due bit casuali. Nel frattempo faccio un po' di conti per vedere come fare. Probabilmente le tabelle con i valodi di duty cycle devono essere riscritte come numero che abbia anche un bit o due decimali, quindi su 11 o 12 bit, da ridursi poi a 10bit prima di mandarli al generatore PWM.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
[13] Re: Dithering
In realtà non ho scelto la posizione dei poli, ho preso il filtro da qui:
http://www.electricdruid.net/
In un paio di applicazioni, viene usato un PIC per fare una sorta di DDS, attraverso il quale in un caso si crea un LFO, nell' altro un generatore di inviluppi.
La disposizione dei poli risulta anche a me essere la stessa, tra l' altro per curiosità tu come l' hai calcolato (sei stato velocissimo), io ho fatto ricorso a Ruffini e ci ho lavorato abbastanza.
Generare un numero casuale non è un problema, neanche riscrivere la tabella.
Rimane il problema che la frequenza di campionamento non la posso portare a più di 20kHz.
http://www.electricdruid.net/
In un paio di applicazioni, viene usato un PIC per fare una sorta di DDS, attraverso il quale in un caso si crea un LFO, nell' altro un generatore di inviluppi.
La disposizione dei poli risulta anche a me essere la stessa, tra l' altro per curiosità tu come l' hai calcolato (sei stato velocissimo), io ho fatto ricorso a Ruffini e ci ho lavorato abbastanza.
Generare un numero casuale non è un problema, neanche riscrivere la tabella.
Rimane il problema che la frequenza di campionamento non la posso portare a più di 20kHz.
0
voti
[15] Re: Dithering
Non ho trovato il filtro nel sito che hai indicato. La funzione di trasferimento l'ho calcolata con un programma per l'elaborazione simbolica delle espressioni. Ho scritto le 4 equazioni ai nodi che descrivono il circuito, le ho fatte risolvere al programma, sostituito i valori dei componenti, fatto fattorizzare il denominatore, totale 10 minuti, per lo piu` passati a cercare che cosa avevo sbagliato visto che mi ero perso un polo :).
Trovato come rifare le tabelle. Ho provato a fare i conti da 512 a 1023, ho preso 512 perche' tanto quando arrivi all'ottava dopo non hai bisogno di 1024, cambi ottava usando di nuovo 512.
In excel le nuove tabelle si fanno in un attimo. Mi serve una variabile n numero di bit da aggiungere (da 1 a 4 tipicamente) e K=2^n, che quindi puo` essere 2, 4, 8, 16... a seconda che voglia aggiungere 1 bit, 2 bit, 3 bit, 4bit... di piu` potrebbe sentirsi qualche battimento, ma puoi sempre provare.
Prendi la tua tabella iniziale con i numeri con tanti decimali e la moltiplichi per K. Poi la approssimi all'intero piu` vicino, come avevi gia` fatto per la tabella originale.
Fai un generatore di numeri casuali che generi numeri interi da 0 a K-1. Ad esempio se aggiungi 2 bit di risoluzione, deve generare casualmente 0, 1, 2 e 3.
Ogni volta che rinfreschi, prendi il numero dalla tabella e gli sommi un nuovo numero casuale. Il risultato lo shifti a destra di n bit, e ti ritrovi un numero da 10 bit da mandare al PWM.
Questo numero non e` uguale tutte le volte (tranne in qualche caso), ma oscilla casualmente fra un valore e quello successivo, e questo effetto dopo i filtro da` il valore medio piu` preciso.
Per il generatore di numeri interi (pseudo)casuali, credo possa anche usare un LFSR, ma non troppo lungo altrimenti una volta ogni tanto puoi avere lunghe sequenze di zeri o di uni. Un generatore con shift register di L bit puo` generare L uni di seguito e L-1 zeri di seguito. Se hai altri generatori, usali, al piu` fa sequenze troppo lunghe di zeri o uni.
Se hai idea della frequenza di taglio che vuoi avere per il filtro e la famiglia di polinomi (Butterworth, Chebicheff, Bessel...) posso provare a riprogettarlo.
Trovato come rifare le tabelle. Ho provato a fare i conti da 512 a 1023, ho preso 512 perche' tanto quando arrivi all'ottava dopo non hai bisogno di 1024, cambi ottava usando di nuovo 512.
In excel le nuove tabelle si fanno in un attimo. Mi serve una variabile n numero di bit da aggiungere (da 1 a 4 tipicamente) e K=2^n, che quindi puo` essere 2, 4, 8, 16... a seconda che voglia aggiungere 1 bit, 2 bit, 3 bit, 4bit... di piu` potrebbe sentirsi qualche battimento, ma puoi sempre provare.
Prendi la tua tabella iniziale con i numeri con tanti decimali e la moltiplichi per K. Poi la approssimi all'intero piu` vicino, come avevi gia` fatto per la tabella originale.
Fai un generatore di numeri casuali che generi numeri interi da 0 a K-1. Ad esempio se aggiungi 2 bit di risoluzione, deve generare casualmente 0, 1, 2 e 3.
Ogni volta che rinfreschi, prendi il numero dalla tabella e gli sommi un nuovo numero casuale. Il risultato lo shifti a destra di n bit, e ti ritrovi un numero da 10 bit da mandare al PWM.
Questo numero non e` uguale tutte le volte (tranne in qualche caso), ma oscilla casualmente fra un valore e quello successivo, e questo effetto dopo i filtro da` il valore medio piu` preciso.
Per il generatore di numeri interi (pseudo)casuali, credo possa anche usare un LFSR, ma non troppo lungo altrimenti una volta ogni tanto puoi avere lunghe sequenze di zeri o di uni. Un generatore con shift register di L bit puo` generare L uni di seguito e L-1 zeri di seguito. Se hai altri generatori, usali, al piu` fa sequenze troppo lunghe di zeri o uni.
Se hai idea della frequenza di taglio che vuoi avere per il filtro e la famiglia di polinomi (Butterworth, Chebicheff, Bessel...) posso provare a riprogettarlo.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
[16] Re: Dithering
Dunque l' articolo originale è qui:
http://www.electricdruid.net/index.php? ... ts.envgen7
Il metodo che hai descritto è quello che immaginavo, fa piacere avere una conferma.
Il filtro per ora lo lascerei così, anche perché l' ho già montato. In ogni modo non ho grossi problemi a dimensionarne un' altro, se ne venissero fuori ti contatto.
Piuttosto mi spieghi la differenza tra i generatori di numeri pseudocasuali che hai citato (il digitale non è proprio la mia tazza di tè).
Io fino ad ora mi ero basato su un generatore molto semplice (in termini di istruzioni), trovato tempo fa su EDN, credo.
http://www.electricdruid.net/index.php? ... ts.envgen7
Il metodo che hai descritto è quello che immaginavo, fa piacere avere una conferma.
Il filtro per ora lo lascerei così, anche perché l' ho già montato. In ogni modo non ho grossi problemi a dimensionarne un' altro, se ne venissero fuori ti contatto.
Piuttosto mi spieghi la differenza tra i generatori di numeri pseudocasuali che hai citato (il digitale non è proprio la mia tazza di tè).
Io fino ad ora mi ero basato su un generatore molto semplice (in termini di istruzioni), trovato tempo fa su EDN, credo.
0
voti
[17] Re: Dithering
Continuo a non trovare il filtro a 4 poli che hai usato.
Il solo schema che trovo e` questo.
Tutti i generatori di numeri casuali fatti da un programma sono in realta` pseudocasuali, la sequenza si ripete sempre la stessa e prevedibile. In questa applicazione forse e` opportuno che il generatore non faccia troppi run di valori costanti.
Com'e` il generatore che usi?
Il solo schema che trovo e` questo.
Tutti i generatori di numeri casuali fatti da un programma sono in realta` pseudocasuali, la sequenza si ripete sempre la stessa e prevedibile. In questa applicazione forse e` opportuno che il generatore non faccia troppi run di valori costanti.
Com'e` il generatore che usi?
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
[18] Re: Dithering
Mannaggia Isidoro, mi becchi sempre in castagna.
Non è tutta colpa mia, l' autore del sito ha cambiato tipologia di filtro, tra l' altro dichiara che è un Bessel.
Ora è tardi, mi ripropongo domani di farti lo schema in FidoCad, e possibilmente di metterti la parte di listato del generatore pseudocasuale ( in Pascal).
Se riesco pure il link all' articolo di EDN.
Non è tutta colpa mia, l' autore del sito ha cambiato tipologia di filtro, tra l' altro dichiara che è un Bessel.
Ora è tardi, mi ripropongo domani di farti lo schema in FidoCad, e possibilmente di metterti la parte di listato del generatore pseudocasuale ( in Pascal).
Se riesco pure il link all' articolo di EDN.
0
voti
[19] Re: Dithering
In realta` non era tanto lo schema che volevo vedere, quello lo hai usato anche ti, ma se diceva qualcosa sui criteri di dimensionamento del filtro.
Per il generatore basta il link a edn, chissa` se il pascal me lo ricordo ancora.
Per il generatore basta il link a edn, chissa` se il pascal me lo ricordo ancora.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
1
voti
[20] Re: Dithering
Allora no, l' autore non diceva proprio nulla sul dimensionamento, ad ogni modo anche per provare FidoCad:
La posizione dei poli:

Il link a EDN non riesco più a trovarlo, tra l' altro è diventato di un macchinoso il sito, però:
procedure generate_noise;
begin
asm
rlf _lowbyte
rlf _midbyte
rlf _highbyte
movlw polynomial
btfsc STATUS, C
xorwf _lowbyte, F
end;
PORTB := lowbyte;
end;
Beh è in pascal ma la routine è in assembler.
I tre byte sono assegnati all' inizio così:
lowbyte := $FF;
midbyte := $AA;
highbyte := $AA;
Mentre polynomial è una costante:
const
polynomial : byte = $1A;
Ora non ricordo più se la scelta dei valori iniziali e della costante fosse proprio quello di EDN, ad ogni modo questo era il metodo che spiegavano. A me andava bene perché occupava veramente poche risorse, e comunque il suo lavoro (generare rumore) lo faceva.
La posizione dei poli:

Il link a EDN non riesco più a trovarlo, tra l' altro è diventato di un macchinoso il sito, però:
procedure generate_noise;
begin
asm
rlf _lowbyte
rlf _midbyte
rlf _highbyte
movlw polynomial
btfsc STATUS, C
xorwf _lowbyte, F
end;
PORTB := lowbyte;
end;
Beh è in pascal ma la routine è in assembler.
I tre byte sono assegnati all' inizio così:
lowbyte := $FF;
midbyte := $AA;
highbyte := $AA;
Mentre polynomial è una costante:
const
polynomial : byte = $1A;
Ora non ricordo più se la scelta dei valori iniziali e della costante fosse proprio quello di EDN, ad ogni modo questo era il metodo che spiegavano. A me andava bene perché occupava veramente poche risorse, e comunque il suo lavoro (generare rumore) lo faceva.
21 messaggi
• Pagina 2 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 50 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




