Pagina 1 di 3

Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 2:00
da jayeffe
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

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 10:53
da g.schgor

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 11:01
da jayeffe
Grazie. Devo lavorare con MATLAB però

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 11:18
da MarcoD
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 :mrgreen: .
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 ? O_/

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 11:22
da SandroCalligaro
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. :D

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 Foto UtenteMarcoD, credo (abbiamo scritto quasi contemporaneamente).
MarcoD ha scritto:Decenni fa avrei implementato l'algoritmo del filtro in Basic o C++, oppure con qualche acrobazia in Excell.

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 12:16
da jayeffe
Esattamente ho visto la funzionalità filter, ma non so implementarlo nel mio caso. via hardware il filtro funziona

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 12:22
da SandroCalligaro
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.
Codice: Seleziona tutto
y = filter(b,a,x)


Stessa cosa per conv:
Codice: Seleziona tutto
y = conv(x,b)
(in questo caso, l'ordine non è rilevante).

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 12:29
da jayeffe
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

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 12:47
da SandroCalligaro
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).

Re: Plot di un filtro Fir

MessaggioInviato: 5 feb 2022, 13:04
da jayeffe
applicando la funzione filter mi esce questo plot qui
questo facendo plot(y)