傅里叶变换(FFT)的多相滤波结构实现

作者:桂。

时间:2017-09-25  14:53:01

链接:http://www.cnblogs.com/xingshansi/p/7591868.html



前言

以前在梳理信号频域变换的时候,提到逆序级联FFT(Inverse cascade FFT)的实现思路,后来分析多相滤波信道化,才发现其实Cascade FFT就是FFT的多相结构实现,在此系统梳理一下。

一、多相结构FFT实现

  A-传统测频技术分析

信号的短时傅里叶变换(STFT)可表示为:

其中s为输入信号,w为对应窗函数。长度为N,k为对应频率(信道),n为对应时刻。

一般的测频思路是:AD采样,加窗,FFT实现,门限检测以及频率检测(粗测频),借助Rife算法实现精确测频。

其中,FFT实现步骤为了进一步节约资源,通常利用MoniFFT的思路,即进一步对频点就行量化。

这里存在一个平滑点数与处理时间的制约关系(对应就是短时傅里叶变换,short-time fourier transform,STFT):

  窗函数的滑动步长决定了短时傅里叶变换的时域分辨率,对其运算时间裕度、输出数据量等也造成很大影响。当窗口不交叠的滑动时时域分辨率最差,输出数据率低,留给 FFT 模块的信号处理时间长,滑动距离变小时,时域分辨率提高,数据输出率也增加,留给 FFT 模块的数据处理时间变少。当系统工作在高速率,且要求较高的时频分辨率时,基于短时傅里叶变换的接收机将面临实时处理的瓶颈,并且大量高速的数据输出也会对后续处理环节造成计算量和计算时间上的压力。

  B-多相测频技术分析

当数据量大,且要求较高时频分辨率时,可以借助多相结构来实现FFT的运算思路。

信号STFT重写为:

对应多相FFT实现思路:抽取 - 乘以对应抽取的窗函数 - FFT变换 - 乘法器(补偿因子) -  并行FFT处理 - 并串转换。

二、仿真验证

对应代码实现:

clc;clear all;close all;
%orignal signal
fs = 200;
f0 = 30;
t = 0:1/fs:2;
x = sin(2*pi*f0*t‘);
Na = 2^nextpow2(length(x));
sig = [x;zeros(Na-length(x),1)];
%polyphase FFT
N=16;M=Na/N;
sr = reshape(sig,M,N).‘;
sr = fft(sr);
P = exp(-1j*2*pi*[0:N-1]‘*[0:M-1]/M/N);
sr=sr.*P;
sr = fft(sr.‘).‘;
%save result
X_CaFFT = sr(:);
%plot
xf = linspace(0,fs,Na);
plot(xf,abs(X_CaFFT),‘k‘);grid on;hold on;
xlabel(‘频率(Hz)‘);
ylabel(‘幅度‘);

  对应仿真结果:

主要实现架构:

合成模块技术细节:

此处的乘法器,对应算法实现,可以是直接的乘法器 / 也可以是乘法器(相位因子相乘)与FFT的级联实现。

时间: 2024-11-08 12:24:43

傅里叶变换(FFT)的多相滤波结构实现的相关文章

[学习笔记] 多项式与快速傅里叶变换(FFT)基础

引入 可能有不少OIer都知道FFT这个神奇的算法, 通过一系列玄学的变化就可以在 $O(nlog(n))$ 的总时间复杂度内计算出两个向量的卷积(或者多项式乘法/高精度乘法), 而代码量却非常小. 博主一年半前曾经因COGS的一道叫做"神秘的常数 $\pi$"的题目而去学习过FFT, 但是基本就是照着板子打打完并不知道自己在写些什么鬼畜的东西OwO 不过...博主这几天突然照着算法导论自己看了一遍发现自己似乎突然意识到了什么OwO然后就打了一道板子题还1A了OwO再加上午考试差点AK

快速傅里叶变换FFT

