Coniugato complesso e IFFT


8

Ho fatto una domanda sull'overflow dello stack .

Sto avendo un leggero problema comunque. Come suggerito da Paul RI, rispondo al mio basson/2 bidoni nella parte superiore n/2 cassonetti.

Ho alcune domande comunque.

  • presumo n è 2fftOrder? Quindi per un ordine IFFT 10 rispecchierei i bin di frequenza 512 inferiori con i 512 migliori? Ciò produrrebbe anche 1024 campioni reali alla fine?
  • Quando il mirroring significa che bin 0 andrebbe nel cestino n1, dal cestino 1 al cestino n2 e così via?
  • Mi sembra che stia ottenendo una qualche forma di riflessione a un quarto della mia frequenza di campionamento? Ciò significa che la metà superiore della mia gamma di frequenza viene effettivamente visualizzata nella metà inferiore. Qualcuno ha qualche idea del perché?
  • Qualcuno ha idea del perché sto ottenendo un effetto di striping in cui ottengo 512 campioni di una grandezza e i successivi 512 di una diversa? (Questo "potrebbe" essere da dove proviene il mio mirroring)

Penso che sia tutto per ora. Qualsiasi aiuto sarebbe estremamente utile !!

Modifica: darti un'immagine del riflesso sarà quasi impossibile poiché è molto difficile da vedere! Fondamentalmente sto campionando a 22 kHz e non ricevo altro che "rumore" sopra gli 11 kHz. Ciò che "dovrebbe" (anche se ovviamente sto facendo qualcosa di sbagliato) al di sopra degli 11 kHz sembra riflettersi da 11 kHz a 0. È molto strano.

Per quanto riguarda l'immagine delle strisce, possono essere viste qui

Ogni striscia, credo, è larga 512 campioni.


Non sono chiaro su cosa esattamente intendi per: 1) una qualche forma di riflesso su fs / 4 e 2) effetto di striping ... Potresti forse fornire una figura che mostra il tuo spettrogramma / trama di fft sottolineando cosa intendi con questi ? Posso presumere che cosa intendi, ma non sarebbe molto utile.
Lorem Ipsum,

Sono con Yoda nel non riuscire a capire la tua descrizione, ma il mirroring bin da 0 a n-1 suona decisamente errato. Bin 0 rappresenta DC e non dovrebbe essere specchiato da nessuna parte. Se n è pari, anche Bin n / 2 richiede una gestione speciale. Inoltre, vorrei sconsigliare di chiamare un IFFT a 1024 punti un IFFT a 10 ordini poiché questa terminologia ha maggiori probabilità di confondere che di aiutare.
Dilip Sarwate,

@yoda: aggiornato.
Goz,

@Dilip Sarwate: scuse, è molto difficile da descrivere e ancora più difficile da vedere.
Goz,

@Goz quali sono gli assi?
Lorem Ipsum,

Risposte:


4

Non sono sicuro di cosa tu stia arrivando con "riflessione" o "striping", ma vuoi duplicare i tuoi punti di dati in modo tale che il segnale del dominio di frequenza (l'input all'IFFT) sia coniugato simmetrico. Ciò significa che perN anche:

X[K]=X*[N-K],K=1,2,...,N2-1

Nota che Kè a base zero; il primo elemento nel vettore èX[0]. Quanto sopra indica che non si duplica zeroth eN2-th elementi nel vettore di input. Questa relazione si basa sulla periodicità della trasformata discreta di Fourier ; la prima metà del vettore del dominio della frequenza corrisponde alle frequenze "positive" che coprono la gamma di frequenza angolare da0 per (N-1)πN. La seconda metà copre daπ per (N-1)2πN, che, sfruttando il 2π la periodicità nel dominio della frequenza è equivalente a -π per -2πN. Affinché il vettore nel dominio della frequenza abbia una simmetria coniugata, allora si può facilmente dimostrare che la relazione sopra deve essere vera.

Parlando al tuo obiettivo originale di convertire uno spettrogramma in un segnale audio che suona significativo, non vi è alcuna garanzia che ciò che si ottiene sarà in alcun modo piacevole. Come è stato sottolineato su Stack Overflow, lo spettrogramma non ha informazioni sulla fase; il metodo suggerito in questo caso presuppone che la fase di ciascun contenitore del dominio di frequenza sia zero (quindi l'operazione coniugata mostrata sopra è superflua). Mentre l'orecchio umano non è terribilmente sensibile alla distorsione di fase nell'audio, potresti dover fare qualcos'altro a seconda di ciò che speri di ottenere.


3

Il tuo indice [0] è il componente DC e non deve essere sottoposto a mirroring. Il punto di riflessione dovrebbe essere (N / 2) +1


1

Supponiamo che tu abbia una sequenza reale di 1024 punti. Un FFT complesso lo trasforma in 1024 numeri complessi. Tuttavia X [0] (DC) e X [512] Nyuist sono reali e X [1] .. X [511] sono coniugati simmetrici, quindi l'intero spettro può ancora essere rappresentato con 1024 numeri (2 reali e 511 complessi). Supponiamo che tu abbia uno spettro a metà faccia X [0] ... x [512] e desideri crearne la versione simmetrica coniugata Y [0] ... Y [1023]. Fare quanto segue

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])

Se usi Matlab devi aggiungere "1" a tutti gli indici poiché Matlab inizia a contare da 1 (non da 0).


0

Il riflesso è normale: si chiama alias, o frequenza di piegatura, e succede quando il segnale che stai campionando supera quella che è chiamata la frequenza di Nyquist, che è metà della frequenza di campionamento. Idealmente, vuoi una frequenza di campionamento di almeno il doppio della frequenza del segnale che stai campionando, proprio per questo motivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.