我的问题是从幅度谱(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.
但它不想工作。
答案 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'
选项调用它来完成此操作。
如果您需要确定某个频率的a
和b
应该是什么,您可以先创建一个执行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;
请注意,我实际上在本示例中完全省略了两个变量a
和b
的使用,并选择了逻辑索引,Fs
是采样率。< / p>