如果您对简单信号进行FFT绘图,例如: >上面的FFT



我知道第一个bin中的数字是信号中存在“多少DC”。
t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )


第二个垃圾箱中的数字应该是“整个信号中有多少个1周期”:

y(1)  %DC
  > 101.0000


不是101!大约是50.5。

在fft信号的末尾还有另一个项,大小相等:
/>
我的问题是,为什么FFT这样镜像?为什么它不是y(2)中的101(当然,这意味着信号的所有101 bin中都有1 Hz正弦波?)

这样做准确吗:

y(2)  %1 cycle in the N samples
  > 50.6665


翻转并添加FFT向量的后半部分



我现在想,镜像的部分正确地添加到右侧,给我想要的“ FFT的所有101个bin都包含一个1Hz正弦波”

y(101)
  > 50.2971


评论

这里也回答了类似的问题:dsp.stackexchange.com/questions/3466/…

但这特别是关于信号的对称性(我相信这是所谓的Hermetian对称性?)。

对于纯实信号F(k)= conj(F(N-k)),这就是为什么纯实信号的傅立叶变换是对称的原因。
问自己:如果您的信号是1 + cos(2 * pit)...和1 + i cos(2 * pit)...和1 + i sin(2 * pi * t),您会期望什么结果。 。

因为傅立叶变换将信号分解为复指数,并且正弦波是2个复指数的和。 dsp.stackexchange.com/a/449/29

#1 楼

由于傅立叶变换的性质,实信号在傅立叶变换的正半部和负半部中“镜像”。傅立叶变换定义如下-

$ H(f)= \ int h(t)e ^ {-j2 \ pi ft} dt $

基本上使信号与一堆复杂的正弦波相关,每个正弦波都有自己的频率。那么那些复杂的正弦曲线是什么样的呢?下图显示了一个复杂的正弦波。和复杂正弦曲线的虚部。精明的读者会注意到,实部和虚部完全相同,只是它们彼此相差90度($ \ frac {\ pi} {2} $)。由于它们的相位相差90度,因此它们是正交的,并且可以“捕获”该频率下的信号的任何分量。 br />
$ e ^ {jx} = cos(x)+ j * sin(x)$

这使我们可以如下修改傅立叶变换-
$ $
H(f)= \ int h(t)e ^ {-j2 \ pi ft} dt \\
= \ int h(t)(cos(2 \ pi ft)-j * sin(2 \ pi ft))dt
$$

在负频率下,傅立叶变换变为以下-
$$
H(-f)= \ int h(t)(cos(2 \ pi(-f)t)-j * sin(2 \ pi(-f)t))dt \\
= \ int h(t)(cos( 2 \ pi ft)+ j * sin(2 \ pi ft))dt
$$

将负频率版本与正频率版本进行比较表明,余弦是相同的,而正弦倒置。但是,它们仍然彼此异相90度,从而允许它们捕获该(负)频率的任何信号分量。

由于正弦频率和负弦频率正弦曲线的相位都相差90度,并且幅度相同,因此它们都将以相同的方式响应实际信号。或更确切地说,它们的响应幅度将是相同的,但是相关相位将是不同的。

编辑:具体地说,负频率相关是正频率相关的共轭(由于反相虚数正弦分量)用数学术语来说,正如Dilip所指出的那样,这是下面的方法:
考虑一下:

虚构的组件就是这样。虚构!它们是一种工具,它允许使用一个额外的平面来查看事物,并且使许多数字(和模拟)信号处理成为可能,即使比使用微分方程要容易的多!

但是我们可以不能打破自然的逻辑定律,我们不能对虚构的内容^^ \ dagger $做任何“真实”的事情,因此它必须有效地将自身抵消掉,然后才能返回现实。在基于时间的信号(复杂频域)的傅立叶变换中,这看起来如何?如果我们将虚部抵消的信号的正负频率分量相加/相加,这就是说正负元素彼此共轭的意思。请注意,当对时间信号进行傅立叶变换时,会存在这些共轭信号,每个共轭信号的“真实”部分共享幅度,一半在正域中,一半在负域中,因此实际上将共轭相加会删除虚构的内容,仅提供真实的内容。

$ ^ \ dagger $表示我们无法创建5iV伏特的电压。显然,我们可以使用虚数来表示两个矢量值的真实信号,例如圆极化EM波。

评论


$ \ begingroup $
好的答案-不过,我有些不高兴,因为我不赞同“因为它们是相同的,一个与之相关的东西,另一个也将具有完全相同的幅值和90度相移。”我知道您要说的是什么,但是(如您所知),正弦与正弦相关(分数1),但根本不与余弦相关(分数0)。它们是相同的信号,但相位不同。
$ \ endgroup $
–太空
2012年10月29日12:54

