Matlab 没有冗余数据的实到复FFT?
在许多编程语言中,实数到复数的FFT将在平面的正方向产生复数 在Matlab中,一个类似的命令产生一个对称输出,占用两倍的内存。那不好玩 我想知道Matlab中是否有任何FFT命令会导致输出空间减半且复杂 将输出以下内容的内容:Matlab 没有冗余数据的实到复FFT?,matlab,fft,fftw,Matlab,Fft,Fftw,在许多编程语言中,实数到复数的FFT将在平面的正方向产生复数 在Matlab中,一个类似的命令产生一个对称输出,占用两倍的内存。那不好玩 我想知道Matlab中是否有任何FFT命令会导致输出空间减半且复杂 将输出以下内容的内容: load woman; fft_x=fftn(X); fft_x=fft_x(1,1:end/2);%Cutting costs memory, and compute time foo=abs(fft_x); imagesc(log(foo)); @LuisMend
load woman;
fft_x=fftn(X);
fft_x=fft_x(1,1:end/2);%Cutting costs memory, and compute time
foo=abs(fft_x);
imagesc(log(foo));
@LuisMendo是Matlab中的一个股票图像。试试代码:-)我的没有:-/无论如何,如果我理解正确,你只想计算FFT的一半/四分之一,对吗?@LuisMendo事实上,Matlab的FFT必须以某种方式复制内存。一系列
N
点的DFT返回N
点。然而,如果时间序列是实的,则输出序列的第二部分只是前半部分的复共轭反射。如果你知道你的输入是真实的,这个事实被用来更快地进行FFT,并且占用一半的内存。您需要的是fftw
中的fftw\u plan\u dft\u r2c\u 1d
这样的函数。Matlab help说它使用FFTW
库来执行FFT操作,但我不确定它是否检查并选择库中适合实际序列的适当函数。为了节省内存,您可以执行a=fft(b);a=a(1:楼层(长度(a)/2)+1)代码>@Guddu确实如此,但这只会在事后才这样做(就像上面发布的宣传语)