%% FFT函数,函数的作用是对输入信号进行FFT,做频谱分析
function [y, f] = FFT(x, ts) % 函数输入的是信号y和采样周期ts,输出为频谱的幅值y和对应的频率f
fs = 1/ts; % 采样频率fs
L = length(x); % 采样信号的数据长度
NFFT = 2^nextpow2(L); % NFFT表示计算N点的FFT,FFT中N应为2的整数次幂
% nextpow2表示取最接近的较大2次幂,nextpow2(L)等于2的幂指数中最靠近L的幂指数的幂
x = x - mean(x);
y = fft(x, NFFT)/L; % fft(y, NFFT)后的幅值需要*2/L
y = 2*abs(y(1:NFFT/2+1)); % y为最终的幅值,因为频谱对称,所以只显示一半的幅值1:NFFT/2
f = fs/2*linspace(0, 1, NFFT/2+1); % f为最小频率间隔,频率也只显示一半,fs/2表示只取采样周期的一半
end
% %% FFT的详细编程
% function [y, f] = FFT(x, ts) % 函数输入的是信号y和采样周期ts,输出为频谱的幅值y和对应的频率f
% fs = 1/ts; % 采样频率fs
% L = length(x); % 采样信号的数据长度
% NFFT = 2^nextpow2(L); % NFFT表示计算N点的FFT,FFT中N应为2的整数次幂
% % nextpow2表示取最接近的较大2次幂,nextpow2(L)等于2的幂指数中最靠近L的幂指数的幂
% 例:如果L=100,则NFFT=7,因为2^7=128,而128是所有大于100的2的整数次幂数字中最小的一个
% y = fft(x, NFFT); % 进行FFT
% mag=abs(y); % 求取振幅
% y=mag*2/L; % 真正的振幅需要*2/L
% y=y(1:NFFT/2+1); % N个点的FFT值是以NFFT/2为对称的,故只画出一半的图形
% f=(0:NFFT-1)*fs/NFFT; % FFT结果的两点之间的频率间隔是fs/NFFT,频率序列为(0:NFFT-1)*fs/NFFT
% f=f(1:NFFT/2+1) % 频率轴也只显示一半
% end
评论0