【发布时间】:2011-11-23 15:51:26
【问题描述】:
我的频域数据如下所示:
这意味着我有一个向量 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));
【问题讨论】:
标签: matlab signal-processing fft ifft