matlab快速傅里叶变换的真实频率与幅值

function [freq,y] = self_FFT(x,fs)
% freq 返回的真实频率
% y 返回的真是幅值
% x 输入信号
% 采样频率 fs = 1/T (T采样时间间隔)
    N = length(x);

    xfft = abs(fft(x,N)) * 2/N;       % 快速傅里叶变换
    y = xfft(1:floor(N/2));           % 幅值
    y(1) = y(1)/2;                    % 0Hz时的幅值
    freq = (0:N-1) * fs/N;            % 频率
    freq = freq(1:floor(N/2));        % 真实频率范围
end

由于matlab自带fft()函数无法表示真正的频率与幅值,所以本文参考网络资料自写了一个。

例子:

fs = 500;
% 采样频率要大于信号最高频率的2倍
t = 0 : 1/fs : (2-1/fs);
x = 10*sin(2*pi*100*t) + 15*cos(2*pi*200*t) + 8;

% 调用函数
% [f,y] = self_FFT(x,fs);

% 不调用函数
N = length(x);
xfft = abs(fft(x,N)) * 2/N;       % 快速傅里叶变换
y = xfft(1:floor(N/2));           % 幅值
y(1) = y(1)/2;                    % 0Hz时的幅值
freq = (0:N-1) * fs/N;            % 频率
f = freq(1:floor(N/2));           % 真实频率范围

plot(f,y);
title('快速傅里叶变换');
xlabel('频率');
ylabel('幅值');



运行结果:

 ====

为了方便调用self_FFT()函数,可以将函数文件添加到matlab安装路径下的 toolbox中

安装位置...\MATLAB\toolbox

 

将函数文件或文件夹选中 并 保存

参考资料:

如何 FFT(快速傅里叶变换) 求幅度、频率(超详细 含推导过程)_傅里叶变换的频率_Xav Zewen的博客-CSDN博客

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值