频率范围的逆快速傅里叶变换

时间:2013-03-26 17:11:10

标签: matlab fft ifft

我的问题是从幅度谱(fft)获得基于反fft的原始信号,但仅适用于某些频率范围ex。 8-12赫兹。谁能帮助我?我试着用:

xdft=fft(x); 
ixdft=ifft(xdft(a:b)), %where xdft(a:b) is |Y(f)| for freq 8-12 Hz.

但它不想工作。

1 个答案:

答案 0 :(得分:3)

您可以将xdft的所有值设置为零,除了您想要的值,即

xdft = fft(x);
xdft = xdft(1:ceil(length(xdft) / 2));
xdft(1:a) = 0;
xdft(b+1:end) = 0;
ixdft = ifft(xdft, 'symmetric');

我只采用原始FFT数据的一半的原因是你的结果将是关于Fs / 2(其中Fs是采样率)的对称,如果你不对频率做同样的事情在中心的任何一侧,你都会得到一个复杂的信号。我没有手动向双方做同样的事情,而是采取了一方,修改了它,并告诉ifft它必须通过附加你传递的镜像来重建整个频率范围的数据。它;通过使用'symmetric'选项调用它来完成此操作。

如果您需要确定某个频率的ab应该是什么,您可以先创建一个执行FFT的频率向量,然后找到那些频率在你的范围内,如下:

xdft = fft(x);
xdft = xdft(1:ceil(length(xdft) / 2));
f = linspace(0, Fs / 2, length(xdft));
keepInd = f >= 8 & f <= 12; % Keep frequencies between 8 and 12 Hz
xdft(~keepInd) = 0;

请注意,我实际上在本示例中完全省略了两个变量ab的使用,并选择了逻辑索引,Fs是采样率。< / p>