我有一个10Khz速率的音频信号样本,我需要找到信号的傅立叶系数。我在mathwork网站上看到了一个示例,他们在其中使用以下代码对信号y进行fft分解:
NFFT = 2^nextpow2(L);
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
其中L是信号的长度,我真的不明白为什么用上面代码中所示的方式定义变量 NFFT ?我不能为 NFFT 选择任何值吗?还有为什么我们在上面代码的第三行中使用Fs/2?
最佳答案
NFFT
可以是任何正值,但是当可以将样本数量分解为小质数时,FFT计算通常会效率更高。引用Matlab documentation:
因此,通常针对大于或等于信号y
的样本数量的2的幂计算FFT。这就是NFFT = 2^nextpow2(L)
所做的(在Example from Matlab documentation中y
被构造为具有长度L
)。
当NFFT > L
时,信号被零填充到NFFT
长度。
就fs/2
而言,这仅仅是因为实值信号的频谱具有厄米对称性(这意味着fs/2
之上的值频谱可以从fs/2
之下的值的复共轭获得),因此从头开始完全指定NFFT/2+1
值(索引NFFT/2+1
对应于fs/2
)。因此,除了显示fs/2
上方的多余信息外,example选择仅说明直到fs/2
的频谱。
关于matlab - matlab的fft()函数中使用的NFFT是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29439888/