为什么FFT是“镜像”的?


36

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

t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )

1Hz正弦波+ DC

1赫兹

以上的FFT

英尺

我知道第一个bin中的数字是信号中有“多少DC”。

y(1)  %DC
  > 101.0000

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

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

但这不是101!大约是50.5。

fft信号的末尾还有另一个项,大小相等:

y(101)
  > 50.2971

所以又是50.5。

我的问题是,为什么FFT这样镜像? 为什么不是101英寸y(2)(这当然意味着信号的所有101档中都有1 Hz正弦波?)

这样做准确吗?

mid = round( N/2 ) ;

% Prepend y(1), then add y(2:middle) with the mirror FLIPPED vector
% from y(middle+1:end)
z = [ y(1), y( 2:mid ) + fliplr( y(mid+1:end) ) ];

stem( z )

翻转并添加FFT向量的后一半

在此处输入图片说明

我现在认为,正确地添加了右侧的镜像部分,使我得到了所需的“ FFT的所有101个bin都包含一个1Hz正弦波”

>> z(2)

ans =

  100.5943

类似的问题已经在这里找到答案:dsp.stackexchange.com/questions/3466/...
pichenettes

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

对于纯实信号F(k)= conj(F(Nk)),这就是为什么纯实信号的傅立叶变换是对称的。
WebMonster 2012年

问自己:如果您的信号是1 + cos(2 * pi t)...和1 + i cos(2 * pi t)...并且1 + i sin(2 * pi * t),您会期望什么结果? ...
pichenettes 2012年

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

Answers:


39

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

H(f)=h(t)ej2πftdt

基本上,它使信号与一堆复杂的正弦波相关,每个正弦波都有自己的频率。那么那些复杂的正弦曲线是什么样的呢?下图说明了一种复杂的正弦曲线。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

“开瓶器”是时间上旋转的复杂正弦曲线,而跟随它的两个正弦曲线是复杂正弦曲线的提取的实部和虚部。精明的读者会注意到,实部和虚部完全相同,只是它们彼此相差90度()。因为它们异相90度,所以它们是正交的,并且可以在该频率下“捕获”信号的任何分量。π2

指数和余弦/正弦之间的关系由欧拉公式给出:

ejx=cos(x)+jsin(x)

这使我们可以如下修改傅立叶变换

H(f)=h(t)ej2πftdt=h(t)(cos(2πft)jsin(2πft))dt

在负频率处,傅立叶变换变为以下

H(f)=h(t)(cos(2π(f)t)jsin(2π(f)t))dt=h(t)(cos(2πft)+jsin(2πft))dt

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

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

编辑:具体来说,负频率相关性是真实信号的正频率相关性的共轭(由于虚假正弦分量的倒置)。用数学术语来说,正如Dilip所指出的,以下内容是:

H(f)=[H(f)]

另一种思考方式:

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

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

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


好的答案-尽管我有些不高兴,但我不赞成“因为它们是相同的,一个与之相关的东西,另一个也将具有完全相同的幅值和90度相移。” 我知道您要说的是什么,但是(如您所知),正弦与正弦相关(分数1),但根本不与余弦相关(分数0)。它们是相同的信号,但相位不同。
Spacey 2012年

你是对的。还有另一个更严重的问题。稍后再解决。
吉姆·克莱

如果您可以编辑答案以更好地响应有关DFT的问题(尽管标题中标有FFT),而不是给出傅里叶变换的一般理论,那将是很好的。
Dilip Sarwate 2012年

@DilipSarwate我的目标是帮助提问者理解,我认为我的方法是最好的。但是,我赞成您的答案,因为它可以进行离散数学运算。
吉姆·克莱

@JimClay你的做法是通过dsp.SE整个读者大为赞赏,我希望你会发现时间,使你的答案被一个真正伟大的答案明确,包括在你的答案是什么,目前留给读者推断:即。当是实值信号时,等式表明(因此),并且这就是OP所要求的“镜像”。换句话说,我要求您编辑您的答案以对实际提出的问题做出更快速的反应(正如我在上一条评论中所要求的)。| ^ h - ˚F | = | H f | x t H(f)=[H(f)]|H(f)|=|H(f)|x(t)
Dilip Sarwate 2012年

20

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

关于为什么发生镜像的问题,hotpaw2本质上已说明了原因,因此以下仅是细节的补充。将 数据点的序列的定义为序列,其中 ,其中。很明显,即使是实值序列,通常也是数值序列。但请注意,当x=(x[0],x[1],x[2],,x[N1])NX=(X[0],X[1],X[2],,X[N1])

X[m]=n=0N1x[n](exp(j2πmN))n,m=0,1,,N1
j=1Xxx是一个实值序列,是一个实数。此外,如果是偶数,则由于,我们也有 是实数。但是,无论是奇数还是偶数,实值序列的DFT都 具有您在注释中提到的厄米对称性。对于任何固定的,我们都有X[0]=n=0N1x[n]Nexp(jπ)=1N
X[N2]=n=0N1x[n](exp(j2πN/2N))n=n=0N1x[n](1)n
NX1 ñ - 1 X [ ]Xx m1mN1, 因此,对于,。作为这种情况的特殊情况,请注意,如果当为偶数时选择,则会得到,从而证实了先前的结论是
X[m]=n=0N1x[n](exp(j2πmN))nX[Nm]=n=0N1x[n](exp(j2πNmN))n=n=0N1x[n](exp(j2π+j2πmN))n=n=0N1x[n](exp(j2πmN))n=(X[m])
1mN1X[Nm]=(X[m])m=N/2NX[N/2]=(X[N/2])X[N/2]是一个实数。请注意,厄米对称性的影响是

所述个在一个实数值序列的DFT仓具有相同的大小作为第斌。m(Nm)

MATLABi的人员将需要对此进行翻译,以说明MATLAB数组从向上编号的事实。1


转到实际数据,你是的DC值加上 略多于一个周期的频率的正弦波的赫兹。确实,您得到的是 ,其中。因此,样本的第一个和最后一个具有相同的值。因此,您要计算的DFT由 和 之间的不匹配 会导致DFT混乱:值 x11

x[n]=1+sin(2π(0.01n)), 0n100
x[0]=x[100]=1101
X[m]=n=0100(1+sin(2π(n100)))(exp(j2πm101))n
100101X[m]对于都是非零的,尽管很小。另一方面,假设您要调整MATLAB程序中的数组,以在处获取样本,以使 则DFT为 您会看到您的DFT 恰好是(或至少在舍入误差内),而 DFT将得出, 2m99t100t=0,0.01,0.02,,0.99
x[n]=1+sin(2π(0.01n)), 0n99.
X[m]=n=099(1+sin(2π(n100)))(exp(j2πm100))n,
X=(100,50j,0,0,,0,50j)0n99
x[n]=1100m=099X[m](exp(j2πn100))m=1100[10050jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)exp(j2πn100)]=1+sin(2π(0.01n))
,这正是您的起点。

因此,是否可以通过FFT 判断信号是否为周期性信号
显示名称

@displayname是一个单独的问题,应单独提出(也许已经有人问过并回答了)。
Dilip Sarwate

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

14

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

对于严格实数的输入数据,FFT结果中的两个共轭镜像会抵消任何复杂正弦波的虚部,从而求和为严格实数正弦波(微小的数字舍入噪声除外),从而使您得到严格的正弦波表示。真正的正弦波。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.