Salve a tutti, sto lavorando con un FPGA ad un progettino didattico di filtraggio di dati da DAC ad ADC
In pratica, senza entrare troppo nel dettaglio ho catturato tramite il tool i segnali in ingresso al DAC e all'ADC.
I segnali sono di questo tipo in allegato. sono 2047 elementi
Sono riuscito ad importarli in Matlab e ho creato un vettore per ADC_DB, e stessa cosa ho fatto per gli altri segnali.
Ciò che devo fare è creare un filtro FIR in matlab che prenda in ingresso il Segnale ADC_DB e lo filtri con le stesse specifiche che ho usato via Hardware.
L'obiettivo è avere un confronto dei segnali sia via HW che via SW.
Ovviamente via Hardware ho usato un IP core che si chiama FIR COMPILER e ho parametrizzato il filtro che in uscita ha 14 bit .
Ho provato a vedere FilterDesigner e sono riuscito ad ottenere lo stesso filtro (con i parametri usati nell'ip core)
Qualcuno che può aiutarmi?. Purtroppo in matlab non so muovermi.
Grazie a tutti
Plot di un filtro Fir
24 messaggi
• Pagina 1 di 3 • 1, 2, 3
0
voti
Ciò che devo fare è creare un filtro FIR in matlab che prenda in ingresso il Segnale ADC_DB e lo filtri con le stesse specifiche che ho usato via Hardware.
Premetto che sono di poco aiuto
Decenni fa avrei implementato l'algoritmo del filtro in Basic o C++, oppure con qualche acrobazia in Excell.
Che tipo di filtro FIR implementi: passa basso, banda, alto ? quante celle ?
E un filtro tipo IIR ?

0
voti
Se ho capito bene, vuoi applicare un filtro ad un segnale noto.
Non sono certo un esperto di DSP, ma fin qui penso di poterti aiutare.
Suppongo che tu abbia un vettore con i coefficienti del filtro.
Essendo un filtro FIR, la cosa è molto semplice (ma potrebbe esserlo anche con un IIR, avendo i due vettori).
L'opzione secondo me più semplice e didatticamente più "utile" è l'uso della convoluzione.
Il filtraggio non è altro che una convoluzione per la risposta impulsiva. Nei FIR questa è, per definizione, di durata finita, quindi rappresentabile con un vettore di valori, che poi sono esattamente i coefficienti del filtro (infatti, se applicassi la convoluzione tra un impulso discreto ed i coefficienti del filtro, ritroveresti una sequenza, ossia la risposta impulsiva, che corrisponde esattamente al vettore dei coefficienti).
Magari dico cose banali, ma a volte un punto di vista diverso può essere utile.
Un'altra opzione è quella di usare la funzione apposita, "filter", che forse richiede qualche toolbox.
Questa ti darebbe la possibilità di imparare ad usare uno strumento più complesso, adatto anche a filtri IIR, e con qualche opzione in più:
https://it.mathworks.com/help/matlab/ref/filter.html
Una terza opzione sarebbe quella di scrivere il codice che implementa il filtro con un programma (ciclo for, per capirci), cosa che potrebbe essere utile per capire come verrebbe implementato ad esempio in C su un DSP.
EDIT: Questo è più o meno quello che dice anche
MarcoD, credo (abbiamo scritto quasi contemporaneamente).
Non sono certo un esperto di DSP, ma fin qui penso di poterti aiutare.
Suppongo che tu abbia un vettore con i coefficienti del filtro.
Essendo un filtro FIR, la cosa è molto semplice (ma potrebbe esserlo anche con un IIR, avendo i due vettori).
L'opzione secondo me più semplice e didatticamente più "utile" è l'uso della convoluzione.
Il filtraggio non è altro che una convoluzione per la risposta impulsiva. Nei FIR questa è, per definizione, di durata finita, quindi rappresentabile con un vettore di valori, che poi sono esattamente i coefficienti del filtro (infatti, se applicassi la convoluzione tra un impulso discreto ed i coefficienti del filtro, ritroveresti una sequenza, ossia la risposta impulsiva, che corrisponde esattamente al vettore dei coefficienti).
Magari dico cose banali, ma a volte un punto di vista diverso può essere utile.
Un'altra opzione è quella di usare la funzione apposita, "filter", che forse richiede qualche toolbox.
Questa ti darebbe la possibilità di imparare ad usare uno strumento più complesso, adatto anche a filtri IIR, e con qualche opzione in più:
https://it.mathworks.com/help/matlab/ref/filter.html
Una terza opzione sarebbe quella di scrivere il codice che implementa il filtro con un programma (ciclo for, per capirci), cosa che potrebbe essere utile per capire come verrebbe implementato ad esempio in C su un DSP.
EDIT: Questo è più o meno quello che dice anche
MarcoD ha scritto:Decenni fa avrei implementato l'algoritmo del filtro in Basic o C++, oppure con qualche acrobazia in Excell.
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
Non capisco. Conosci il principio che sta dietro l'implementazione che hai fatto in HW?
Per usare filter hai solamente bisogno di un array con i campioni del segnale (x) e di uno con i coefficienti del filtro (b), che sono i coefficienti del polinomio in z, nella funzione di trasferimento. L'array dei coefficienti del denominatore (a) puoi impostarlo a 1.
Stessa cosa per conv:
Per usare filter hai solamente bisogno di un array con i campioni del segnale (x) e di uno con i coefficienti del filtro (b), che sono i coefficienti del polinomio in z, nella funzione di trasferimento. L'array dei coefficienti del denominatore (a) puoi impostarlo a 1.
- Codice: Seleziona tutto
y = filter(b,a,x)
Stessa cosa per conv:
- Codice: Seleziona tutto
y = conv(x,b)
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
L'array con i campioni lo tengo. Poi in matlab ho usato Filter Designer che è il tool per costruire il filtro. Ho usato gli stessi parametri che ho usato via hardware.
https://it.mathworks.com/help/dsp/ug/us ... igner.html
Per il resto non so come fare il plot
https://it.mathworks.com/help/dsp/ug/us ... igner.html
Per il resto non so come fare il plot
0
voti
E' da tanto che non uso fdatool, ma puoi esportare i coefficienti del filtro in vari modi, tra cui quello "solito", che corrisponde alla forma in cui normalmente si scrive la funzione di trasferimento.
Dopo aver applicato filter, il plot è banale: plot(y).
Dopo aver applicato filter, il plot è banale: plot(y).
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
24 messaggi
• Pagina 1 di 3 • 1, 2, 3
Torna a Programmi applicativi: simulatori, CAD ed altro
Chi c’è in linea
Visitano il forum: Nessuno e 8 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)



