Matlab 频率范围的快速傅里叶逆变换
我的问题是从基于逆fft的幅度谱(fft)中获得原始信号,但仅限于某些频率范围,例如8-12 Hz。有人能帮我吗?我尝试使用:Matlab 频率范围的快速傅里叶逆变换,matlab,fft,ifft,Matlab,Fft,Ifft,我的问题是从基于逆fft的幅度谱(fft)中获得原始信号,但仅限于某些频率范围,例如8-12 Hz。有人能帮我吗?我尝试使用: 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=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;
xdft=fft(x);
xdft=xdft(1:ceil(长度(xdft)/2));
f=linspace(0,Fs/2,长度(xdft));
keepInd=f>=8&f您可以将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;
xdft=fft(x);
xdft=xdft(1:ceil(长度(xdft)/2));
f=linspace(0,Fs/2,长度(xdft));
keepInd=f>=8&f