码迷,mamicode.com
首页 > 其他好文 > 详细

选带傅里叶变换(zoom-fft)

时间:2015-07-11 16:48:10      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:matlab   fft   zoom-fft   

选带傅里叶变换的原理大家可以看书。大致的步骤为

  1. 移频 (将选带的中心频率移动到零频)
  2. 数字低通滤波器  (防止频率混叠)
  3. 重新采样  (将采样的数据再次间隔采样,间隔的数据取决于分析的带宽,就是放大倍数)
  4. 复FFT (由于经过了移频,所以数据不是实数了)
  5. 频率调整 (将负半轴的频率成分移到正半轴)

程序如下:

function [f, y] = zfft(x, fi, fa, fs)
% x为采集的数据
% fi为分析的起始频率
% fa为分析的截止频率
% fs为采集数据的采样频率
% f为输出的频率序列
% y为输出的幅值序列(实数)

f0 = (fi + fa) / 2;              %中心频率
N = length(x);                 %数据长度

r = 0:N-1;
b = 2*pi*f0.*r ./ fs;               
x1 = x .* exp(-1j .* b);          %移频

bw = fa - fi;                                        
                     
B = fir1(32, bw / fs);             %滤波 截止频率为0.5bw
x2 = filter(B, 1, x1);               

c = x2(1:floor(fs/bw):N);           %重新采样
N1 = length(c);
f = linspace(fi, fa, N1);
y = abs(fft(c)) ./ N1 * 2;                         
y = circshift(y, [0, floor(N1/2)]);            %将负半轴的幅值移过来
end

应用实例:

fs = 2048;
T = 100;
t = 0:1/fs:T;
x = 30 * cos(2*pi*110.*t) + 30 * cos(2*pi*111.45.*t) + 25*cos(2*pi*112.3*t) + 48*cos(2*pi*113.8.*t)+50*cos(2*pi*114.5.*t);
[f, y] = zfft(x, 109, 115, fs);
plot(f, y);

效果:

技术分享



版权声明:本文为博主原创文章,未经博主允许不得转载。

选带傅里叶变换(zoom-fft)

标签:matlab   fft   zoom-fft   

原文地址:http://blog.csdn.net/whoispo/article/details/46842403

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!