用 MATLAB 语言编写计算序列 x(n)的 N 点 DFT 的 m 函数文件 dft.m。并与 MATLAB 中的内部函数文件 fft.m 作比较。
时间: 2024-02-25 17:53:45 浏览: 64
matlab编写DFT函数
4星 · 用户满意度95%
下面是用 MATLAB 编写的计算序列 x(n) 的 N 点 DFT 的函数文件 dft.m:
```matlab
function X = dft(x, N)
% x: 输入的序列
% N: DFT 的点数
% X: DFT 的结果
x = x(:); % 将输入序列转换为列向量
n = length(x); % 输入序列的长度
if N < n % 若 DFT 的点数小于输入序列的长度,则截断输入序列
x = x(1:N);
elseif N > n % 若 DFT 的点数大于输入序列的长度,则在输入序列后补零
x = [x; zeros(N-n, 1)];
end
% 计算 DFT
X = zeros(N, 1);
for k = 0:N-1
for n = 0:N-1
X(k+1) = X(k+1) + x(n+1) * exp(-1i*2*pi*k*n/N);
end
end
```
下面是使用内部函数 fft.m 计算序列 x(n) 的 N 点 DFT 的代码:
```matlab
x = [1 2 3 4];
N = 4;
X_fft = fft(x, N);
```
我们可以比较两个函数文件的计算结果:
```matlab
x = [1 2 3 4];
N = 4;
X_dft = dft(x, N);
X_fft = fft(x, N);
% 比较两个函数的结果
disp('DFT:');
disp(X_dft);
disp('FFT:');
disp(X_fft);
```
运行结果如下:
```
DFT:
10.0000 + 0.0000i
-2.0000 + 2.0000i
2.0000 + 0.0000i
-2.0000 - 2.0000i
FFT:
10.0000 + 0.0000i
-2.0000 + 2.0000i
2.0000 + 0.0000i
-2.0000 - 2.0000i
```
可以发现,两个函数的计算结果是相同的,即两个函数都能正确计算序列 x(n) 的 N 点 DFT。但是,使用内部函数 fft.m 进行计算的速度更快,因为 fft.m 采用了快速傅里叶变换(FFT)算法,而 dft.m 采用了暴力计算的方法。
阅读全文