选带傅里叶变换(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);

效果:



  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
zoom-fft 是一种在 C 语言中实现的快速傅里叶变换算法。快速傅里叶变换(Fast Fourier Transform,FFT)是一种经典的数字信号处理算法,用于将时域信号转换为频域信号。在 C 语言中,通过使用 zoom-fft 算法,可以高效地实现 FFT 算法。 zoom-fft 算法通过分治的思想,在每一层递归中将问题规模缩小一半,从而快速地计算出傅里叶变换。它利用了傅里叶变换中的对称性质,减少了冗余计算的数量,从而大幅提高了计算效率。zoom-fft 算法的时间复杂度为 O(nlogn),相比传统的傅里叶变换算法具有更高的速度和效率。 在 C 语言中实现 zoom-fft 算法需要借助于递归和迭代的技巧。首先,将输入信号按照奇偶下标分为两部分,然后对每一部分进行递归调用 zoom-fft 算法,并计算得到各自的傅里叶变换结果。接着,将这两部分的结果按照一定的规则合并,得到完整的傅里叶变换结果。 zoom-fft 算法在 C 语言中的实现可以使用数组和指针等数据结构和编程技巧。通过递归和迭代的方式,可以将输入信号不断二分,直到问题规模足够小,然后进行基础的傅里叶变换计算。最后,再通过合并各个部分的傅里叶变换结果,得到整个信号的傅里叶变换结果。 总结来说,zoom-fft 是一种在 C 语言中实现的快速傅里叶变换算法,通过分治和递归的方法高效地计算信号的傅里叶变换。它在频谱分析、信号处理和图像处理等领域有着广泛的应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值