fft运算后需要对幅值乘2除N(变换的点数)的说明(Matlab)

原文:http://blog.sina.com.cn/s/blog_818aa1b90102vgor.html
为什么matlab中的fft运算后想要得到信号的幅值需要对运算结果的幅值进行乘2除N
对于一个时域信号x(t),采样频率为Fs,信号频率F,采样点数为N,进行N采样后为y[n],则fft(y,N)计算所得的结果就是一个为N点的复数a+bi.
每一个点就对应着一个频率点.这个点的模值,就是该频率值下的幅度特性.
得到的频率点与相应点处的模值与原始信号的频率和幅度有什么关系?
1.频率点:实际信号第n点处的频率是nFs/N
2.幅度:第n(其中n!=1)点处的fft计算的结果是复数a+bi,模值A=sqrt(a2+b2),那么实际信号的幅度是2A/N;
当n=0时(0Hz),第一个点就是直流分量,它的模值就是直流分量的N倍,那么实际信号的幅度是A/N,注意N是采样点而不是进行FFT的点数
3.相位:每个点处的相位就是该频率下信号的相位。

matlab自带的fft例程详解:

Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7sin(2pi50t) + sin(2pi120t);
y = x + 2randn(size(t)); % Sinusoids plus noise增加的是一个1000点的随机噪声
plot(Fst(1:50),y(1:50)) % 绘制时域信号图,取前50title(‘Signal Corrupted with Zero-Mean Random Noise’)
xlabel(‘time (milliseconds))

NFFT = 2^nextpow2(L); % 主要用于计算L点最近的2的整数次幂的点数,此处采样为1000点,离它最近的是1024,所以NFFT是1024
Y = fft(y,NFFT)/L; %Y是复数矩阵,已经在此处除以L了,注意除的是L不是NFFT
f = Fs/2*linspace(0,1,NFFT/2+1);%频率分辨率矩阵,linspace将0-1平均分成NFFT/2% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1))) �s计算模值,前面已经除以L了,此处绘图时候仅乘以2,这样绘制的频谱图就是时域信号对应频率点的真实幅值
title(‘Single-Sided Amplitude Spectrum of y(t))
xlabel(‘Frequency (Hz))
ylabel(|Y(f)|)
  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值