我的问题是基于反 fft 从幅度谱 (fft) 中获取原始信号,但仅适用于某些频率范围。8-12赫兹。有人可以帮我吗?我尝试使用:
xdft=fft(x);
ixdft=ifft(xdft(a:b)), %where xdft(a:b) is |Y(f)| for freq 8-12 Hz.
但它不想工作。
您可以将 的所有值设置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
就是采样率。