用matlab实现一维信号的DFT变换
时间: 2023-09-09 13:10:21 浏览: 59
这里给出一个简单的 Matlab 代码示例,用于计算一维离散傅里叶变换(DFT),其输入为一个长度为 $N$ 的实数序列 $x[n]$:
```matlab
function X = dft(x)
% DFT - Discrete Fourier Transform
% Usage: X = dft(x)
% x - input signal
% X - DFT of x
N = length(x);
n = 0:N-1;
k = n.';
M = exp(-1i*2*pi*n*k/N);
X = M*x(:);
end
```
其中,变量 $N$ 表示序列的长度,变量 $n$ 是一个长度为 $N$ 的行向量,表示离散时间坐标。变量 $k$ 是一个长度为 $N$ 的列向量,表示离散频率坐标。变量 $M$ 是一个 $N \times N$ 的矩阵,表示 DFT 变换矩阵,它的第 $(n,k)$ 个元素为 $e^{-j2\pi nk/N}$。最后,输出变量 $X$ 是一个长度为 $N$ 的列向量,表示 $x[n]$ 的 DFT 变换。
下面是一个简单的测试:
```matlab
% Generate a test signal
N = 16;
n = 0:N-1;
x = sin(2*pi*3*n/N) + sin(2*pi*8*n/N);
% Compute the DFT of x
X = dft(x);
% Plot the result
f = n/N;
stem(f,abs(X),'linewidth',1.5);
xlabel('Frequency (cycles/sample)');
ylabel('Magnitude');
title('DFT of x')
```
这段代码将生成一个长度为 $16$ 的测试信号 $x[n]$,并计算其 DFT 变换 $X[k]$。最后,使用 Matlab 的 `stem` 函数绘制 $|X[k]|$ 的图像,表示频域幅值谱。