回 帖 发 新 帖 刷新版面

主题:如何在MATLAB中验证函数经fouier变换前后能量是否守恒

我们知道,fourier变换属于幺正变换,因此其变换前后,空域(或时域)中的能量等于其相应频域中的能量。 
以下一段小程序用于简单验证函数在fourier变换前后的能量关系,结果发现fourier变换前后能量不相等,请大侠们指正错误所在: 

%%%%%%%%% 
x=linspace(-10,10); 
y=x.^2; %原函数 
yabs=abs(y); %取模 
Z=fft(y); 
Z=fftshift(Z)./length(Z); %移动函数使能量集中在中央 
Zabs=abs(Z); 
d1=abs(yabs(2)-yabs(1)); %变换前函数的间隔 
d2=abs(Zabs(2)-Zabs(1)); %变换后函数的间隔 
E1=sum(yabs.^2.*d1) %变换前函数的总能量 
E2=sum(Zabs.^2.*d2) %变换后函数的总能量 

得到: 
E1 = 8.3245e+005 
E2 = 1.3354 

补充: 
1.程序里认为能量的表达是函数的模的平方的积分 
2.认为一维函数的能量是离散后的函数值与相应采样距离的内积之和 
3.fft变换时,length(Z)的使用是否正确? 
4.变换前的函数自变量x为【-10,10】,而不是【-inf,inf】. 

请帮忙指出程序或补充说明中的错误,谢谢,万分感谢!!!

回复列表 (共1个回复)

沙发

close all;
clear;
clc;

xt = linspace(-10, 10);
% 时域能量
Energy_time = sum(xt.^2);
% 傅立叶变换
fft_xt = fft(xt);
% 能量谱
Spectrum_xt = abs(fft_xt).^2;
% 频域能量
Energy_freq = sum(Spectrum_xt)/length(Spectrum_xt);
disp('时域能量:');
Energy_time
disp('频域能量:');
Energy_freq

And the result:
时域能量:

Energy_time =

  3.4007e+003

频域能量:

Energy_freq =

  3.4007e+003
========================
completed!

我来回复

您尚未登录,请登录后再回复。点此登录或注册