两者的区别在于:
- fft函数将时域信号转换为频域信号,即将信号从时间域转换为频率域。
- fftshift函数用于对fft计算结果进行移位操作,将频域信号的零频率分量移到频谱的中心,方便观察和处理。fftshift函数将fft计
算结果沿着中心点进行翻转。
fft(根据傅立叶变换的理论,进行fft的后半部分实际上表示的是负频率信息):
fft与fftshift对比图如下:
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');