本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

fftshift

将零频分量移到频谱中心

说明

示例

Y = fftshift(X) 通过将零频分量移动到数组中心,重新排列傅里叶变换 X

  • 如果 X 是向量,则 fftshift 会将 X 的左右两半部分进行交换。

  • 如果 X 是矩阵,则 fftshift 会将 X 的第一象限与第三象限交换,将第二象限与第四象限交换。

  • 如果 X 是多维数组,则 fftshift 会沿每个维度交换 X 的半空间。

示例

Y = fftshift(X,dim) 沿 X 的维度 dim 执行运算。例如,如果 X 是矩阵,其行表示多个一维变换,则 fftshift(X,2) 会将 X 的每一行的左右两半部分进行交换。

示例

全部折叠

交换行向量的左右两半部分。如果一个向量的元素数为奇数,则中间的元素被视为属于向量的左半部分。

Xeven = [1 2 3 4 5 6];
fftshift(Xeven)
ans = 1×6

     4     5     6     1     2     3

Xodd = [1 2 3 4 5 6 7];
fftshift(Xodd)
ans = 1×7

     5     6     7     1     2     3     4

分析信号的频率分量时,将零频分量平移到中心会很有帮助。

创建信号 S、计算其傅里叶变换,然后绘制功率。

fs = 100;               % sampling frequency
t = 0:(1/fs):(10-1/fs); % time vector
S = cos(2*pi*15*t);
n = length(S);
X = fft(S);
f = (0:n-1)*(fs/n);     %frequency range
power = abs(X).^2/n;    %power
plot(f,power)

平移零频分量,然后绘制以零为中心的功率。

Y = fftshift(X);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n;     % zero-centered power
plot(fshift,powershift)

要处理多个一维信号,可将它们表示为一个矩阵的各行。然后使用维度参数计算傅里叶变换,并平移每一行的零频分量。

创建矩阵 A,其行表示两个一维信号,然后计算每个信号的傅里叶变换。绘制每个信号的功率。

fs = 100;               % sampling frequency
t = 0:(1/fs):(10-1/fs); % time vector
S1 = cos(2*pi*15*t);
S2 = cos(2*pi*30*t);
n = length(S1);
A = [S1; S2];
X = fft(A,[],2);
f = (0:n-1)*(fs/n);     % frequency range
power = abs(X).^2/n;    % power
plot(f,power(1,:),f,power(2,:))

平移零频分量,然后绘制每个信号以零为中心的功率。

Y = fftshift(X,2);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n;     % zero-centered power
plot(fshift,powershift(1,:),fshift,powershift(2,:))

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
复数支持:

沿其运算的维度,指定为正整数标量。如果未指定任何值,则 fftshift 沿所有维度进行交换。

  • 以输入矩阵 Xc 为例。运算 fftshift(Xc,1) 会将 Xc 的每一列的上下两半部分进行交换。

  • 以矩阵 Xr 为例。运算 fftshift(Xr,2) 会将 Xr 的每一行的左右两半部分进行交换。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

另请参阅

| | | |

在 R2006a 之前推出