无内置函数实现Matlab有限傅里叶级数变换报错求助
修复有限傅里叶级数变换代码的尺寸不匹配问题
问题根源
原代码存在两个核心问题:
- 错误使用内置函数
integral处理离散信号xt:integral要求输入的函数是连续变量的映射,但xt是离散采样点的行向量,和连续变量tau运算时会出现尺寸不匹配。 - 违反“无内置函数”的需求:
integral属于Matlab内置积分函数,不符合题目要求。
修复后的代码
function [xhat, ck] = ffs(xt, t, n, T) % 检查输入尺寸是否匹配 if length(xt) ~= length(t) error('xt和t的长度必须一致'); end xhat = zeros(size(t)); ck = zeros(1, 2*n+1); dt = t(2) - t(1); % 计算采样间隔 for k = -n:n ck_index = k + n + 1; % 用离散求和近似积分计算傅里叶系数ck exp_term = exp(-1j * 2 * pi * k * t / T); ck(ck_index) = (dt / T) * sum(xt .* exp_term); % 重构信号xhat xhat = xhat + ck(ck_index) * exp(1j * 2 * pi * k * t / T); end end
修复说明
- 离散求和替代连续积分:对于离散采样的信号,傅里叶级数系数的积分可以用采样点的加权求和近似,权重为采样间隔
dt,这是数值积分中矩形法的应用,完全适配离散信号的处理逻辑,同时解决了尺寸不匹配问题。 - 移除内置函数:替换
integral为基础的sum运算,满足“无内置函数”的需求。 - 增加输入检查:添加了
xt和t长度一致性的检查,提前捕获输入错误。
内容的提问来源于stack exchange,提问作者yasmine Alek
相关产品推荐
相关产品推荐

