频率矢量和 fft

信息处理 fft matlab 频率 频谱
2022-02-20 07:10:20

我有一个关于 fft 操作的频率向量定义的问题。

通常,我使用频率向量f2 的幂(2048、4096、8192,...)。

给定一定的仿真分析时间time(例如 600 秒),我应该定义f如下:

% Frequency defition
t = 0:dt:(time-dt);
df = 1/(time);
fn = Nfft/time;

f=fn/2:df:fn/21;

其中表示奈奎斯特截止频率。fn

实际上,对于:

  • 计算原因
  • 功率谱沿f轴对称
  • 不丢弃realimag部分fft

我的目标是只定义一半的频率范围,例如

f=0:df:fn/21;

在调用fft我的输入信号后,我会得到所需的时间序列

ouput = [real(fft) imag(fft)];

但是,这样,我计算了0两次频率项,并且-fn/2完全丢弃了。

怎么可能只从它的一半开始覆盖整个标准频率范围?

2个回答

在 DFT 之后定义频率矢量的正确方法如下。是您的 DFT 长度,而是您的采样率(以 Hz 为单位)。此外,定义一个长度的频率向量,其中每个元素,对于NfsNffi=ii=0,1,2,...N1

现在你的频率向量以赫兹为单位将是ffsN

现在,假设您正在对真实序列进行 DFT,只需选择频率值小于的所有元素,您就可以做生意了!fs2

您还可以在此处查看我对实际代码的回答。

这是非常简单
的 DFT 频率步长是

频率步长 = 采样频率 / 采样计数

fft 的线性独立频率箱计数(高达奈奎斯特截止频率)
用于偶数样本计数:

N = 样本 / 2 + 1

对于偶数样本:

N = (样本 - 1) / 2 + 1

FFT 中的 bin 总数等于样本数

第一频率仓是零频率仓。第二个是 freqStep 频率的 bin,依此类推。第 N 个 bin 是 Nyquist 截止频率的 bin。N 之后的 bin 是那些值由 N 对称共轭复数的 bin,即

fft(N - i) == conj(fft(N + i))

对于 5 点信号,bin 为:

[0]
[f1]
[f2]
[-f2]
[-f1]

f1 的频率为
f1: 1 * freqStep
f2 的频率为
f2: 2 * freqStep

对于 4 点信号,bin 为:

[0]
[f1]
[f2]
[-f1]

f1 的频率为
f1: 1 * freqStep
f2 的频率为
f2: 2 * freqStep