2011-04-26 6 views
0

Je fais une affectation pour générer un écho sur Matlab en utilisant la convolution Je ne comprends pas ce que fait effectivement wavread. Est-ce que la sortie est un vecteur que je peux utiliser dans une convolution?Convolution d'un fichier wavfile sur Matlab

J'ai essayé ainsi et ai eu une erreur "A et B doivent être des vecteurs."

Une autre question: Si le signal que je reçois du fichier wave est x(t), comment puis-je obtenir x(t-4)?

+0

vous devez fournir plus d'informations sur ce que vous essayez de faire. Il est tout à fait possible que le deuxième signal avec lequel vous convoluez n'est pas un vecteur. Ou vous pourriez lire dans les données multi-canal. – abcd

Répondre

0

Oui, wavread produit un vecteur pour sa sortie (utilisez l'aide de Matlab ou tapez 'docsearch wavread' dans la fenêtre de commande). Vous pouvez également vérifier à l'aide de la fonction isvector (x).

Les vecteurs Matlab utilisent l'indexation pour identifier l'emplacement dans le vecteur, ici, votre signal x. Si vous avez utilisé wavread ainsi:

x = wavread(*filename*) 

alors x peuvent être appelés comme x ou x (:), ou x (1: fin). Ceci est important si vous voulez référencer x (t-4). Si x (t) peut être représenté par x (1: fin), alors que devrait être x (t-4)?

L'astuce, cependant, est qu'un indice ne peut jamais être une valeur négative, vous pouvez pas dire simplement x (t-4) est x (-3: fin-4). Avec la convolution, vous devrez peut-être utiliser un remplissage nul, si ce n'est déjà fait dans votre fonction de convolution. J'espère que cela aide, et bonne chance!

+0

Pouvez-vous expliquer ce que vous voulez dire par un remplissage rapide par un exemple rapide? aussi isvector (x) donne un zéro donc ce n'est pas un vecteur – AKenawy

+0

Si isvector (x) est faux, alors vous n'utilisez probablement pas correctement wavread ou le fichier que vous regardez n'est pas un fichier .wav. Regardez la documentation pour wavread. – Thea

1

Comme je l'ai dit dans mon commentaire, vous essayez de lire plus probablement dans un fichier audio à canaux multiples, auquel cas wavread pourrait plus revenir probablement un tableau NxM, où N est le nombre d'échantillons et M est le Nombre de canaux. Pourriez-vous poster la sortie de size(x), où x est la sortie de wavread?

Selon ce que vous voulez faire, vous pouvez soit en moyenne à travers les canaux pour obtenir un seul vecteur audio (comme un mono) comme xAvg=mean(x,2);, ou vous pouvez choisir un canal spécifique pour travailler avec comme xChannelK=x(:,k);, où 1<=k<=M est le canal choisi.

En réponse à votre commentaire ci-dessus sur zéro padding, rappelez-vous que dans une opération de convolution entre un point n et un signal de point m, vous vous retrouvez avec une sortie de points m+n-1. Dites que vous voulez convoluer A=[a1,a2,a3] et B=[b1,b2,b3]. Vous devez d'abord retourner l'un des vecteurs et le faire glisser à travers l'autre, tout en multipliant les points et en ajoutant le résultat à chaque étape.

Toutefois, lorsque vous retournez autour, le second vecteur dépasse dans l'espace de séquence en des points où l'autre fonction est non définie (et vice versa). Vous devez donc les remplir de zéros jusqu'à ce qu'ils soient tous deux de la même longueur.

Ceci est mieux illustré par un exemple. Le premier point de la sortie est

0 0 a1 a2 a3 
b3 b2 b1 0 0 
-------------------- 
0 + 0 + a1b1 + 0 + 0 
-------------------- 

= a1b1 

Ici, nous avons rembourré A et B avec des zéros aux endroits où l'autre n'est pas défini. Le deuxième point de la sortie est

0 a1  a2 a3 0 
b3 b2  b1 0 0 
----------------------- 
0 + a1b2 + a2b1 + 0 + 0 
----------------------- 

= a1b2+a2b1 

et ainsi de suite.Vous devriez passer par le wiki article on convolution pour plus d'informations. Cependant, vous n'avez pas besoin de le faire à la main. Le conv de MATLAB le fera automatiquement pour vous. Donc, tout ce que vous devez faire est de mettre vos vecteurs en ordre et vous êtes prêt à partir.

+0

Gotcha merci – AKenawy

Questions connexes