Conjugué complexe et IFFT

8

J'ai posé une question sur le débordement de pile .

J'ai cependant un petit problème. Comme suggéré par Paul RI suis en miroir mes inférieurs bacs dans les supérieurs bacs.n/2n/2

J'ai cependant quelques questions.

  • Je suppose que est ? Ainsi, pour une commande de 10 IFFT, je mettrais en miroir les 512 bacs de fréquence inférieurs dans les 512 premiers? Cela me produirait également 1024 vrais échantillons à la fin?n2fftOrder
  • Lors de la mise en miroir, cela signifie-t-il que le bac 0 irait au bac , le bac 1 au bac et ainsi de suite?n1n2
  • Il semble que j'obtienne une forme de réflexion à un quart de ma fréquence d'échantillonnage? Cela signifie que la moitié supérieure de ma gamme de fréquences apparaît en fait sur la moitié inférieure. Quelqu'un at-il des idées pourquoi?
  • Quelqu'un a-t-il une idée de la raison pour laquelle j'obtiens un effet de striping où j'obtiens 512 échantillons d'une amplitude et les 512 suivants d'une autre? (Ce "pourrait" être d'où vient ma mise en miroir)

Je pense que c'est tout pour l'instant. Toute aide serait extrêmement utile !!

Edit: vous donner une image de la réflexion sera presque impossible car c'est très difficile à voir! Fondamentalement, j'échantillonne à 22 kHz et n'obtiens que du «bruit» au-dessus de 11 kHz. Ce qui devrait (bien que je fais quelque chose de mal) au-dessus de 11 kHz semble se refléter de 11 kHz à 0. C'est très étrange.

Quant à l'image des rayures on peut les voir ici

Je pense que chaque bande a une largeur de 512 échantillons.

Goz
la source
Je ne sais pas exactement ce que vous entendez par: 1) une certaine forme de réflexion à fs / 4 et 2) effet de rayures ... Pourriez-vous peut-être fournir une figure montrant votre spectrogramme / trame fft indiquant ce que vous entendez par ces ? Je peux supposer ce que vous voulez dire, mais ce ne serait pas très utile.
Lorem Ipsum,
Je suis avec Yoda pour ne pas comprendre votre description, mais la mise en miroir du bac 0 à n-1 semble définitivement incorrecte. La corbeille 0 représente DC et ne doit être mise en miroir nulle part. Si n est pair, alors Bin n / 2 nécessite également une manipulation spéciale. De plus, je déconseille d'appeler un IFFT de 1024 points un IFFT d'ordre 10 car cette terminologie est plus susceptible de confondre que d'aider.
Dilip Sarwate,
@yoda: mis à jour.
Goz
@Dilip Sarwate: Excuses, c'est très difficile à décrire et encore plus difficile à voir.
Goz
@Goz quels sont les axes?
Lorem Ipsum,

Réponses:

4

Je ne suis pas sûr de ce que vous voulez dire avec "réflexion" ou "entrelacement", mais vous voulez dupliquer vos points de données de telle sorte que le signal du domaine fréquentiel (l'entrée de l'IFFT) soit conjugué symétrique. Cela signifie, parN même:

X[k]=X[N-k],k=1,2,,N2-1

Notez que kest à base zéro; le premier élément du vecteur estX[0]. Ce qui précède indique que vous ne dupliquez pas le zéro etN2-th éléments dans le vecteur d'entrée. Cette relation est basée sur la périodicité de la transformée de Fourier discrète ; la première moitié du vecteur domaine de fréquence correspond à des fréquences "positives" couvrant la gamme de fréquences angulaires de0 à (N-1)πN. La seconde moitié couvre deπ à (N-1)2πN, qui, profitant de la 2π périodicité dans le domaine fréquentiel, équivaut à -π à -2πN. Pour que le vecteur du domaine fréquentiel ait une symétrie conjuguée, il peut être facilement démontré que la relation ci-dessus doit être vraie.

S'adressant à votre objectif initial de convertir un spectrogramme en un signal audio qui semble significatif, il n'y a aucune garantie que ce que vous sortez sera de quelque manière agréable. Comme cela a été souligné dans Stack Overflow, le spectrogramme n'a aucune information de phase; la méthode suggérée ici suppose que la phase de chaque groupe de domaine de fréquence est nulle (donc l'opération conjuguée illustrée ci-dessus est superflue). Bien que l'oreille humaine ne soit pas terriblement sensible à la distorsion de phase dans l'audio, vous devrez peut-être faire autre chose en fonction de ce que vous espérez atteindre.

Jason R
la source
3

Votre index [0] est le composant DC et ne doit pas être mis en miroir. Le point de réflexion doit être (N / 2) +1

Dan Barry
la source
1

Disons que vous avez une séquence réelle de 1024 points. Une FFT complexe transforme cela en 1024 nombres complexes. Cependant X [0] (DC) et X [512] Nyuist sont réels et X [1] .. X [511] sont conjugués symétriques de sorte que l'ensemble du spectre peut toujours être représenté avec 1024 nombres (2 réels et 511 complexes). Supposons que vous ayez un spectre à demi-faces X [0] ... x [512] et que vous vouliez en créer la version symétrique conjuguée Y [0] ... Y [1023]. Procédez comme suit

Y[0] = X[0], Y[1] = X[1] .... Y[512] = X[512];
Y[513] = conjugate(X[511]), Y[514] = conjugate(X[510]) ... Y[1023] = conjugate(X[1])

Si vous utilisez Matlab, vous devez ajouter "1" à tous les indices car Matlab commence à compter à 1 (pas à 0).

Hilmar
la source
0

La réflexion est normale: elle s'appelle aliasing, ou repliement de fréquence, et elle se produit lorsque le signal que vous échantillonnez dépasse ce que l'on appelle la fréquence de Nyquist, qui se trouve être la moitié de votre fréquence d'échantillonnage. Idéalement, vous voulez une fréquence d'échantillonnage d'au moins deux fois la fréquence du signal que vous échantillonnez, précisément pour cette raison.

Thomas Lust
la source