Esercizi di programmazione
- Dato un array di 256 elementi contenente i campioni di un periodo di sinusoide, crearne un altro, della stessa dimensione, contenente i valori della stessa sinusoide ma a fase invertita.
- Dato un array, di dimensione 256, contenente un segnale campionato contare il numero di valori nulli (= 0) in esso presenti.
- Dato lo stesso array dell'esercizio precedente
contare il numero degli attraversamenti dello zero.
Per realizzare questo programma occorre essere consapevoli che per
attraversamento dello zero si intende il punto in cui la curva che rappresenta
graficamente il segnale attraversa l'asse delle x o, con altre parole, il punto in cui
tale curva cambia di segno. Tale esercizio è analogo al precedente e può essere la base
per un algoritmo di misura della frequenza di un segnale campionato; la differenza con il
precedente consiste nel fatto che, pur attraversando lo zero, a causa del campionamento
potrebbe non essere presente nell'array nessun valore nullo. Ad es., dall'esame dei valori
contenuti nel seguente array
0 _ | 1 _ | 2 _ | 3 _ | 4 _ | 5 _ | 6 __ | 7 _ | 8 _ | 9 |
1.0 | 3.0 | 2.0 | 0.5 | -1 | -2 | -0.5 | 0.2 | 1.2 | 4.0 |
possiamo osservare che si verifica un attraversamento dello 0 fra il 3° e il 4° elemento e fra il 6° e il 7°.
- Dato lo stesso array dell'esercizio precedente
contare il numero di picchi positivi.
Un picco positivo è un punto di massimo della funzione che
rappresenta il segnale. La caratteristica di un punto di massimo è che il relativo valore
della funzione è maggiore o uguale ai valori che assume la funzione a sinistra e a destra
nelle vicinanze. Ad es., la sinusoide ha un picco positivo in corrispondenza di p/2: infatti i valori che si trovano
intorno a quel punto sono minori o uguali al valore che ivi assume la funzione.
- Dato lo stesso array dell'esercizio precedente contare il numero di picchi negativi.
- Generare un array di 16384 elementi contenente i
campioni di un singolo periodo di sinusoide normalizzata a 1.
Quest'ultima affermazione significa che il massimo valore che
possono assumere i campioni contenuti nell'array è 1. Suggerimento: ricordando che la
funzione seno ha periodo 2p, dobbiamo dividere l'intervallo [0,2p] in 16384 parti e creare un ciclo che calcoli il seno per ognuno dei 16384
valori così generati (cioè sin(i*6.28/16384) in cui i è l'indice del
ciclo che va da 0 a 16383).
- Avendo a disposizione la look-up table generata nell'esercizio precedente (modificandolo in modo che diventi un sottoprogramma) realizzare un programma di oscillatore virtuale. I campioni in uscita dovranno essere memorizzati in un file su disco.
- Realizzare un programma che permetta di
introdurre una sequenza melodica di non più di 20 note in un array e che crei altri 3
array contenenti le forme a specchio della sequenza originaria (R, I, RI).
Le note dovranno essere codificate secondo il sistema adottato
nella pitch-class set analysis di A. Forte.
- Realizzare un programma che permetta di
introdurre un "cantus firmus" di non più di 10 note in un array e che
crei un contrappunto di prima specie in un altro array.
V. sopra.
- Rifare lo stesso esercizio ma usando un array a 2
dimensioni, una per il cantus firmus e l'altra per il suo contrappunto.
V. sopra.