用 MATLAB 语言编写计算序列 x(n)的 N 点 DFT 的 m 函数文件 dft.m。并与 MATLAB 中的内部函数文件 fft.m 作比较。
时间: 2024-03-27 15:36:18 浏览: 232
下面是编写的 dft.m 函数文件:
```matlab
function X = dft(x, N)
%DFT - 计算序列 x(n)的 N 点DFT
% x: 输入序列
% N: DFT点数
% X: DFT结果
n = 0:N-1; % 构造 n 序列
k = 0:N-1; % 构造 k 序列
WN = exp(-1j*2*pi/N); % 计算旋转因子
nk = n'*k; % 构造 n * k 矩阵
Wnk = WN .^ nk; % 计算旋转因子矩阵
X = x * Wnk; % 计算 DFT 结果
end
```
我们可以用一组数据来测试这个函数:
```matlab
x = [1, 2, 3, 4];
N = length(x);
X = dft(x, N);
% 打印结果
disp('dft(x, N) = ');
disp(X);
% 与 fft 函数比较
X_fft = fft(x, N);
disp('fft(x, N) = ');
disp(X_fft);
```
运行结果:
```
dft(x, N) =
10.0000 + 0.0000i -2.0000 + 2.0000i -2.0000 + 0.0000i -2.0000 - 2.0000i
fft(x, N) =
10.0000 + 0.0000i -2.0000 + 2.0000i -2.0000 + 0.0000i -2.0000 - 2.0000i
```
可以看到,我们编写的 dft 函数与 MATLAB 内置的 fft 函数计算结果相同,说明我们的 dft 函数正确实现了 N 点 DFT 的计算。
阅读全文