2011-07-26 8 views
1

J'essaie de mettre en œuvre un vocodeur de canal en utilisant les algorithmes iOS Accelerate vDSP FFT. J'ai du mal à trouver comment traiter le composant CC et la fréquence de Nyquist.Vocodeur de canal en utilisant FFT - que faire à propos de la composante DC et de la fréquence de Nyquist?

Les signaux de modulateur et de porteuse sont tous deux des matrices flottantes de longueur n. Sur chacun, j'effectue une FFT directe et je retourne un tracé de fréquence (appelez-le bin []) de longueur n/2. Selon les spécifications vDSP, bin [1] contient la première fréquence au-dessus de 0Hz, bin [2] le second, etc ... bin [0] contient le composant DC dans la partie réelle et la fréquence de Nyquist (qui serait normalement dans bin [n/2]) dans la partie imaginaire. vDSP emballe essentiellement le tracé de fréquence dans un espace aussi réduit que possible (la partie imaginaire pour bin [0] et bin [n/2] doit toujours être nulle avant l'empaquetage).

Je divise le tracé de fréquence pour la porteuse et le modulateur en k bandes. Mon but est de multiplier chaque fréquence dans carrier.band [x] par l'amplitude totale des fréquences dans modulator.band [x]. Essentiellement, augmenter l'intensité de ces fréquences dans le porteur qui sont également présentes dans le modulateur. Donc, si n = 8 et k = 2, la deuxième bande pour le modulateur contiendrait bin [2] et bin [3]. Assez simple pour trouver l'amplitude totale, additionnez simplement les valeurs de chaque bin (par exemple mag [2] = sqrt (bin [2] .real * bin [2] * real + bin [2] .imag * bin [2] * imag)).

Cela fonctionne très bien pour toutes les bandes sauf la première, car la première bande contient la bin bizarre [0] avec la composante CC et la fréquence de Nyquist.

Comment gérer cette première case lorsque je calcule l'amplitude totale d'une bande? Est-ce que je suppose que l'ampleur de la première corbeille est JUSTE la composante DC par elle-même? Est-ce que je rejette la fréquence de Nyquist?

Merci à tous ceux qui peuvent vous guider! Je vous en suis reconnaissant.

Répondre

0

Je vous suggère d'ignorer 0 Hz et Nyquist car ils ne contiennent aucune information utile dans le cas d'un signal audio.

+0

Merci Paul. Dites que je termine de diviser tous les bins par 2, sauf bin [0], donc la magnitude de tous les bins sauf bin [0] sont divisés par deux. Lorsque je fais la FFT inverse pour le convertir en un signal dans le domaine temporel, est-ce que je remarquerai des effets en ne changeant pas bin [0]? Ou le signal dans le domaine temporel sera-t-il exactement le même que si je n'apportais aucun changement aux autres corbeilles? – Albeit

+0

@Albeit: Vous pouvez simplement mettre à zéro le composant 0 Hz. Pour les signaux audio, il devrait être proche de zéro de toute façon - les décalages DC ne sont ni utiles ni souhaitables dans l'audio. –

Questions connexes