0

我的问题是基于反 fft 从幅度谱 (fft) 中获取原始信号,但仅适用于某些频率范围。8-12赫兹。有人可以帮我吗?我尝试使用:

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

但它不想工作。

4

1 回答 1

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就是采样率。

于 2013-03-26T17:16:47.843 回答