自编FFT、IFFT函数---基于MATLAB

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
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值