补零对FFT振幅的影响

218(30天)
拉胡尔羽衣甘蓝”class=
拉胡尔羽衣甘蓝 2023年1月25日
编辑: 保罗 2023年2月11日
许多课本和其他文学评论FFT分辨率的改善由于补零但我没有遇到一个文本评论补零对FFT振幅的影响由于信号长度的变化(有效相同的能量分布在长时间)。在现实世界中,振动信号的处理,工程师说感兴趣的频率振幅。
补零不会改变原始信号,从而低估振幅FFT吗?
谢谢
拉胡尔
10评论
拉胡尔羽衣甘蓝”class=
拉胡尔羽衣甘蓝 2023年1月30日
保罗,
至于DFT扩展的结果,是什么物理量的“振幅”的定义在第一或第二个案例吗?
——这是0-pk级会产生一个信号产生机制。例如,一个振动器振动结构。
谢谢
拉胡尔

登录置评。

接受的答案

马特·J”class=
马特·J 2023年1月28日
编辑:马特·J 2023年1月28日
@Rahul羽衣甘蓝 现在发生在我,你不是真的想计算一个有限的信号的傅里叶变换。你不是想计算一个周期信号的傅里叶级数系数,其中x (n), n = 0,……,n - 1是一个采样信号的一个周期。注意,不是一般的傅里叶变换分解无限周期信号的方法,因为它有无限的能量,虽然有一定的数学关系连续傅里叶变换连续傅里叶级数。
离散傅里叶级数的系数(DFS)信号,然后使用Matlab的办法 fft () 命令
DFS = fft (x) / N
所以,1 / N可能是你正在寻找的归一化因素。补零x确实会改变傅里叶级数系数。然而,重要的是要明白,垫0有不同的解释应用FFT时非周期信号分析比周期信号分析。
36个评论

登录置评。

更多的答案(3)

布鲁诺陈德良”class=
布鲁诺陈德良 2023年1月29日
编辑:布鲁诺陈德良 2023年1月29日
如果你(视窗化)的信号 模具顺利0 然后用0填充尾部变化对FFT谱(振幅),这相当于致密没有扩展频谱(插值)。
N = 70;
x = (0: n - 1) - (n - 1) / 2;
E = exp (- (x / (N / 6)) ^ 2);
y = e * randn(大小(x));
f = (0: N - 1) / N;
yhat = fft (y);
情节(f, y,“b”f E“c”);
NPad = 2 ^ nextpow2 (N);
ypad = y;ypad (NPad) = 0;
fpad = (0: NPad-1) / NPad;
ypadhat = fft (ypad);
情节(f、abs (yhat),“b +”、fpad、abs (ypadhat),r -。)
5个评论
布鲁诺陈德良”class=
布鲁诺陈德良 2023年1月31日
编辑:布鲁诺陈德良 2023年1月31日
@Rahul羽衣甘蓝 “我不知道为什么在比例因子是N,而不是Npad。”
这有些解释我的各种帖子,如果你密切关注。
这里发生了什么是帕平等,或等效离散所谓 瑞利能量定理 DFT 定义的因素1 /√(N)所以要在时间和傅里叶变换对称领域的能源的观点。
0-padding结合第二个事实不会改变的振幅FFT作为我的回答我,只是使频率向量与细步(密度)在相同的频域[0,Niquist],没有理由调整振幅的长度在信号。

登录置评。


