Digital Filter Design aiutare Chebyshev ->

N

neuralc

Guest
Ciao tutti,

Sto cercando di progettare un filtro di Chebyshev lowpass digitale IIR per ottenere la media dei sinesoidal onda con qualche taglio
di un triac.

Per fare che io cerco di utilizzare Filte.r Solution.s, ma se mi specificare firma 10 bit (per usare un ADC a 10 bit di 16F870) ottenere la saturazione del filtro ...

Alcuni suggerimenti sono uno di farlo.

Thank'sNeuralC

*****************************************
Ti preghiamo di non rispondere a meno che non si hanno informazioni utili da aggiungere su questo post.Thanks.

 
Nel tuo caso credo che non vi è problema con il compilatore.10 cifre firma da FS non significa 10bit.10bit significa ~ 0,001 solo 3 o meglio 4 cifre sono sufficienti.Penso che problema potrebbe essere che compiller non sa cosa fare con tante cifre, o forse si dovrebbe dichiarare costanti come galleggiante, o con 10bit di conversione A / D -> float (penso di usare galleggianti).Penso che prima di iniziare a pensare al filtro, controllare i calcoli (calcolare quello che dovrebbe essere e poi controllare i valori simulati).
D'altro canto verificare FS risposta.Ho simulato nel circuito P * rotel e non vi sono state risposte diverse rispetto FS (circa la metà del decennio !!!).Ma non ci sono stati problemi con filtri digitali

KamW
 
Hi neuralc

potete trovare una buona base su questo argomento nel libro di Oppenheim e Schafer 'discreto-trattamento dei segnali in tempo'.

Come ho Filte.r Solution.s non utilizzati, non posso dire nulla al riguardo.Darò alcune idee su un metodo per evitare la saturazione.

Problemi di saturazione a seconda della aritmetica che si sta utilizzando.

(this is important).

Con virgola mobile non dovrebbe esserci alcun problema, quindi immagino che si sta utilizzando l'aritmetica punto fisso (ad esempio 16 bit) con 10-bit di dati in ingresso allineate verso bit meno significativo
(questo è importante).

Immagino che si sta utilizzando una cascata di secondo ordine sezioni.È possibile calcolare (o da ottenere simulazione) il guadagno massimo della prima sezione (al culmine della sua risposta in frequenza), e con quella, la massima ampiezza di ingresso ammissibile per non saturare tale sezione.Se questo ingresso è di ampiezza inferiore a quello che ci si aspetta,
dovete scala (attenuare) l'ingresso in ordine al fine di evitare la saturazione.
Hai a procedere nello stesso modo con le altre sezioni del filtro.In ogni fase, attenuare l'uscita di quello precedente, se necessario.Non attenuare troppo, al fine di preservare la precisione.
Questo metodo assicura che lei non avrà alcuna saturazione con ingresso sinusoidale.(Ci sono altri criteri e metodi, ma questo è ok).

Spero che questo aiuto.Se avete bisogno di maggiori dettagli, let me know.
Saluti

Z

[Questo messaggio è stato curato da: Zorro su 2002-01-31 17:00]

 
THX tutti,

