用matlab写一个fft
时间: 2023-07-20 19:35:29 浏览: 47
以下是一个使用 MATLAB 编写的简单 FFT 算法,它可以计算实数序列的快速傅里叶变换:
```matlab
function X = myfft(x)
% MYFFT - 实数序列的快速傅里叶变换
% X = MYFFT(x) 计算实数序列 x 的快速傅里叶变换
% 将 x 扩展为偶数长度,使用零填充
N = length(x);
if rem(N,2) == 1
x(end+1) = 0;
N = N + 1;
end
% 递归终止条件
if N == 2
X = [x(1)+x(2), x(1)-x(2)];
else
% 递归计算两个偶数长度序列的FFT
X_even = myfft(x(1:2:end));
X_odd = myfft(x(2:2:end));
% 组合两个序列的FFT
n = N/2;
Wn = exp(-1i*2*pi*(0:n-1)/n);
X = [X_even + Wn.*X_odd, X_even - Wn.*X_odd];
end
end
```
要使用此函数,只需将实数序列作为输入传递给 `myfft` 函数,它将返回相应的快速傅里叶变换结果。例如,要计算长度为 8 的实数序列 `[1, 2, 3, 4, 4, 3, 2, 1]` 的 FFT:
```matlab
x = [1, 2, 3, 4, 4, 3, 2, 1];
X = myfft(x);
```
注意:由于 MATLAB 内置的 `fft` 函数已经非常高效,因此在实际应用中,建议使用内置的 `fft` 函数。