保罗”class=
保罗 2023年2月5日
编辑:保罗 2023年2月11日
这个线程从一个问题开始补零的离散傅里叶变换(DFT)和答案和评论了许多点其他相关概念包括连续傅里叶级数(CFS)、连续时间傅里叶变换(CTFT),窗口,可能还有其他许多人。作为一个线程可能会有如此多的评论和其他问题的评论,这可能是难以理解的所有概念如何相互关联和流动。因此,我认为这可能是好的显示准确,至少对其中一些这些概念。
我发布这个的答案,因为我不确定它会流很好地作为一个评论在任何其他的答案。
同时,这个答案不会增加任何材料已经发布。再一次,这只是试图用Matlab来说明一些点已经由(没有特殊的顺序) @Mathieu诺 , @Star黾 , @Bjorn Gustavsson , @Matt J @Bruno陈德良 和我。
定义一个简单的、连续时间信号
信谊t f真实
π=符号(π);
T1 =信谊(2);
T2 =信谊(3);
x (t) = 12 * sin(2 *π/ T1 * t) + 4 * cos(2 *π/ T2 * t);
x (t)是两个周期信号的总和。因为比T1 / T2是一个有理数,我们知道x (t)是周期性的。通过检查,其基本周期
T =符号(6)
我们可以验证
简化(x (t) - x (t + t))
ans =
0
因为x (t)是周期性的,其CTFT火车了狄拉克δ函数的基频及其谐波(1/6 Hz)。在这种情况下,我们只有零谐波在f = + 1/3和f = + 1/2
X (f) =扩大(傅里叶(X (t), t, 2 *π* f))
X (f) =
因为x (t)是周期性的,它有一个指数CFS表示。CFS系数n的函数计算
信谊n个整数
C (n) = int (x (t) * exp (1 j * 2 *π* n / t * t), t, 0, t) / t
C (n) =
或者,我们可以使用 傅里叶 计算他们一样好。
% C (f) =傅里叶(x (t) * rectangularPulse (0, t, t), t, 2 *π* f) / t;
% C (n) = C (n / T);
由于被积函数在 int n作为一个参数,它不捕捉特殊情况下,abs (n) = 2或abs (n) = 3。清理,和C (n)非常简单
[~,denC] = numden (C (n));
npoles =解决(denC);
npole = npoles (:)。
C (n) =分段(n = = npole限制(C (n), n, npole), C (n));
结束
C (n) =简化(C (n))
C (n) =
CFS系数的脉冲序列完全cofficients定义X (f),下面将利用这一事实。
图4 CFS的振幅系数。
造船= 5;
茎(造船/ T, abs (C(造船)))
ylim (7 [0])
包含(“赫兹”)
因为我们使用的是指数CFS, C的振幅(n)和C (- n)是每个相应的谐波振幅的1/2。因此,情节告诉我们,谐波的振幅赫兹是12 1/2和1/3赫兹是4,这正是我们期望基于x (t)的定义。
假设我们只提供给我们一个x (t)的一部分。下一步显示了傅里叶分析仍然可以从信号中提取振幅信息。
定义一个窗口函数覆盖信号的一部分,我们已经进行处理。三角窗函数(插图)是参数化的x (t),它涵盖的时期。
信谊numperiod
w (t, numperiod) = triangularPulse (0, numperiod * t, t);
假设我们有10 x (t)的时期
nperiod = 10;
窗口的CTFT信号
W (f) =简化(傅里叶(W (t, nperiod), t, 2 *π* f));
因为w (t)涵盖了相当数量的时期,它在频域带宽看起来小相对于x (t)的谐波之间的频率间隔
fplot (abs (W (f)), [-0.3 - 0.3]);
参照线(双(1/2 / T),“r”,“1 / (2 t)”);
参照线(双(1/2 / T),“r”,“1 / (2 t)”);
包含(“赫兹”)
ylim (31 [0])
W的峰值在f = 0 (f)
W0 =限制(W (f), f, 0)
W0 =
30.
这也是窗口下的面积。
int (w (t, nperiod), t, 0, nperiod * t)
ans =
30.
应用窗口的CTFT x (t)和计算结果
xw (t) = x (t) * w (t, nperiod);
XW (f) =傅里叶(XW (t)、t、2 *π* f);
乘法在时域卷积对应于频域。W (f)的卷积狄拉克δ函数X (f)社会中W (f)转移到相应的谐波和狄拉克乘以相应的系数。但这些狄拉克系数只是CFS系数。因此,我们可以简单地直接表达CTFT xw (t)的
造船= (2 2 3 3);
XWalt (f) =总和(C(造船)。* W (f-nval / T));
表明,XW (f)和XWalt (f)是等价的。
持有
% fplot正在太长了。
% fplot (abs ([XW (f) XWalt (f))))
fplot (matlabFunction (abs (XW (f))), [1]);
fplot (matlabFunction (abs (XWalt (f))), [1]);
xlim ([1] * 3/4)
包含(“赫兹”)
因为W (f)的带宽相对于谐波间距小,XW (f)本质上是由W (f)的副本转移到CFS的谐波频率和比例系数。这个结果表明,我们可以恢复C的振幅(n)在谐波频率通过简单地划分XW W0 (f)。
fplot (abs (XW (f) / W0))
持有
茎(造船/ T, abs (C(造船)))
xlim ([1] * 3/4)
ylim (7 [0])
包含(“赫兹”)
如果我们只有蓝色曲线,我们可以推测潜在的周期信号是由两个正弦信号在1/2赫兹和1/3分别与振幅12和图4赫兹。
在连续时间框架,现在搬到离散时间。
定义函数来评估数值(不是严格必需的,只是比评估跑快一点象征性和转换)
xfunc = matlabFunction (x (t));
wfunc = matlabFunction (w (t, numperiod),“var”[t numperiod]);
假设一个采样周期的
t = 0.01;
样本覆盖的数量,许多时间
N = nperiod *双(T) / Ts;
样品和相关的时间
tval = (0: (n - 1)) * Ts;
评估x (t)和w在样本时间(t)。
xval = xfunc (tval);
wval = wfunc (tval nperiod);
计算DFT
XWdft = fftshift (fft (xval。* wval));
nfft =元素个数(XWdft);
fval =装天花板(linspace (-nfft / 2, nfft / 2 - 1, nfft)) / nfft / Ts;
现在,情节DFT与适当的扩展,我们需要把窗外的影响函数。在离散时间,没有任何其他比例的输出 fft ,corresoponds除以样本之和窗口
茎(fval、abs (XWdft) / sum (wval));
xlim ([-0.75 - 0.75])
包含(“赫兹”)
如果我们使用了一个矩形窗口,那么(wval) = N,我们刚刚除以N。
覆盖的扩展版本XW (f)
持有
fplot (abs (XW (f) / W0),‘g’)
按比例缩小的DFT样本本质上是频域样本XW (f) / W0(一般来说,这种关系只是近似的近似得到更好的Ts变小和N变大)。
放大看东西好一点
甘氨胆酸copyobj(图);
xlim ([0.2 - 0.6])
因为DFT样本有效地恢复XW (f) / W0,我们又知道谐波频率和相应的振幅。
四DFT样本躺在谐波频率完全因为N是如何计算给定的价值正是覆盖10期Ts。总的来说,我们不能保证数据覆盖周期的整数;毕竟,是我们试图确定。
此外,Ts的选择在这个例子中,x [n] = x (n * Ts)是离散时间周期。
假设我们有10多个样本的时期。
nperiod = 10 + 0.25;
N =圆(nperiod *双(T) / Ts);
经历相同的过程
tval = (0: (n - 1)) * Ts;
xval = xfunc (tval);
wval = wfunc (tval nperiod);
XWdft = fftshift (fft (xval。* wval));
nfft =元素个数(XWdft);
fval =装天花板(linspace (-nfft / 2, nfft / 2 - 1, nfft)) / nfft / Ts;
茎(fval、abs (XWdft) / sum (wval));
参照线(5“r”)
参照线(1/3,“r”)
包含(“赫兹”)
xlim ([0.2 - 0.6])
ylim (7 [0])
表明,DFT样品不是很“不错,”尤其是在1/3赫兹,这基本上是介于两个DFT样本。
现在,我们终于到达最初的关于补零的问题,我们可以使用它来填写DFT样品在频域
N =圆(nperiod *双(T) / Ts);
tval = (0: (n - 1)) * Ts;
xval = xfunc (tval);
wval = wfunc (tval nperiod);
XWdft = fftshift (fft (xval。* wval 2 ^ 14));%使用大量的填充
nfft =元素个数(XWdft);
fval =装天花板(linspace (-nfft / 2, nfft / 2 - 1, nfft)) / nfft / Ts;
茎(fval、abs (XWdft) / sum (wval));
参照线(5“r”)
参照线(1/3,“r”)
包含(“赫兹”)
xlim ([0.2 - 0.6])
ylim (7 [0])
已经反复说明,补零没有影响到任何范围振幅谱,我们恢复正确的按比例缩小的振幅谱,只要除以总和(wval),不是样品的数量DFT(2 ^ 14在这个实例中)。补零恢复我们所寻求的信息,这是谐波的地方很近1/2赫兹和1/3 Hz,分别为振幅近12和图4。
虽然看起来DFT样本的样本XW (f),这不是真的,因为XW (f)是基于一个60秒的窗口和DFT件是基于一个60 + 6/4 = 61.5秒窗口,CTFT略有不同。然而,只要窗口的峰值CTFT(不管它可能)是在f = 0,适用相同的过程。,using the peaks of XWdft(n)/sum(wval) to estimate the harmonic frequencies and amplitudes, as long as the DFT is normalized based on the actual window used, as done in this example.

