【20211229】【信号处理】傅里叶变换 FFT 的点数 N 如何选取?

一、FFT 点数 N 选择不合理有什么影响?

1. N 过小

        栅栏效应,即频域频率分辨率不够,无法区分出某些频率成分。详见:【20211217】【信号处理】从 Matlab 仿真角度理解栅栏效应

2. N 过大

(1)增加了额外的计算量;

(2)频谱不对。

二、如何选取 FFT 点数 N?

        取决于要求的频率分辨率 F。

        频率分辨率 F 的定义:能够用 FFT 算法分析得到的最靠近的两个信号频率的频率间隔。

        FFT 点数和频率分辨率的关系:N ≥ fs / F,其中 fs 为采样频率,由于 FFT 一般要求 N 是 2 的整数幂,所以要把 N 扩大到最接近的 2 的整数幂。

        N 越大,F 越高,但 N 并不是越大越好。

三、举个栗子

%% FFT 点数 N选取
clear; clc; close all; warning off;
 
%% 参数设置
fs = 100;  % 采样频率(满足奈奎斯特采样定理:要大于信号最大频率的两倍!!!)
L = 10;  % 时间长度
t = 0 : 1/fs : L;  % 时间坐标

%% 生成信号
f1 = 6;  % 信号1频率
f2 = 5;  % 信号2频率
s1 = 10 * sin(2 * pi * f1 * t);
s2 = 10 * sin(2 * pi * f2 * t);
s = s1 + s2;  % 合成信号


%% FFT
numfft0 = 256;  % FFT点数
s0_fft = fft(s, numfft0);  
p0 = pow2db(abs(s0_fft(1:numfft0/2)) .^ 2);  % 功率(只取正频部分)
f0 = (0 : numfft0/2-1) / numfft0 * fs;  % 频率(只取正频部分)

numfft1 = 512;  % FFT点数
s1_fft = fft(s, numfft1);  
p1 = pow2db(abs(s1_fft(1:numfft1/2)) .^ 2);  % 功率(只取正频部分)
f1 = (0 : numfft1/2-1) / numfft1 * fs;  % 频率(只取正频部分)

numfft2 = 1024;  % FFT点数
s2_fft = fft(s, numfft2);  
p2 = pow2db(abs(s2_fft(1:numfft2/2)) .^ 2);  % 功率(只取正频部分)
f2 = (0 : numfft2/2-1) / numfft2 * fs;  % 频率(只取正频部分)

numfft3 = 2048;  % FFT点数
s3_fft = fft(s, numfft3);  
p3 = pow2db(abs(s3_fft(1:numfft3/2)) .^ 2);  % 功率(只取正频部分)
f3 = (0 : numfft3/2-1) / numfft3 * fs;  % 频率(只取正频部分)

%% 作图
figure(1);
subplot(2, 2, 1);
plot(f0, p0, 'linewidth', 1.5); axis('tight'); title([num2str(numfft0), '点傅里叶变换']);
subplot(2, 2, 2);
plot(f1, p1, 'linewidth', 1.5); axis('tight'); title([num2str(numfft1), '点傅里叶变换']);
subplot(2, 2, 3);
plot(f2, p2, 'linewidth', 1.5); axis('tight'); title([num2str(numfft2), '点傅里叶变换']);
subplot(2, 2, 4);
plot(f3, p3, 'linewidth', 1.5); axis('tight'); title([num2str(numfft3), '点傅里叶变换']);

        从运行结果可以看出,当N=256时刚刚能区分出两种频率成分,可能 N 再减小一些就无法分辨这两种频率成分了,即 N 再减小就可能发生栅栏效应;当 N=1024 和 N=2048 时,频谱发生畸变,也就是说 N 并不是越大越好。

        (参考:【数字信号处理】Matlab做fft时点数N怎么选取

        (参考:如何决定要使用多少点来做fft

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值