0
点赞
收藏
分享

微信扫一扫

javascript 常见设计模式

路西法阁下 2024-07-24 阅读 18
算法matlab

 使用 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点数也存在关系,太多点数会存在能量泄露。
举报

相关推荐

0 条评论