zoukankan      html  css  js  c++  java
  • 选带傅里叶变换(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);
    

    效果:



  • 相关阅读:
    几个数之和----数组刷题
    单调栈刷题
    腾讯金融科技凉经
    mysql刷题
    链表类题目常用方法
    阿里云一面凉经
    腾讯TEG一面凉经
    腾讯软件开发-后台开发实习生-一面凉经
    剑指 Offer 19. 正则表达式匹配
    剑指 Offer 20. 表示数值的字符串
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6819818.html
Copyright © 2011-2022 走看看