我的频域数据如下所示:
这意味着我有一个向量 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]
执行逆傅立叶变换应给出频率为 5Hz 的正弦波。
MATLAB 函数 ifft 可以将 Y 和 f 转换为时域。让我们调用时域 y 和 t 中的向量。我正在寻找一种方法来获取具有指定采样频率和指定信号长度的时域数据。例如,我想要信号长度为 1 秒,采样频率为 1000Hz 的时域数据。
MATLAB 的 ifft 函数的输出始终与输入具有相同的长度,因此我不确定要给出什么作为输入来获得所需的采样频率和信号长度。
总结一下,我正在尝试编写一个MATLAB函数
[t,y] = custom_ifft(f,Y,sampling_frequency,signal_length)
将频域数据 (f,Y) 转换为时域数据 (t,y),其中时间向量 t 的长度可以指定为信号长度(例如 1 秒)和采样频率(长度(y) /signal_length ) 可以用 sampling_frequency 指定
编辑:请在您的答案中包含如何实现您的想法的 MATLAB 代码。我已经有了如何做的概念,但我无法让实际的实现工作。我特意问什么作为 ifft 函数的输入参数:
y = ifft(input_arg);
我正在寻找当 (f,Y,sampling_frequency,signal_length) 已知时如何创建 input_arg 的 MATLAB 代码。
这是我的实现,但没有按预期工作:
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));