如何写fft的matlab代码
时间: 2024-02-12 09:34:35 浏览: 23
下面是一个简单的 MATLAB FFT 代码,假设输入信号为 x,采样率为 Fs:
```
L = length(x); % 信号长度
NFFT = 2^nextpow2(L); % 采样点数
Y = fft(x, NFFT)/L; % FFT
f = Fs/2*linspace(0, 1, NFFT/2+1); % 频率向量
P = 2*abs(Y(1:NFFT/2+1)); % 幅值谱
% 画图
plot(f, P)
title('单边幅值谱')
xlabel('频率 (Hz)')
ylabel('|Y(f)|')
```
这个代码首先计算了输入信号的长度 `L`,然后计算了采样点数 `NFFT`,并且使用 `fft` 函数对输入信号进行了 FFT 变换,得到频域信号 `Y`。最后,通过计算幅值谱 `P`,画出了单边幅值谱图。
相关问题
fft matlab代码自写
当然可以!以下是一个简单的FFT(快速傅里叶变换)的MATLAB代码示例:
```matlab
function X = myfft(x)
N = length(x);
if N <= 1
X = x;
else
even = myfft(x(1:2:N));
odd = myfft(x(2:2:N));
factor = exp(-2i*pi*(0:N/2-1)/N);
X = [even + factor.*odd, even - factor.*odd];
end
end
```
这个代码实现了一个递归的FFT函数 `myfft`,它输入一个向量 `x`,输出它的FFT结果 `X`。代码首先检查向量的长度是否小于等于 1,如果是,则直接返回向量本身。否则,它将向量分成偶数和奇数部分,并对它们进行递归调用 `myfft`。最后,根据傅里叶变换的定义,将两部分结果合并起来。
你可以使用以下代码测试这个函数:
```matlab
x = [1, 2, 3, 4];
X = myfft(x);
disp(X);
```
输出结果应该是 `[10, -2+2i, -2, -2-2i]`,与MATLAB内置的 `fft` 函数的结果相同。
希望这可以帮助到你!如果你有任何其他问题,请随时提问。
FFT matlab代码
下面是一个简单的 MATLAB FFT 代码示例:
```matlab
% 生成一个信号
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间向量
x = sin(2*pi*50*t) + sin(2*pi*120*t); % 信号
% 执行 FFT
N = length(x);
X = abs(fft(x)/N);
f = fs*(0:N/2-1)/N;
% 绘制频谱图
plot(f,X(1:N/2))
xlabel('频率(Hz)')
ylabel('幅度')
```
这个代码生成了一个包含两个正弦波的信号,并使用 FFT 计算其频谱。最后,通过绘制频谱图来显示信号的频率成分。