Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 频率范围的快速傅里叶逆变换_Matlab_Fft_Ifft - Fatal编程技术网

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

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;

我的问题是从基于逆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(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