快速傅里叶变换FFT DFT是信号分析与处理中的一种重要变换.但直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,直接用DFT算法进行谱分析和信号的实时处理是不切实际的. 1.直接计算DFT 长度为N的有限长序列x(n)的DFT为: 2.减少运算量的思路和方法 思路:N点DFT的复乘次数等于N2.把N点DFT分解为几个较短的DFT,可使乘法次数大大减少.另外,旋转因子WmN具有周期性和对称性. (考虑x(n)为复数序列的一般情况,对某一个k值,直接按上式计算X(k)值需

浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理

浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 只要稍微看过一点线性代数的应该都知道范德蒙德行列式. \[V(x_0,x_1,\cdots ,x_{n-1})=\begin{bmatrix} {1}&{1}&{\cdots}&{1}\{x_{0}}&{x_{1}}&{\cdots}&{x_{n-1}}\{x_{0}^2}&{x_{1}^2}&{\cdots

图像傅里叶变换(快速傅里叶变换FFT)

学习DIP第7天,图像傅里叶变换 习惯性,开篇废话 今天公司的网不知怎么了,死活打不开CSDN,公司有100多架客机,也有极限速度60kb/s的网速,还有3K的工资. 图像FFT 上篇已经介绍了关于2D FFT的相关知识,这篇只介绍在图像中的应用,对于一幅图像,做二维FFT后,即可得到其傅里叶变换,傅里叶变换后是二维复数矩阵,因为二维数组,如果是实数,是可以通过变换到0~255通过灰度图像显示出来,而变换结果是复数,所以我们通过显示其幅度,即复数的模,来显示傅里叶谱(幅度谱),不废话,上图: 原

【笔记篇】(理论向)快速傅里叶变换(FFT)学习笔记w

现在真是一碰电脑就很颓废啊... 于是早晨把电脑锁上然后在旁边啃了一节课多的算导, 把FFT的基本原理整明白了.. 但是我并不觉得自己能讲明白... Fast Fourier Transformation, 快速傅里叶变换, 是DFT(Discrete Fourier Transform, 离散傅里叶变换)的快速实现版本. 据说在信号处理领域广泛的应用, 而且在OI中也有广泛的应用(比如SDOI2017 R2至少考了两道), 所以有必要学习一波.. 划重点: 其实学习FFT最好的教材是<算法导论

【转】快速傅里叶变换(FFT)详解

目录 前言 多项式 系数表示法 点值表示法 复数 向量 圆的弧度制 平行四边形定则 复数 运算法则 单位根 单位根的性质 快速傅里叶变换 快速傅里叶逆变换 理论总结 递归实现 迭代实现 本文只讨论FFT在信息学奥赛中的应用 文中内容均为个人理解,如有错误请指出,不胜感激 回到顶部 前言 先解释几个比较容易混淆的缩写吧 DFT:离散傅里叶变换->O(n2)O(n2)计算多项式乘法 FFT:快速傅里叶变换->O(n?log(n)O(n?log?(n)计算多项式乘法 FNTT/NTT:快速傅里叶变换

快速傅里叶变换(FFT)模板

//有多少项N取多至少8~10倍 #include <algorithm> #include <cmath> #include <complex> #include <cstdlib> using namespace std; typedef complex<double> cn; const int N=1e7+1; const double Pi=3.1415926535;//Pi通常取10位即可(随意) cn a[N],b[N]; int

快速傅里叶变换FFT学习小记

FFT学得还是有点模糊,原理那些基本还是算有所理解了吧,不过自己推这个推不动. 看的资料主要有这两个: http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transform https://www.zybuluo.com/397915842/note/37965 这儿简单做做笔记. 多项式点值表示 首先$FFT$用来快速计算两个多项式的乘积. 一个$n$次多项式(最高次为$n$),可以用系数表示法

几种快速傅里叶变换(FFT)的C++实现

DFT的的正变换和反变换分别为(1)和(2)式.假设有N个数据,则计算一个频率点需要N次复数乘法和N-1次复数加法,整个DFT需要N*N次复数乘 法和N(N-1)次复数加法:由于一次的复数乘法需要进行4次的实数乘法和2次的复数加法,一次的复数加法需要两次的实数加法,因此整个DFT需要 4*N*N次的实数乘法和2*N(N-1)+2*N*N≍4*N*N次的复数加法.当N比较大时,所需的计算工作量相当大,例如N=1024时大约需要 400万次乘法运算,对于实时信号处理来说,将对计算设备提出非常苛刻的要