energy of a signal in t and f domain

5 ビュー (過去 30 日間)
Ray Lee
Ray Lee 2014 年 12 月 3 日
回答済み: Paul 2024 年 11 月 10 日 4:22
The energy of a signal is expected to be the same in t and f domain.
n = 1e4;
dx = 0.25;
x = rand(n,1) -0.5;
ex = sum(x.^2) *dx; % energy in t domain
y = fft(x);
fs = 1/dx;
df = fs/n;
ya = abs(y);
ey = sum(ya.^2) *df; % energy in f domain
but from the code, ey/ex=16, exactly the squared fs.
what's the problem?

採用された回答

Star Strider
Star Strider 2014 年 12 月 3 日
You need to normalise the fft by dividing it by the length of the signal:
y = fft(x)/length(x);
See the documentation for fft for details.
  2 件のコメント
Ray Lee
Ray Lee 2014 年 12 月 4 日
Before, I got ey/ex=16
after normalization, I got ey/ex=1.6000e-07
Ray Lee
Ray Lee 2014 年 12 月 5 日
it seems y = fft(x) / fs

サインインしてコメントする。

その他の回答 (2 件)

Ray Lee
Ray Lee 2014 年 12 月 5 日
I found the solution myself.
Normalizing spectral amplitude by fs will work.
But I don't know why to do this.

Paul
Paul 2024 年 11 月 10 日 4:22
For a finite duration signal x[n] of length N, and its Discrete Fourier Transform (DFT) X[k] (as computed by fft), the energy relationship is given by Parseval's Theorem: sum(abs(x[n]^2)) = sum(abs(X[k])^2))/N
n = 1e4;
dx = 0.25;
x = rand(n,1) -0.5;
%ex = sum(x.^2) *dx; % energy in t domain
y = fft(x);
fs = 1/dx;
%df = fs/n;
%ya = abs(y);
%ey = sum(ya.^2) *df; % energy in f domain
Parseval's Theorem:
[sum(abs(x).^2) sum(abs(y).^2)/n]
ans = 1×2
825.5910 825.5910
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
If the first term is multiplied by dx, then the second must also be multiplied by dx = 1/fs
[sum(abs(x).^2)*dx sum(abs(y).^2)/n/fs]
ans = 1×2
206.3977 206.3977
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by