KamW:
In FS quando vai a discreta funzione di trasferimento, e si seleziona "unsign bin fissare" l'etichetta firma cifre sono cambiate a firma bit,
in modo che io Tink I'm corretta (10 firma per un po
'di 10 bit ADC).
Altre cosa strana è ovunque si utilizza Unsign FLT Bin Bin Fix Unsign o il codice generato da FS utilizzare sempre le variabili in virgola mobile!Zorro:
La mia conoscenza IIR sono molto poveri, quando si parla 'allineato verso bit meno significativo' ciò che si intende con questo?(i 10 bit sono allineati a sinistra o verso destra
all'interno della parola a 16 bit?)

Voi sapete alcuni app (non FS) dove si può simulare il filtro IIR e ottenere automaticamente il codice C per la
sua attuazione?THX

NeuralC
 
Hi NeuralC,

Come rispondere alla tua domanda, ho inteso dire che la 10 bit deve essere allineato a destra (che occupa la parte inferiore di una parola a 16-bit).I restanti 6 bit sono l'estensione delle più significative (segno) po 'di 10-bit di valore.Poiché il primo ordine 2a sezione può avere un guadagno maggiore di unità, se l'ingresso è forte si rischia di arrivare alla saturazione di uscita se il valore è allineato a sinistra (in direzione MSB).

State lavorando con un codice sorgente C?Se è così, si può inviare a me (con le caratteristiche del filtro), al fine di dare
un'occhiata e vi aiuti ...

Saluti

Z
 
Hi NeuralC,

pensare di nuovo alla vostra domanda, forse
c'è qualcosa di meglio e di più facile che puoi fare se ciò di cui avete bisogno è quello di misurare il valore medio di un segnale periodico.

Somma campioni su un intero periodo (o un numero intero di periodi).Non importa in quale fase del segnale periodico si avvia.In questo modo, si avrà una media del segnale su un ciclo moltiplicato per il numero di campioni accumulati.Se la frequenza di campionamento è un multiplo del segnale periodico, la misura non ha ancora ondulazione.

Se non che a continiously Avery ciclo (o N cicli), questo equivale a utilizzare un filtro FIR averager impulso la cui risposta è una finestra rettangolare, seguito da un decimator (downsampler).La funzione di trasferimento è a zero e la frequenza fondamentale in tutte le sue armoniche,
in modo non ondulazione.

Questo metodo è semplice e molto veloce, come tutto ciò che serve è quello di eseguire somme (non prodotti).L'unica cautela è che dovete usare un accumulatore abbastanza a lungo in orded per evitare la saturazione.
Saluti

Z
 
Hi neuralc
Lei ha ragione, non vi è possibilità di troncare al numero di bit, ma credo che non funzionano.Verificare FS e trovato, che se io uso firmato o non firmati, ci sono sempre galleggianti, e numeri negativi.E 'molto interessante, di proprietà di FS non è forse è problema con c * r * a * c * k.
ma tornare alla vostra domanda.Ho sempre simulare filtri parametri VEE.Quindi, se avete problemi PM FS file, ho potuto verificare come funziona.
 
Salve,

Ho pensare nella soluzione di una somma di tutti i campioni in un periodo e alla fine fare la divisione.Il problema che trovo la sua il fatto che ogni campione può raggiungere il valore 3Ff, così con una parola 16bit posso somma un massimo di 64 campioni (che s sono sufficienti?).Ogni ciclo ha un periodo di 10 ms (100Hz), con una frequenza di campionamento di 6400 Hz, non Ondulazione?Dal ciclo per ciclo devo somma valore precedente con l'attuale divisione e fare da traino?

Il mio problema principale è il tempo che la scissione ha 16bit, (sto usando un 16f870 a 10 Mhz (400 ns)) ...sai asm o codice C che per migliorare?Grazie per l'aiuto,

NeuralC
 
Hi NeuralC,

il problema si parla (massimo numero di campioni al fine di garantire non saturazione) è il soggetto di cui al momento mi dice che si potrebbe avere l'attenzione di utilizzare un accumulatore abbastanza a lungo.Se siete di programmazione in C, l'uso di una variabile di tipo long per l'accumulatore (assicuratevi che il vostro compilatore usi 32-bit per lungo variabili).Se si utilizza linguaggio assembly, utilizzare più
di precisione (24 o 32 bit) aritmetica.

Divisione non è un problema se il divisore è una potenza di due: in questo caso la divisione è solo uno spostamento aritmetica (ad esempio, dividere per 64 a 6 posti spostamento a destra).Al fine di preservare la precisione, è possibile eseguire l'arrotondamento (anziché troncamento) sommando 1 (incrementati di unità), l'accumulatore che precede l'ultimo turno.

Anche se la forma d'onda si è posto rimedio a 100 Hz di frequenza, è preferibile a una completa campione 50Hz periodo (o un numero intero di loro), perché i due cicli di mezzo-non devono essere identici.

Ad esempio, se la frequenza di campionamento è 6400 Hz, in un ciclo di 50 Hz (20 ms), si somma a 128 campioni.

signal you will shift it 7 places at right.

Dopo sommatoria, l'accumulatore contiene la media delle forme d'onda moltiplicato per 128 e, se si desidera che il risultato dello stesso fattore di scala rispetto al
segnale originale
che si sposterà a destra 7 posti.Ma a seconda di ciò che si vuole fare con questo risultato, forse avete bisogno di un diverso fattore di scala,
in modo forse si deve applicare un diverso numero di turni.

Non
c'è bisogno di una misurazione media con il precedente da ciclo a ciclo.Potete farlo, naturalmente, e si ottiene una diversa caratteristica di filtraggio.

Spero che questo aiuto.Rimani collegato.

Z
 
Hi NeuralC
Con semplice calcolo nel vostro orologi (6400Hz con orologio 10MHz) si potrebbe trovare, che ci sia tempo solo per 2 o più uno per ogni punto di divisione in virgola mobile matematica.Penso che ci sia "filtro", che potrebbe risolvere il problema.Se si conosce la frequenza,
la forma e la fase del segnale che si può usare tecniche di correlazione (per caled trovato filtraggio) è sufficiente un solo multipe e oltre al punto (con tavolo).Oppure, se si dont know fase, si dovrebbe usare calcoli complessi (due volte avete bisogno di calcoli).E 'molto efficace e veloce metodo che ho usato.Per maggiori informazioni controllare http://www.dspguide.com chapter7.(Ho visto da qualche parte in copia FM1)
 
Hi NeuralC
Con semplice calcolo nel vostro orologi (6400Hz con orologio 10MHz) si potrebbe trovare, che ci sia tempo solo per 2 o più uno per ogni punto di divisione in virgola mobile matematica.Penso che ci sia

 
Ciao a tutti,

Zoro:

La mia idea di somma i valori medi da ciclo a ciclo è perché il sistema in cui il filtro verrà incluso è di controllare la media di tyristor controllata onda.Quindi, se ho la somma dei valori che posso vedere in che modo l'output è corretto cambiare e per il valore desiderato.KamW:

Parlando nuovamente su FS, ora non abbiamo bisogno della cr (a) per la CK, vai a questo post e ottenere la licenza:
http://www.elektroda.pl/eboard/viewtopic.php?topic=10816&forum=3

ma sia con il presente codice C generare sempre con galleggiante ....

THX

NeuralC
 
Hi NeuralC,

Citazione:Il 2002-02-07 14:06, neuralc ha scritto:

.....

La mia idea di somma i valori medi da ciclo a ciclo è perché il sistema in cui il filtro verrà incluso è di controllare la media di tyristor controllata onda.
Quindi, se ho la somma dei valori che posso vedere in che modo l'output è corretto cambiare e per il valore desiderato.

.....

 

Welcome to EDABoard.com

Sponsor

Back
Top