Multiplicando por uma fase linear e 2 π i para algum número inteiromcorresponde a umdeslocamento circularda saídaXk:Xké substituído porXk-m, onde o subscrito é interpretado no móduloN(ou seja, periodicamente).
Ok, isso funciona bem:
plot a
N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))
Mudou em 3 amostras, como eu esperava.
Eu pensei que você também poderia fazer isso para mudar por frações de uma amostra, mas quando eu tento, meu sinal se torna imaginário e nada parecido com o original:
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--'
Eu não esperava isso. Isso não equivale a convolver com um impulso real que foi alterado por 3,5 amostras? Então o impulso ainda deve ser real, e o resultado ainda deve ser real? E deveria ter mais ou menos a mesma forma que o original, mas sincero interpolado?
Respostas:
Se você deseja que a saída deslocada do IFFT seja real, a torção / rotação de fase no domínio da frequência deve ser conjugada simétrica, bem como os dados. Isso pode ser conseguido adicionando um deslocamento apropriado ao expoente do exp () complexo, para a inclinação de fase especificada, para que a fase da metade superior (ou negativa), módulo 2 Pi, espelhe a metade inferior na abertura da FFT . A função complexa de deslocamento exponencial também pode ser conjugada simétrica, indexando-a de -N / 2 a N / 2 com uma fase de zero no índice 0.
Acontece que o deslocamento apropriado para torções ou espirais de fase, que completam múltiplos inteiros exatos de 2 rotações Pi na abertura, para serem conjugados simétricos na abertura, é zero.
Com um vetor de torção de fase simétrica conjugada, o resultado deve terminar como uma interpolação circular de Sinc para turnos não inteiros.
Elaboração por OP:
Sua escolha de k = [0, 1, 2, 3, 4, 5, 6, 7, 8] está produzindo um exponencial complexo assimétrico:
Se você usar k = [0, 1, 2, 3, 4, -4, -3, -2, -1], obterá um exponencial complexo Hermite-simétrico simétrico:
e agora, quando você usa a mesma fórmula exponencial para alternar entre 0,5 ou 3,5 amostras, obtém um resultado real:
fonte
k = [0, 1, 2, 3, 4]
, eu deveria estar usandok = [0, 1, 2, -2, -1]