稀疏傅里叶变换(sparse FFT)

作者:桂。

时间:2018-01-06  14:00:25

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



前言

  对于数字接收来讲,射频域随着带宽的增加,AD、微波、FPGA资源的需求越来越高,但频域开的越宽并不意味着频谱越宽,有限信号内可认为信号在宽开频域稀疏分布,最近较为流行的稀疏FFT(SFFT)是在传统FFT的基础上,利用了信号的稀疏特性,使得计算性能优于FFT。本文简单记录自己的理解。

一、稀疏FFT

主要是12年MIT的论文:Simple and Practical Algorithm for Sparse Fourier Transform。

核心思想:

SFT 作为这样一种“输出感知”算法,其核心思路是按照一定规则 Γ ( • )将信号频点投入到一组“筐”中(数量为 B,通过滤波器实现 ) . 因频域是稀疏的,各大值点将依很高的概率在各自的“筐”中孤立存在 . 将各“筐”中频点叠加,使 N 点长序列转换为 B点的短序列并作 FFT 运算,根据计算结果,忽略所有不含大值点的“筐”,最后根据对应分“筐”规则,设计重构算法 Γ -1 ( • )恢复出 N 点原始信号频谱。

算法流程:

步骤一:选定一个sigma,实现数据频域重排。

频域重排主要是因为FFT之后,频域大值集中在一起,需要将这一伙打散,保证频域的稀疏性(sparse)。sigma的选择主要利用性质:

这里sigma^-1是sigma关于模N的逆元。该点主要说明:变化前后的完备性(信号可重建)。

步骤二:加窗。

这里根据筐的多少(B),平分2pi频域,即带宽2pi/B,理想窗函数为矩形窗,但时域为无限长的sinc函数,需要加窗截断,可选择gausswin。

即win = sinc.*gausswin。

步骤三:频域抽取并作FFT

加窗之后,保证了频谱不至于展宽严重,进一步保证了稀疏性。频域降采样:

等价于时域的混叠的傅里叶变换:

故直接在时域进行处理。处理完成后进行FFT运算。

该操作的理论基础为:

步骤四:哈希映射

主要就是(4)~(6)的操作,这个就比较直观了。

code(仅供参考)

clc;clear all;close all;
%%*************Step0:生成信号**************
fs = 1000;
f0 = 100;
N = 256*256;
t = [0:N-1]/fs;
x = exp(1j*2*pi*t*f0);
%%*************Step1:频谱随机重排**************
sigma = 19; %inv(sigma) = 27
pn = [];
for i = 1:sigma
    data = x(i:sigma:end);
    pn = [pn data];
end
%%*************Step2:加窗**************
%加窗函数,窗函数频谱宽度与B的尺寸有关,宽度理论上为2*pi/B
%此处B取32
B = 32*32;
n0 = -N/2:N/2-1;
G = sinc(pi/B*n0).*gausswin(N)‘;%2*pi/B
%滤波
pn = pn.*G;
% figure()
% plot(abs(fft(G)));
%%*************Step3:FFT降采样**************
%降采样序列
yn = sum(reshape(pn,B,N/B),2);
figure()
plot(abs(fft(yn)));
%%*************Step4:频率估计**************
%根据Hash映射
[val,hk] = max(abs(fft(yn)));
k_est = round(hk*N/sigma/B);
% omega_k = sigma*k-hk*(N/B);
[~,k_real] = max(abs(fft(x)));
disp([k_real k_est])

原文地址:https://www.cnblogs.com/xingshansi/p/8214122.html

时间: 2024-07-31 19:07:55

稀疏傅里叶变换(sparse FFT)的相关文章

快速傅里叶变换(FFT)

快速傅里叶变换(FFT)算法[详解] 快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章中,以看似简单的计算技巧来讲解这个东西. 本文的目标是,深入Cooley-Tukey  FFT 算法,解释作为其根源的"对称性",并以一些直观的python代码将其理论转变为实际.我希望这次研究能对这个算法的背景原理有更全面的认识. FFT(快速傅里叶

第17章 内存映射文件(3)_稀疏文件(Sparse File)

17.8 稀疏调拨的内存映射文件 17.8.1 稀疏文件简介 (1)稀疏文件(Sparse File):指的是文件中出现大量的0数据,这些数据对我们用处不大,但是却一样的占用空间.NTFS文件系统对此进行了优化,那些无用的0字节被用一定的算法压缩起来.例如声明一个很大的稀疏文件(如100GB),这个文件实际上并不需要占用那么大的空,内部都是一些无用的0数据,那么NTFS就会利用算法释放这些无用的0字节空间,这是对磁盘占用空间的一种优化.但要注意FAT32并不支持稀疏文件的压缩. (2)与稀疏文件

【知识总结】快速傅里叶变换(FFT)

这可能是我第五次学FFT了--菜哭qwq 先给出一些个人认为非常优秀的参考资料: 一小时学会快速傅里叶变换(Fast Fourier Transform) - 知乎 小学生都能看懂的FFT!!! - 胡小兔 - 博客园 快速傅里叶变换(FFT)用于计算两个\(n\)次多项式相乘,能把复杂度从朴素的\(O(n^2)\)优化到\(O(nlog_2n)\).一个常见的应用是计算大整数相乘. 本文中所有多项式默认\(x\)为变量,其他字母均为常数.所有角均为弧度制. 一.多项式的两种表示方法 我们平时常

javascript中的稀疏数组(sparse array)和密集数组

学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度.加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1].即数组元素之间是紧密相连的,不存在空隙.如下的js代码创建的就是一个密集数组 var data = [

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

快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章中,以看似简单的计算技巧来讲解这个东西. 本文的目标是,深入Cooley-Tukey  FFT 算法,解释作为其根源的“对称性”,并以一些直观的python代码将其理论转变为实际.我希望这次研究能对这个算法的背景原理有更全面的认识. FFT(快速傅里叶变换)本身就是离散傅里叶变换(Discrete

稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853

稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计算机科学.机器学习科学等领域的砖家.学生都想搞明白人类大脑皮层是如何处理外界信号的,大脑对外界的“印象”到底是什么东东.围绕这个问题,哲学家在那想.神经科学家在那用设备观察.计算机和机器学习科学家则是从数据理论和实验仿真上推倒.仿真.在神经编码和神经计算领域,我所能查到最早关于稀疏编码的文献是199

傅里叶变换,fft,fft energy

傅里叶变换:将信号转化到频率空间,详解:http://blog.jobbole.com/70549/ 图像傅里叶变换:傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数, 空间三维,图像二维,因此空间中物体在另一个维度上的关系,就必须由梯度来表示,这样我们才能通过观察图像得知物体在三维空间中的对应关系. 图像傅里叶详解:http://www.cnblogs.com/EverYoung/archive/2012/05/29/2524058.html fft:快速傅里叶变换,nump

傅里叶变换(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为对应窗函数.长

快速傅里叶变换(FFT)求解多项式乘法

在我还会FFT的时候赶快写下一篇博客留着以后看...... FFT是用来求解多项式乘法,那么首先我们要知道多项式是啥. \[A(x) = a_0+a_1x^1+a_2x^2+···+a_{n-1}x^{n-1} \] 这是个n-1次多项式(最高项是\(x^{n-1}\)),\(a_0,a_1,···a_{n-1}\)是它各项的系数,该多项式可以写成: \[A(x) = \sum_{j=0}^{n-1}a_jx^j \] 一个多项式可以通过一组系数所确定,而这组系数所组成的向量也叫做系数向量(如\