帮我理解FFT函数(Matlab)

Posted

技术标签:

【中文标题】帮我理解FFT函数(Matlab)【英文标题】:Help me understand FFT function (Matlab) 【发布时间】:2009-01-11 22:09:57 【问题描述】:

1) 除了负频率,FFT 函数提供的最小频率是多少?是零吗? 2) 如果为零,我们如何在对数刻度上绘制零? 3)结果总是对称的?还是只是看起来是对称的? 4) 如果我使用 abs(fft(y)) 来比较 2 个信号,我会失去一些准确性吗?

【问题讨论】:

【参考方案1】:

1) 除了负频率,FFT 函数提供的最小频率是多少?是零吗?

fft(y) 返回一个向量,其中包含y 的 DFT 的第 0 到第 (N-1) 个样本,其中 y(t) 应该被认为是在 0 ... N-1 上定义的(因此,y(t) 的“周期性重复”可以被认为是在 Z 上定义的周期性信号)。

fft(y) 的第一个样本对应于频率 0。 真实、离散时间、周期性信号的傅里叶变换也具有离散域,它是周期性的和厄米特的(见下文)。因此,负频率的变换是正频率对应样本的共轭。

例如,如果您将y(的周期性重复)解释为在 Z 上定义的周期性实信号(采样周期 == 1),则 fft(y) 的域应解释为 N 个等距点 0, 2π/N ... 2π(N-1)/N。负频率 -π ... -π/N 处的变换样本是频率 π ... π/N 处的样本的共轭,并且等于频率处的样本 π ... 2π(N-1)/N.

2) 如果为零,我们如何在对数刻度上绘制零?

如果您想绘制某种Bode plot,您可以仅绘制正频率的变换,忽略对应于最低频率(特别是 0)的样本。

3) 结果总是对称的?还是只是看起来是对称的?

如果y 是实数,它有Hermitian symmetry:它的实部是对称的,它的虚部是反对称的。换句话说,它的幅度是对称的,它的相位是反对称的。

4) 如果我使用 abs(fft(y)) 比较 2 个信号,我会失去一些准确性吗?

如果您的意思是abs(fft(x - y)),这没关系,您可以使用它来了解差异的频率分布(或误差,如果 x 是 y 的估计值)。如果您的意思是abs(fft(x)) - abs(fft(y)) (???),您至少会丢失相位信息。

【讨论】:

在 matlab 中,调用函数但告诉它忽略输入中的某些值有点棘手。因此,我建议用一个可以绘制的小值替换 0。 请注意,matlab中fft结果的前半部分是正频率(1 +1 用于提出厄米对称性,这为我节省了大量时间。【参考方案2】:

好吧,如果您想了解快速傅立叶变换,您需要回到基础并了解 DFT 本身。但是,这不是你问的,所以我只是建议你在自己的时间这样做:)

但是,回答您的问题:

    是的,(如您所说,除了负数)它为零。 N 点输入的范围是 0 到 (N-1)。 在 MATLAB 中?我不确定我是否理解您的问题 - 绘制零值,就像绘制任何其他值一样......虽然,正如 duffymo 正确指出的那样,没有自然对数为零。 它本质上类似于 sinc(正弦基数)函数。不过,它不一定是对称的。 您不会失去任何准确性,您只会得到幅度响应(但我想您已经知道了)。

【讨论】:

啊,sinc 是关于 y 轴对称的,但 sine 不是。感谢您的澄清。【参考方案3】:

咨询“C 中的数值配方”,第 12 章“快速傅立叶变换”说:

    频率范围从负 fc 到正 fc,其中 fc 是奈奎斯特临界频率,等于 1/(2*delta),其中 delta 是采样间隔。所以频率当然可以是负数。

    你不能绘制不存在的东西。没有自然对数为零。您可以将频率绘制为 x 轴,也可以为半对数轴选择一个不包括零的范围。

    频率范围内是否存在对称性取决于时域中函数的性质。您可以在频域中绘制关于 y 轴不对称的图。

    我不认为采用这样的绝对值是一个好主意。您需要阅读有关卷积、校正和信号处理的更多信息以比较两个信号。

【讨论】:

关于#1,最初的问题是“除了否定之外”......因此我的回答。 在不了解要转换的函数的情况下很难做出有关频率范围的陈述。实偶函数的傅里叶变换是实偶函数,但原问题没有具体说明。 确实如此。正如您所说,在没有适当场景的情况下尝试回答问题会出现问题。【参考方案4】:
    fft 的结果可以为 0。已被其他人回答。 要绘制 0 频率,诀窍是将其设置为一个非常小的正数(为此我使用 exp(-15))。 已被其他人回答。 如果您只对幅度感兴趣,是的,您可以这样做。例如,这适用于许多图像处理问题。

【讨论】:

【参考方案5】:

一半的问题:

3) FFT运算的结果取决于信号的性质;因此没有什么要求它是对称的,尽管如果是对称的,您可能会获得有关信号属性的更多信息

4) 这将比较一对信号的幅度,但那些相等并不能保证 FFT 相同(不要忘记相位)。但是,它可能足以满足您的目的,但您应该确信这一点。

【讨论】:

以上是关于帮我理解FFT函数(Matlab)的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么画函数的相位谱

Matlab---傅里叶变换---通俗理解

Matlab---傅里叶变换---通俗理解

FFT和IFFT的Matlab实现(幅频响应和相频响应)

FFT和IFFT的Matlab实现(幅频响应和相频响应)

求教matlab FFt变换 几个问题