[C] Filtraggio suoni con dati memorizzati in array
Inviato: 10 feb 2011, 11:42
SALVE,
sto affrontando un problema di codifica in C, di un filtro dei segnali audio
Ho due array x, e y di dimensioni 1xn contente le informazioni relative a due file sonori. Devo Implementare una funzione che permette la mistura dei due segnali secondo la seguente relazione: z[ i ]=A[0]x[ i ]+A[1]y[ i ]
dove A è un array di dimensioni 1x2 i cui valori di amplificazione sono compresi nell intervallo [0,1], e sono inseriti dall utente.
Successivamente implementare il seguente filtraggio della mistura z[ i ] in modo da ottenere un nuovo suono filtrato y[ i ]=sommatoria di k=0; che va a k=9; C[k]z[i+k].....dove C è un vettore di coefficienti inseriti dall utente e di dimensione 10. Si noti che per ottenere il filtraggio bisogna aggiungere degli zero alla fine della sequenza z[ i ].
I suoni vengono inizializzati casualmente con valori float nell intervallo [-10,10] e i coefficienti vengono inseriti dall utente.
ho implementato il seguente codice dove ho dichiarato ed inizializzato gli elementi:
il problema che mi persuade è come faccio a fare la mistura secondo z [ i ]=A[0]x[ i ]+A[1]y[ i ]
sto affrontando un problema di codifica in C, di un filtro dei segnali audio
Ho due array x, e y di dimensioni 1xn contente le informazioni relative a due file sonori. Devo Implementare una funzione che permette la mistura dei due segnali secondo la seguente relazione: z[ i ]=A[0]x[ i ]+A[1]y[ i ]
dove A è un array di dimensioni 1x2 i cui valori di amplificazione sono compresi nell intervallo [0,1], e sono inseriti dall utente.
Successivamente implementare il seguente filtraggio della mistura z[ i ] in modo da ottenere un nuovo suono filtrato y[ i ]=sommatoria di k=0; che va a k=9; C[k]z[i+k].....dove C è un vettore di coefficienti inseriti dall utente e di dimensione 10. Si noti che per ottenere il filtraggio bisogna aggiungere degli zero alla fine della sequenza z[ i ].
I suoni vengono inizializzati casualmente con valori float nell intervallo [-10,10] e i coefficienti vengono inseriti dall utente.
ho implementato il seguente codice dove ho dichiarato ed inizializzato gli elementi:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{int i,k;
float x[20];
float y[20];
float A[2]={0.1F,0.5F}; /*valori di amplificazione*/
float C[10]={1.0F,1.1F,2.2F,2.3F,2.6F,4.1F,4.5F,5.2F,5.3F,5.4F}; /*vettore coefficienti*/
float z[100];
float x_casuale;
float y_casuale;
srand(time(NULL));
for(i=0; i<20;i++){
x_casuale=-10.0F+20.0F*(float)rand()/(float)RAND_MAX;
x[i]=x_casuale;
printf("\nvisualizza %d-esimo di x:%f\n",i,x[i]);
}
printf("\n\n\n\n");
for(i=0; i<20;i++){
y_casuale=-10.0F+20.0F*(float)rand()/(float)RAND_MAX;
y[i]=y_casuale;
printf("\nvisualizza %d-esimo di y:%f\n",i,y[i]);
}
system ("color 2");
system("PAUSE");
return 0;
}
il problema che mi persuade è come faccio a fare la mistura secondo z [ i ]=A[0]x[ i ]+A[1]y[ i ]
, io la conosco sotto questa forma
, dove t varia tra 1 (solo segnale x[n]) a 0 (solo segnale y[n]).