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 没有冗余数据的实到复FFT?_Matlab_Fft_Fftw - Fatal编程技术网

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

在许多编程语言中,实数到复数的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));

@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确实如此,但这只会在事后才这样做(就像上面发布的宣传语)