FFT函数,纯属个人学习兴趣,存在的问题,希望广大学者指正。
function Y = myfft(X,N)
%输入参数 X:输入信号
% N: FFT的采样点数
%输出参数 Y:FFT结果,即频域信息
%判断信号的长度
if X<N %若小于FFT的采样点数,则在末尾补0
X = [X,zeros(1,N-length(X))];
else %否则,截取前N个数作为FFT的输入
X = X(1:N);
end
Y = zeros(1,N); %初始化FFT结果的存储变量
for k = 1:N
for n = 1:N
y = X(n)*exp(-1i*2*pi*(k-1)*(n-1)/N); %进行FFT转换
Y(k) = Y(k)+y; %将每次结果累加,得到最终的结果
end
end
对应于上述FFT函数的IFFT函数
function X = myifft(Y,N)
%输入参数 Y:FFT结果,即频域信息
% N: FFT的采样点数
%输出参数 X:IFFT后对应的时域信息
X = zeros(1,N); %初始化IFFT结果的存储变量
for n = 1:N
for k = 1:N
x = real(1/N*Y(n)*exp(1i*2*pi*(k-1)*(n-1)/N)); %进行IFFT转换
X(k) = X(k)+x; %将每次结果累加,得到最终的结果
end
end
验证:
clc
clear
% 导入信号
load('EEG