MATLAB中fft与fftshift的区别

本文解释了FFT(快速傅立叶变换)在将时域信号转换为频域信号的作用,以及FFTShift的功能,即移动零频率分量到频谱中心。通过MATLAB代码示例,展示了如何使用这两个函数处理正弦信号并比较其在时域和频域的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两者的区别在于:

  1. fft函数将时域信号转换为频域信号,即将信号从时间域转换为频率域。
  2. 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');
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值