使用 fs 进行采样,进行 N点FFT 选择显示0~N/2+1点的幅值 横坐标对应频率计算公式: fs * n / N |
举个梨子: 频率2kHz采样1s,得到2000个点的序列y(n) 对序列y(n)做4096点的FFT 幅值响应对应的横坐标频率计算: 2kHz * n / 4096 |
clc;
clear;
close all ;
T = 0.0005;%周期;x轴的步长
Fs = 1/T; %频率
%待采样函数
x = 0:T:1-T;
y = 5*sin(2*pi*50*x) + 7*sin(2*pi*120*x) + 2*sin(2*pi*160*x) + 10*sin(2*pi*500*x);
subplot(3,1,1);plot(x,y);
title("x,y");
L = 4096;
Y = fft(y,L); % L点 FFT 不足L点会自动补零
P2 = abs(Y/L); % Y 为傅里叶变换得到的结果 L为Y的长度
subplot(3,1,2);plot(0:L-1,P2);
title("4096点FFT");
P1 = 2* P2(1:L/2+1); % 取前一半+1 个元素 , 对称叠加
f = Fs*(0:(L/2))/L;
subplot(3,1,3);plot(f,P1) ;
title("fft");xlabel('Hz');ylabel('振幅');
y = 5*sin(2*pi*50*x) + 7*sin(2*pi*120*x) + 2*sin(2*pi*160*x) + 10*sin(2*pi*500*x); |
第三幅图可以看出横轴X对应的几个峰值与被测信号相近 根据奈奎斯特采样定律,采样信号至少为被采样信号的两倍 fs=2000Hz 被采样信号最高为1000Hz |
第三幅图的幅值几乎为被采样信号的一半: |
Matlab 计算 FFT 的方法及幅值问题_matlab取幅值的函数-CSDN博客 |
幅值与FFT点数也存在关系,太多点数会存在能量泄露。 |