1、nfft是什么意思?
答:
nfft是进行FFT时所使用的变换长度,可以理解为打算用多少个点的快速傅里叶变换。
nfft的作用是提高计算计算的效率,FFT算法对2的幂次长度运算速度最快。
nfft可以提高频率的分辨率,点数越多,频率轴上的间隔越小,分辨率越高。
不会改变原始信号本身:只是用来用来决定做频域分析时使用的点数,通常通过在末尾补零来实现。
2、nextpow2()是个啥?
3、fft()这是个啥?
下表面来讲解一下:y = fft(x, nfft);
对信号 x
做快速傅里叶变换(FFT),变换长度为 nfft
,得到频域信号 y
。
x:输入信号 。要分析的 原始时域信号(一组数据,是一维向量)
nfft:表示你打算用多少个点来做傅里叶变换。
-
如果
nfft > length(x)
,MATLAB 会自动在x
后面补零; -
如果
nfft < length(x)
,MATLAB 会截断x
; -
如果不写
nfft
,默认是nfft = length(x)
。nfft = 8; % 表示我希望用 8 点来做 FFT
x = [1, 2, 3, 4]; % 原始信号,长度为4 nfft = 8; % 我想用 8 点来做 FFT y = fft(x, nfft); % 执行变换,x 会自动在后面补 4 个 0
- 画做完FFT之后得到的频谱的方法:
fs = 1000; % 采样频率
f = (0:nfft-1)*(fs/nfft); % 频率轴
plot(f, abs(y)); % 幅值谱
4、为什么 df = fs / nfft; 得到是频率分辨率?
答:这段代码的意思是计算 频率分辨率,也叫频率间隔,单位是 Hz。
频率分辨率 df就是:
在 FFT 结果里,相邻两个频率点之间相隔多少 Hz。
采样频率 fs是啥:
-
表示每秒采集了多少个点。
-
所以最高能分析的频率是
fs / 2
(奈奎斯特定理:被采集信号的频率f是抽样信号频率的1/2)。
举个例子理解一下df:
例子1:
例子1:
fs = 1000; % 采样频率是1000Hz
nfft = 1000; % 用1000点做FFT
那么
df = fs / nfft = 1000 / 1000 = 1 Hz
说明:
在频域图里,你每一个点就是一个 1 Hz 的频率精度:
0 Hz, 1 Hz, 2 Hz, ..., 999 Hz
例子2:
例子2:
fs = 1000;
nfft = 2048;
df = 1000 / 2048 ≈ 0.488 Hz
说明频谱图分得更细,你能“看到”更细小的频率变化。
总结:df = fs / nfft
是因为你总共用 nfft
个点去把 0 到 fs Hz 的频率范围切分,结果每一小段的宽度就是 df
,这就是频率分辨率