MATLAB中能否用fft函数求解e^(-10*t)*u(t)的傅里叶变换?
如何用FFT近似求解指数衰减阶跃信号的傅里叶变换?
FFT可以近似得到你要的傅里叶变换结果,但需要注意采样参数设置和正确的归一化处理,不能直接随意定义时间范围就计算,否则结果会偏离理论值。以下是具体的实现思路和修正方案:
核心原理
连续信号的傅里叶变换可以通过FFT近似,但需要将连续信号离散化采样,再通过采样周期关联离散傅里叶变换(DFT)与连续傅里叶变换的结果。
具体步骤与代码修正
正确构造离散时域信号
原信号$h(t)=e^{-10t}u(t)$是因果连续信号,离散化时只需生成$t\geq0$的采样点即可,无需额外乘单位阶跃函数(因为采样范围已经限定在$t\geq0$):Ts = 0.01; % 采样周期,需远小于信号的时间常数(这里时间常数是0.1s,Ts取0.01足够) N = 1024; % 采样点数,越大频率分辨率越高 t = 0:Ts:(N-1)*Ts; % 时间轴从0开始,对应因果信号 h = exp(-10*t); % 直接生成离散采样序列正确计算FFT并映射到实际频率
FFT的结果需要结合采样周期做归一化,才能对应连续傅里叶变换的幅值:Fs = 1/Ts; % 采样频率 H_fft = fft(h); % 计算FFT f = Fs*(0:N-1)/N; % 生成实际频率轴(范围0到Fs) H_approx = Ts * H_fft; % 归一化得到连续傅里叶变换的近似值这里乘Ts是因为连续傅里叶变换的积分可以近似为离散求和乘以采样间隔Ts,这是你原代码缺失的关键步骤。
与理论解对比验证
可以计算理论解并绘制幅频特性对比,验证近似效果:H_theory = 1./(10 + 1j*2*pi*f); % 理论傅里叶变换 % 绘制幅频曲线 figure; plot(f, abs(H_approx), f, abs(H_theory), '--'); legend('FFT近似值', '理论值'); xlabel('频率(Hz)'); ylabel('幅度');只要采样周期足够小、采样点数足够多,FFT近似值会和理论值高度重合(高频段因混叠效应会有微小误差,可通过提高采样频率改善)。
原代码的问题
- 变量名错误:
fft(x)/N中的x应为h; - 归一化错误:仅除以N不够,必须乘以采样周期Ts才能对应连续傅里叶变换;
- 阶跃函数冗余:离散化时直接限定时间范围在$t\geq0$即可,无需用
heaviside(t)引入额外的不连续点。
- 变量名错误:
内容的提问来源于stack exchange,提问作者Ellis Winston
相关产品推荐
相关产品推荐