$ \ begingroup $
你是对的。还有另一个更严重的问题。稍后再解决。
$ \ endgroup $
– Jim Clay
2012年10月29日13:23

$ \ begingroup $
如果您可以编辑答案以更好地响应有关DFT的问题(尽管标题中表示FFT),而不是给出傅里叶变换的一般理论,那将是很好的。
$ \ endgroup $
– Dilip Sarwate
2012年10月29日在22:35

$ \ begingroup $
@DilipSarwate我的目标是帮助提问者理解,我认为我的方法是最好的。但是,我赞成您的答案,因为它可以进行离散数学运算。
$ \ endgroup $
– Jim Clay
2012年10月29日23:01

$ \ begingroup $
@JimClay dsp.SE的整个读者群都非常赞赏您的方法,我希望您能够通过在答案中明确包括目前留给读者的内容,抽出时间使答案成为真正的好答案推论:等式表明,当$ x(t)$为a时,$ H(-f)= [H(f)] ^ * $(因此$ | H(-f)| = | H(f)| $)实值信号,这是OP询问的“镜像”。换句话说,我要求您编辑答案以对实际提出的问题做出更快速的反应(正如我在上一条评论中所要求的)。
$ \ endgroup $
– Dilip Sarwate
2012年10月30日12:42

#2 楼

FFT(或快速傅立叶变换)实际上是一种用于计算离散傅立叶变换或DFT的算法。通过利用数据点数量$ N $是一个复合整数这一事实,典型实现比DFT的常规计算加快了速度,因为$ 101 $在这里不是这种情况是素数。 (虽然在$ N $是素数的情况下存在FFT,但它们使用了可能在MATLAB中实现或未实现的不同表示形式)。确实,许多人故意选择
$ N $的形式为$ 2 ^ k $或$ 4 ^ k $,以便通过FFT加快DFT计算。

>转向为什么发生镜像的问题,hotpaw2本质上说明了原因,因此以下仅是细节的填充。
序列$ \ mathbf x = \ bigr(x $ N $的[0],x [1],x [2],\ ldots,x [N-1] \ bigr)$
数据点已定义
为序列$ \ mathbf X = \ bigr(X [0],X [1],X [2],\ ldots,X [N-1] \ bigr)$,其中
$$ X [m] = \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(-j2 \ pi \ frac {m} {N} \ right)\ right)^ n,m = 0,1,\ ldots, N-1 $$
其中$ j = \ sqrt {-1} $。
显然,$ \ mathbf X $通常是一个复值序列
/>即使$ \ mathbf x $是实值序列也是如此。但是请注意,当$ \ mathbf x $是实值序列时,$ \ displaystyle X [0] = \ sum_ {n = 0} ^ {N-1} x [n] $是一个实数。
此外,如果$ N $是偶数,则由于$ \ exp(-j \ pi)= -1 $,
我们也有
$$ X \ left [ \ frac {N} {2} \ right] = \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(-j2 \ pi \ frac {N / 2} {N } \ right)\ right)^ n = \ sum_ {n = 0} ^ {N-1} x [n](-1)^ n $$
是一个实数。但是,不管$ N $是奇数还是偶数,
实值序列$ \ mathbf x $
的DFT $ \ mathbf X $具有厄米对称性,您在
中提到过/>评论。对于任何固定的$ m $,$ 1 \ leq m \ leq N-1 $,我们都有,
$$ \ begin {align *}
X [m]&= \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(-j2 \ pi \ frac {m} {N} \ right)\ right)^ n \\
X [Nm]&= \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(-j2 \ pi \ frac {Nm} {N} \ right)\ right)^ n \\
&= \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(-j2 \ pi + j2 \ pi \ frac {m} {N} \ right)\ right)^ n \\
&= \ sum_ {n = 0} ^ {N-1} x [n] \ left(\ exp \ left(j2 \ pi \ frac {m} {N} \ right)\ right)^ n \\
&= \ left(X [m] \ right)^ *
\ end {align *} $$
因此,对于$ 1 \ leq m \ leq N-1 $,$ X [Nm] = \ left(X [m] \ right)^ * $。作为这种情况的特殊情况,请注意,如果在$ N $为偶数的情况下选择$ m = N / 2 $,则
我们得到$ X [N / 2] = \ left(X [ N / 2] \ right)^ * $,因此证实了我们先前的结论:$ X [N / 2] $是实数。
请注意,厄米对称性的作用是


实值序列的DFT中第$ m $个分档与第$(Nm)$个分档具有相同的大小。


