Я отправил этот вопрос на dsp.stackexchange, и был проинформирован о том, что это более актуально для StackOverflow, как это в первую очередь программирования вопрос:Изменение фазы сигнала в частотной области (MatLab)
Я пытаюсь написать код, который позволяет мне изменять фазу сигнала в частотной области. Однако мой вывод не совсем корректен, поэтому что-то должно быть неправильным. Для простого примера предположим, что мы имеем функцию y = sin (2 * pi * t) и хотим реализовать фазовый сдвиг -pi/2. Мой код выглядит следующим образом:
clear all
close all
N = 64; %number of samples
fs = 10; %sampling frequency
ts = 1/fs; %sample interval
tmax = (N-1)*ts;
t = 0:ts:tmax;
y = sin(2*pi*t);
figure
plot(t,y)
% We do the FT
f = -fs/2:fs/(N-1):fs/2;
Y = fftshift(fft(y));
% Magnitude spectrum
figure
plot(f,abs(Y));
phase = angle(Y);
% Phase spectrum
figure
plot(f,phase)
Y = ifftshift(Y)
% Attempt at phase shift
Y = Y.*exp(-i*2*pi*f*pi/2);
% Inverse FT
u = ifft(Y);
figure
plot(t,real(u))
Все участки исправны для конечного участка, который выглядит следующим образом, за исключением:
Это выглядит почти правильно, но не совсем. Если кто-нибудь может дать мне несколько указаний относительно того, как мой код может быть исправлен, чтобы исправить это, я был бы очень признателен! У меня такое чувство, что моя ошибка связана с линией Y = Y.*exp(-i*2*pi*f*pi/2);
, но я не уверен, как ее исправить.
Спасибо большое! Это действительно полезно! – Kristian