Як круговий зсув сигналу на частку зразка?


22

Теорема зсуву говорить :

Помноження на лінійну фазу e 2 π iхн для деякого цілогоmвідповідаєкруговому зсувувиходу:замінюється на, де індекс інтерпретується модулемN(тобто періодично).е2πiNнмХкХкХк-м

Гаразд, це добре працює:

plot a

довільний 9-зразок сигналу

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

сигнал зміщений на 3 вибірки в частотній області

Він змістився на 3 зразки, як я і очікував.

Я думав, що ви також можете це зробити, щоб перейти на частки вибірки, але коли я спробую, мій сигнал стає уявним і зовсім не схожим на оригінал:

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--'

сигнал після множення на 3,5 складних експоненціалів

Я взагалі цього не очікував. Хіба це не еквівалент згортання з реальним імпульсом, зміщеним 3,5 зразками? Тож імпульс повинен все-таки бути реальним, а результат все-таки повинен бути реальним? І вона повинна мати більш-менш таку ж форму, як оригінал, але синкопольована?


Ось подання файлу обміну файлами Matlab, яке обчислює правильну модуляцію для парних / непарних реальних / складних сигналів та їх дробових затримок: mathworks.com/matlabcentral/fileexchange/7886-fshift
Ахмед Фасіх

Відповіді:


14

Якщо ви хочете, щоб зміщений вихід IFFT був справжнім, поворот / обертання фаз у частотній області має бути сполученим симетричним, як і дані. Це може бути досягнуто шляхом додавання відповідного зміщення до рівня вашого складного exp () для заданого фазового нахилу, так що фаза верхньої (або від’ємної) половини, модуль 2 Pi, відображає нижню половину в діафрагмі FFT . Складну функцію експоненціального зсуву також можна зробити кон'югатом симетричною, індексуючи її від -N / 2 до N / 2 з фазою нуля при індексі 0.

Так буває, що відповідний зсув для фазових поворотів або спіралей, які виконують точні цілі кратні по 2 Пі обертання в діафрагмі, щоб бути сполученими симетричними в діафрагмі, дорівнює нулю.

З кон'югованим симетричним перекрутним вектором фази результат повинен закінчуватися як кругова інтерполяція Сінка для не цілих зрушень.

Розробка ОП:

Ваш вибір k = [0, 1, 2, 3, 4, 5, 6, 7, 8] створює експозицію асиметричного комплексу:

асиметрична складна експоненціальна спроба зсуву 0,5 зразка, з уявною частиною як пунктирна лінія

Якщо ви скористаєтесь k = [0, 1, 2, 3, 4, -4, -3, -2, -1], ви отримаєте герметично-симетричний комплексний експоненціал:

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

Герміто-симетричний комплексний експонент для зміщення 0,5 зразка, з уявною частиною як пунктирна лінія

і тепер, коли ви використовуєте ту саму експоненціальну формулу для зміщення на 0,5 або 3,5 проби, ви отримуєте реальний результат:

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

зсув на 0,5 і 3,5 зразків, оригінал як пунктирна лінія


Ага! Замість цього k = [0, 1, 2, 3, 4]я повинен використовуватиk = [0, 1, 2, -2, -1]
endolith

@endolith / hotpaw2, Іншими словами, це все про індексацію зразків часової області?
TheGrapeBeyond

1
Симетрія навколо бункера 0 також забезпечить симетрію навколо N / 2, навіть якщо N / 2 не є цілим числом.
hotpaw2

1
Я знайшов функцію, яка застосовує правильну модуляцію на обміні файлів Matlab: mathworks.com/matlabcentral/fileexchange/7886-fshift 👏!
Ахмед Фасіх

1
це однаково справедливо для складних сигналів?
Лев
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.