MATLAB中fft与fftshift的区别

两者的区别在于:

  1. fft函数将时域信号转换为频域信号,即将信号从时间域转换为频率域。
  2. fftshift函数用于对fft计算结果进行移位操作,将频域信号的零频率分量移到频谱的中心,方便观察和处理。fftshift函数将fft计
    算结果沿着中心点进行翻转。

fft(根据傅立叶变换的理论,进行fft的后半部分实际上表示的是负频率信息):

MATLAB中fft与fftshift的区别_第1张图片

fft与fftshift对比图如下:

MATLAB中fft与fftshift的区别_第2张图片

MATLAB验证代码如下:

信号频率为100Hz,采样率fs为2000Hz,fft点数为1024,则频率分辨率为fs/N=1.95Hz。直流分量为1;频率分量幅值为2,双边各一半为1。

clear all;close all;clc; %清理工作区,关闭所有窗口,清空文本

% 参数设置
fs = 2000;         % 采样率
f_signal1 = 100;    % 正弦信号频率
t = 0:1/fs:(1024-1)/fs; 
% 生成正弦信号
signal = 1+2*sin(2*pi*f_signal1*t);

N = 1024;        %fft点数 

% 进行FFT
f = (0:N-1)*fs/N;% 计算频率轴
fft_signal =(abs(fft(signal,N)))/N;%此用法设置FFT点数为N

fshift = (-N/2:N/2-1)*(fs/N);% 计算频率轴
fft_signal_shift = fftshift(fft_signal);

% 绘制时域图和频谱图
figure(1);
% 时域图 - 原始信号
subplot(1, 3, 1);
plot(t, signal);
title('Original Signal in Time Domain');
xlabel('Time (s)');
ylabel('Amplitude');

% 频谱图 - 原始信号
subplot(1, 3, 2);
plot(f, fft_signal);
title('Original Signal Spectrum(fft)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');

% 频谱图 - 原始信号
subplot(1, 3, 3);
plot(fshift, fft_signal_shift);
title('Original Signal Spectrum(fftshift)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');

你可能感兴趣的:(数字信号处理,matlab,FFT)