[signal processing] FFT快速傅立叶变换

Fast Fourier Transform是离散傅立叶变换的快速算法,可将信号转换到频域。
应用:1、在频率内可视,得到频率组成。2、为滤波做准备。
采样率:Fs,频率:F,信号长度:L,采样点数N。FFT后是N点的复数,每一个点对应一个频率点,点的模值对应该频率下的幅度特性
幅度特性与原始信号幅值的关系
1、原始峰值为A,FFT结果的每个点(除去第一个直流分量)模值为A的N/2倍,第一个点直流分量模值是自留分量的N倍。
2、每个点的相位代表在该频率下的信号的相位。

采样频率Fs,被N-1个点平均分成N等份,每个点的频率依次增加。为了便于FFT运算,N取大于信号长度L的2的整数次方。
例如某点n所表示的频率为: Fn=(n-1)*Fs/N。可以看出,Fn所能分辨到频率为Fs/N。如果采样频率Fs为1024,采样点数为1024,则结果可以分辨到1Hz。1024Hz采样率,1s采样1024个点,采集1s的信号做FFT,结果可以分析到1Hz,材料2s的信号做FFT,结果分辨率可以达到0.5Hz。

即如果提高分辨力,则必须增加采样点数,即采样时间。分辨率=1/采样时间。

FFT之后,某点用复数a+bi表示。该复数的模是sqrt(a^2+b^2)。相位就是atan2(b,a)。根据以上结果,可以得到对应信号的表达式
An/(N/2)*cos(2*pi*Fn*t+Pn)。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。

exam.
x=5+7*cos(2*pi*15*t)+3cos(2*pi*40*t);
用128的采样率采样,总共采样256点。按照分析,频率分辨力为0.5Hz

例子参考连接
http://blog.sina.com.cn/s/blog_86186c970101tgcm.html

matlab 程序如下

Fs = 128;       % 采样频率
T = 1/Fs;       % 采样时间
L = 256;        % 信号长度
t = (0:L-1)*T; % 时间
x = 5 + 7*cos(2*pi*15*t - 30*pi/180) + 3*cos(2*pi*40*t - 90*pi/180);   %cos为底原始信号
y = x + randn(size(t));     %添加噪声
figure;
plot(t,y)
title('加噪声的信号')
xlabel('时间(s)')
N = 2^nextpow2(L); %采样点数,采样点数越大,分辨的频率越精确N>=L,超出的部分信号补为0
Y = fft(y,N)/N*2;   %除以N乘以2才是真实幅值,N越大,幅值精度越高
f = Fs/N*(0:1:N-1); %频率
A = abs(Y);     %幅值
P = angle(Y);   %相值
figure;
subplot(211);plot(f(1:N/2),A(1:N/2));   %函数fft返回值的数据结构具有对称性,因此我们只取前一半
title('幅值频谱')
xlabel('频率(Hz)')
ylabel('幅值')
subplot(212);plot(f(1:N/2),P(1:N/2));
title('相位谱频')
xlabel('频率(Hz)')
ylabel('相位')
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值