用 for 循环语句编制函数文件 dft1.m ,实现循环计算 X(k);
时间: 2024-10-28 20:09:07 浏览: 9
DFT.zip_DFT M文件_DFT函数m_Matlab DFT_dft.m_matlab DFT
5星 · 资源好评率100%
当你需要使用 for 循环来编写一个计算离散傅里叶变换 (DFT) 的函数时,可以参考下面这个简单的 MATLAB 函数 "dft1.m" 的例子。此函数接收一个一维实数数组 `x` 作为输入,并返回其 DFT 的幅度和相位。
```matlab
function [am,pha] = dft1(x)
% 输入检查
if ~isnumeric(x) || length(x) == 0 || any(isnan(x))
error('Input must be a non-empty numeric vector with no NaN values.');
end
% 确定样本大小
N = length(x);
% 初始化空数组存储幅值和相位
am = zeros(1, N);
pha = zeros(1, N);
% 傅立叶变换
for k = 0:(N-1) % 注意从0开始是因为DFT的定义
sum = 0;
for n = 0:(N-1)
index = n + 1; % MATLAB索引是从1开始的,所以加上1
real_part = x(index).*cos(2*pi*k*n/N);
imag_part = x(index).*sin(2*pi*k*n/N);
sum = sum + real_part - 1i*imag_part; % 复数求和
end
am(k+1) = abs(sum);
pha(k+1) = unwrap(angle(sum)); %unwrap是为了消除相位连续性的跳跃
end
% 格式化输出(去除前导零)
am = am(2:end);
pha = pha(2:end);
% 返回结果
am = complex(am, zeros(size(am)));
pha = complex(pha, zeros(size(pha)));
end
```
阅读全文