Tra poco comincerò il semestre di Segnali e Sistemi, quel poco che so l'ho studiato tempo fa da autodidatta..
Ci sono concetti che mi ricordo ed altri no, alcune cose che ho tralasciato e altre che penso di non aver appreso a pieno (forse la convoluzione è uno di questi) quindi sto ripassando e studiando in anticipo.
Sto ripassando sul libro Signals & Systems 2nd Edition by Oppenheim, Willsky e Nawab, e sono arrivato al capitolo 2 "Linear Time Invariant Systems", nel quale viene esposto un esempio di una convoluzione tra due segnali discreti:
![y[n] = x[n] * h[n] y[n] = x[n] * h[n]](/forum/latexrender/pictures/d8a48b2d27a26d033ead94bdc39c5cac.png)
La rappresentazione grafica dei segnali e della convoluzione è questa:
Dove:
![y[n] = x[0]h[n - 0] + x[1]h[n-1] = 0.5h[n] + 2h[n-1] y[n] = x[0]h[n - 0] + x[1]h[n-1] = 0.5h[n] + 2h[n-1]](/forum/latexrender/pictures/89133a4148eb91b480e0d71d4481427c.png)
Per chi possiede questo famoso (e stupendo a mio modesto parere) libro, l'esempio è il 2.1 a pag. 80
E quindi mi sono messo di mio conto ed ho voluto farlo in C.
Lo so che potrei andare su Google e scrivere "C convolution" o spulciare il codice sorgente di qualche audio player con effetti speciali, e questo sarebbe quanto basta a scopiazzare e non imparare, ma questo non è il mio obiettivo.
Ecco che ho scritto questo programmino, che è un po' fatto su misura per questo esempio, ma l'importante è rassicurarmi di aver capito bene l'implementazione.
- Codice: Seleziona tutto
#include <stdio.h>
#define NX 2
#define NY 3
int main(void)
{
int n = 0;
int k = 0;
double h[NY] = {1.0, 1.0, 1.0};
double x[NX] = {0.5, 2.0};
double y[NY + 1] = {0};
for(n = 0; n < NY + 1; n++)
{
for(k = 0; k < NX; k++)
{
if(n >= k)
{
/* printf("x[%d]:%.2f\th[%d]:%.2f\ta:%.2f\n", k, x[k], n-k, h[n-k]); */
y[n] += x[k]*h[n - k];
}
}
printf("y[%d] = %.2f\n", n, y[n]);
}
return 0;
}
E questo è l'output, che coincide con l'esempio del libro.
- Codice: Seleziona tutto
y[0] = 0.50
y[1] = 2.50
y[2] = 2.50
y[3] = 2.00
Ovviamente più che interessarmi il risultato dei valori ed esultare tutto contento, mi interessa essere sicuro di aver fatto bene, e quindi di aver capito bene.
Chiedo scusa per eventuali castronerie varie.
Ringrazio in anticipo.
Simo

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)



, e questo è un esempio (spartano) che ho scritto:
e dei suoi indici..
con pochi campioni oppure
e