Come spostare in modo circolare un segnale di una frazione di un campione?


22

Il teorema del turno dice :

Moltiplicare per una fase lineare per un numero intero m corrisponde a uno spostamento circolare dell'uscita : viene sostituito da , dove viene interpretato il pedice modulo N (cioè periodicamente).xn e2πiNnmXkXkXkm

Ok, funziona benissimo:

plot a

segnale arbitrario a 9 campioni

N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))

segnale spostato di 3 campioni nel dominio della frequenza

Si è spostato di 3 campioni, come mi aspettavo.

Ho pensato che potresti farlo anche per spostare le frazioni di un campione, ma quando lo provo, il mio segnale diventa immaginario e per nulla simile all'originale:

plot real(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N)))
plot imag(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N))), 'b--'

segnale dopo la moltiplicazione per 3,5 esponenziali complessi

Non me lo aspettavo affatto. Questo non equivale alla convoluzione con un impulso reale che è stato spostato di 3,5 campioni? Quindi l'impulso dovrebbe essere ancora reale e il risultato dovrebbe essere ancora reale? E dovrebbe avere più o meno la stessa forma dell'originale, ma sinceramente interpolato?


Ecco una presentazione di Matlab File Exchange che calcola la modulazione corretta per segnali reali / complessi di lunghezza pari / dispari e li ritarda in modo frazionario
Ahmed Fasih

Risposte:


14

Se si desidera che l'uscita spostata dell'IFFT sia reale, la torsione / rotazione di fase nel dominio della frequenza deve essere coniugata simmetrica, così come i dati. Ciò può essere ottenuto aggiungendo un offset adeguato all'esponente del tuo exp () complesso, per la data pendenza di fase, in modo che la fase della metà superiore (o negativa), modulo 2 Pi, rispecchi la metà inferiore nell'apertura FFT . La complessa funzione di spostamento esponenziale può anche essere resa simmetrica coniugata indicizzandola da -N / 2 a N / 2 con una fase di zero all'indice 0.

Accade così che l'offset appropriato per le torsioni o le spirali di fase, che completano un intero esatto multipli di 2 rotazioni di Pi in apertura, per essere coniugato simmetrico in apertura, è zero.

Con un vettore di torsione di fase simmetrica coniugato, il risultato dovrebbe quindi finire come interpolazione Sinc circolare per spostamenti non interi.

Elaborazione tramite OP:

La tua scelta di k = [0, 1, 2, 3, 4, 5, 6, 7, 8] sta producendo un esponenziale complesso asimmetrico:

tentativo di spostamento del campione 0,5 esponenziale complesso asimmetrico, con parte immaginaria come linea tratteggiata

Se usi invece k = [0, 1, 2, 3, 4, -4, -3, -2, -1], otterrai un esponenziale complesso simmetrico di Hermite:

plot(fftshift(exp(-1j * 2*pi * 0.5/N * k)))

Complesso esponenziale simmetrico eremita per 0,5 spostamenti di campione, con parte immaginaria come linea tratteggiata

e ora quando si utilizza la stessa formula esponenziale per spostare di 0,5 o 3,5 campioni, si ottiene un risultato reale:

plot ifft(fft(a)*exp(-1j * 2 * pi * 0.5/N *k))
plot ifft(fft(a)*exp(-1j * 2 * pi * 3.5/N *k))

spostare di 0,5 e 3,5 campioni, con originale come linea tratteggiata


Aha! Invece di k = [0, 1, 2, 3, 4], dovrei usarek = [0, 1, 2, -2, -1]
endolith

@endolith / hotpaw2, in altre parole si tratta dell'indicizzazione degli esempi nel dominio del tempo?
TheGrapeBeyond

1
La simmetria attorno al cestino 0 fornirà anche simmetria attorno a N / 2, anche se N / 2 non è un numero intero.
hotpaw2,

1
Ho trovato una funzione che applica la modulazione corretta su Matlab File Exchange: mathworks.com/matlabcentral/fileexchange/7886-fshift 👏!
Ahmed Fasih,

1
questo vale allo stesso modo per segnali complessi?
Leone,
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.