马特·J”class=
马特·J 2023年1月26日
编辑:马特·J 2023年1月27日
这里有一个例子显示一个FFT的振幅不改变由于零填充。在所有情况下,峰值振幅是5。
x = [1, 1, 1, 1 1];
N = (1:5) * 5;
n =
plotFcn (x, n);%在x 2 * n和FFT的阴谋
结束
持有;传奇(“n = "+ N)
函数plotFcn (x, N)
z = 0 (1, N);
x = [z、x, z];% 0垫
M =地板(元素个数(x) / 2);
X = abs (fftshift (fft (X)));
情节((- M: M) /元素个数(X), X,“o”);持有
结束
29日评论
Bjorn Gustavsson”class=
Bjorn Gustavsson 2023年1月30日
通过周末了我错过了很多讨论。以来,这已经是一个相当庞大的fourier-transform-information我不会巧妙地赶上来,会袖手旁观,阅读,但首先一个最后的评论 @Paul 的回答:
从我的角度来看,我们并不一定constant-valued函数的傅里叶变换。马特·J有限序列的数据:[1,1,1,1,1)。在做任何分析之前我想想我假设信号是未知的。如果这五个点是一个恒定信号的一个子集,这是一件事。但如果这五个点是一个矩形脉冲的子集,那么这是一个不同的事情。可能还有其他这些5分代表的东西。不管那是什么,它指导我如何做分析,例如,补零,窗户,等等。
这是一个有效的观点,但从一个Occhamian (Akaike /贝叶斯模型选择)把它将很难证明额外fourier-components以外的直流,因为这是不足以完全解释可用的数据,扩展之外,非常危险。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!