MATLABi人将需要翻译它以解释MATLAB数组从$ 1 $向上编号的事实。


转到实际数据,您的$ \ mathbf x $是$ 1 $的DC值加上
频率为$ 1 $ Hz的正弦曲线的一个周期稍多一点。
实际上,您得到的是$ x [n] = 1 + \ sin(2 \ pi(0.01n)),〜0 \ leq n \ leq 100 $$
其中$ x [0] = x [100] = 1 $。因此,$ 101 $的第一个样本和最后一个样本具有相同的值。因此,您要计算的DFT由
$$ X [m] = \ sum_ {n = 0} ^ {100} \ left(1+ \ sin \ left(2 \ pi \ left(\ frac {n} {100} \ right)\ right)\ right)\ left(\ exp \ left(-j2 \ pi \ frac {m} {101} \ right)\ right)^ n $$
$ 100 $和$ 101 $之间的不匹配会导致DFT混乱:$ 2 \ leq m \ leq 99 $的
$ X [m] $的值非零,尽管很小。另一方面,假设您要在MATLAB程序中调整数组t,以便在$ t = 0、0.01,
你拥有的是
$$ x [n] = 1 + \ sin(2 \ pi(0.01n)),〜0 \ leq n \ leq 99。$$
那么DFT是
$$ X [m] = \ sum_ {n = 0} ^ {99} \ left(1+ \ sin \ left(2 \ pi \ left(\ frac {n} {100} \ right)\ right)\ right)\ left(\ exp \ left(-j2 \ pi \ frac {m} {100} \ right)\ right)^ n,$$
,您会看到您的DFT将精确地是
$ \ mathbf X =(100,-50j,0,0,\ ldots,0,50j)$(或至少
在四舍五入误差之内),并且逆DFT给出
$ 0 \ leq n \ leq 99 $,
x [n]&= \ frac {1} {100} \ sum_ {m = 0} ^ {99} X [m] \ left(\ exp \ left(j2 \ pi \ frac {n} {100} \ right)\ right)^ m \\
&= \ frac {1 } {100} \ left [100-50j \ exp \ left(j2 \ pi \ frac {n} {100} \ right)^ 1
+ 50j \ left(\ exp \ left(j2 \ pi \ frac {n} {100} \ right)\ right)^ {99} \ right] \\
&= 1 + \ frac {1} {2j} \ left [\ exp \ left(j2 \ pi \ frac {n} {100} \ right)
-\ exp \ left(j2 \ pi \ frac {-n} {100} \ right)\ right] \\
&= 1 + \ sin( 2 \ pi(0.01n))
\ end {align *} $$
,这正是您的起点。

评论


$ \ begingroup $
那么,是否可以通过FFT判断信号是否为周期性信号?
$ \ endgroup $
– Stefan Falk
16-09-18在14:01

$ \ begingroup $
@displayname这是一个单独的问题,应单独提出(也许已经有人提出并回答了)。
$ \ endgroup $
– Dilip Sarwate
16-09-20在15:58

$ \ begingroup $
当我仔细撬出共轭对称箱时(通过将0 + 0i写入它们)并使用ifft重构时域信号,重构后的时域信号的幅度减半。这是自然的还是工具问题?我确实照顾了FFT输出的归一化及其在iFFT之后的反向作用。
$ \ endgroup $
–拉吉
17年8月15日在4:51



$ \ begingroup $
因此| X [1] | = | X [N-1] |,| X [2] | = | X [N-2] |,...,X [ceil(N / 2-1 / 2)]由于实信号x的厄米对称性,只有ceil(N / 2-1 / 2 )独特的频率槽。这与fs = 1/2有关吗,信号的大多数ffts图所取的值都等于该值?
$ \ endgroup $
– Minh Tran
20-10-5在17:53

$ \ begingroup $
fft的频率分辨率为fs / N,因此由k = ceil((N-1)/ 2)表示的最高频率为k * fs / N。为了简化,我只想说选择N使得ceil(N / 2-1 / 2)= N / 2。那么k * fs / N = fs / 2。通常根据归一化频率给出图,以使fs / 2对应于1/2。这就是它们之间的联系。听起来对吗?
$ \ endgroup $
– Minh Tran
20-10-5在18:04



#3 楼

注意,仅当输入数据为实数时,FFT结果才被镜像(如共轭对称)。

对于严格实数的输入数据,FFT结果中的两个共轭镜像会抵消任何复杂正弦的虚部,从而得出严格实数的正弦(除了很小的数字舍入噪声),

如果不对FFT结果进行共轭镜像,它将表示具有复杂值(非零虚部)的波形,而并非严格实际价值。