У меня есть данные в частотной области, которые выглядят так:
Это означает, что у меня есть вектор Y, который содержит амплитуду для частотных точек в векторе x. Например
f = [0 1 2 3 4 5 6 7 8 9 10]
Y = [0 0 0 0 0 1 0 0 0 0 0]
Выполнение обратного преобразования Фурье должно дать синусоидальный сигнал с частотой 5 Гц.
Функция MATLAB ifft может преобразовывать Y и f во временную область. Давайте назовем векторы во временной области y и t. Я ищу способ, как получить данные во временной области с указанной частотой дискретизации и указанной длиной сигнала. Например, мне нужны данные во временной области с длиной сигнала 1 секунда и частотой дискретизации 1000 Гц.
Выход функции ifft MATLABs всегда имеет ту же длину, что и вход, поэтому я не уверен, что дать в качестве входа для получения необходимой частоты дискретизации и длины сигнала.
Подводя итог, я пытаюсь написать функцию MATLAB
[t,y] = custom_ifft(f,Y,sampling_frequency,signal_length)
, который преобразует данные частотной области (f, Y) в данные временной области (t, y), где длина вектора времени t может быть указана в длине сигнала (например, 1 секунда) и частоте дискретизации (длина (y) / signal_length) можно указать с помощью sampling_frequency
EDIT:
Пожалуйста, включите в ваш ответ код MATLAB, как реализовать вашу идею. У меня уже есть концепция, как это сделать, но я не могу заставить работать фактическую реализацию.
Я специально спрашиваю, что передать в качестве входного аргумента функции ifft:
y = ifft(input_arg);
Я ищу код MATLAB для создания input_arg, когда (f, Y, sampling_frequency, signal_length) известны.
Вот моя реализация, которая не работает должным образом:
Y = [0 zeros(1,100) 1 0 0 zeros(1,500) 0 0 1 zeros(1,100)];
Y_interp = interp1(Y,linspace(1,length(Y),2*length(Y)));
y = ifft(Y) ;
y_interp = ifft(Y_interp);
figure;
plot(y);
figure;
plot(real(y_interp));
figure;
plot(abs(y_interp));