包含时频分析函数python的词条
利用Rényi entropy度量时频分析中的时频能量聚集度
时频分析(TFA, time frequency analysis)的发展目标之一,就是努力提高时频分辨率(另一个目标是信号能够被完美重构。做到完美重构的话,可以使得该TFA技术用于信号去噪,模态分解等方面。)。时频谱具有高时频分辨率,直观地可以理解为时频平面上的高能量聚集性,所以一定程度上,高能量聚集性可以表征高时频分辨率(高能量聚集性不绝对表示高时频分辨率,二者没有绝对联系)。在时频分析中, Rényi entropy 可用于度量时频能量聚集度。
为固镇等地区用户提供了全套网页设计制作服务,及固镇网站建设行业解决方案。主营业务为网站制作、做网站、固镇网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Rényi entropy 由Alfred Renyi在其1961年的论文中提出,作为香农熵的一种推广,其离散形式如下
记时频能量密度为 ,时频能量聚集度定义为
Rényi entropy 非线性单调递减,因此 越小,表示时频能量聚集度越高。
关于上式的讨论,即 Rényi entropy 在时频分析中的应用,见文献[3].
参考文献:
[1] Renyi Entropy Renyi Divergence - 知乎 (zhihu.com)
[2] WANG S, CHEN X, CAI G, 等. Matching Demodulation Transform and SynchroSqueezing in Time-Frequency Analysis[J/OL]. IEEE Transactions on Signal Processing, 2014, 62(1): 69-84. .
[3] BARANIUK R G, FLANDRIN P, JANSSEN A J E M, 等. Measuring time-frequency information content using the Renyi entropies[J/OL]. IEEE Transactions on Information Theory, 2001, 47(4): 1391-1409. .
知识补充
(1) 傅立叶级数:法国数学家 傅里叶 发现,任何周期函数都可以用 正弦函数 和 余弦函数 构成的无穷级数来表示(选择正弦函数与余弦函数作为基函数是因为它们是正交的),后世称傅里叶级数为一种特殊的三角级数,根据 欧拉公式 ,三角函数又能化成指数形式,也称傅立叶级数为一种指数级数。傅里叶级数,在时域是一个周期且连续的函数,而在频域是一个非周期离散的函数。
(2) 傅立叶变换:将一个时域非周期的连续信号,转换为一个在频域非周期的连续信号。
(3) 频域,时域与相位之间的关系:
(4) 欧拉公式:
(1) 傅里叶变换的 不足
即我们知道傅里叶变化可以分析信号的频谱,那么为什么还要提出小波变换?答案就是 方沁园 所说的,“对 非平稳 过程,傅里叶变换有局限性”。
如下图:
做完FFT(快速傅里叶变换)后,可以在频谱上看到清晰的四条线,信号包含四个频率成分。
一切没有问题。但是,如果是 频率随着时间变化的非平稳信号 呢?
如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。
做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。
可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取 一段信号总体上包含哪些频率的成分 ,但是 对各成分出现的时刻并无所知 。因此时域相差很大的两个信号,可能频谱图一样。
然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。
(2) 短时傅里叶变换(Short-time Fourier Transform, STFT)
一个简单可行的方法就是—— 加窗 。我又要套用 方沁园 同学的描述了,“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。
时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗!
用这样的方法,可以得到一个信号的时频图了:
图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,所以大家只用看一排就行了。
是不是棒棒的?时频分析结果到手。但是STFT依然有缺陷。
使用STFT存在一个问题,我们应该用多宽的窗函数?
窗太宽太窄都有问题:
窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。
(这里插一句,这个道理可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置,我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在,我们知道的只能是在一个时间段内某个频带的分量存在。 所以绝对意义的瞬时频率是不存在的。)
所以 窄窗口时间分辨率高、频率分辨率低 , 宽窗口时间分辨率低、频率分辨率高 。对于时变的非稳态信号, 高频适合小窗口,低频适合大窗口 。然而 STFT的窗口是固定的 ,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。
(3) 小波变换
那么你可能会想到,让窗口大小变起来,多做几次STFT不就可以了吗?!没错,小波变换就有着这样的思路。
但事实上小波并不是这么做的(关于这一点, 方沁园 同学的表述“小波变换就是根据算法,加不等长的窗,对每一小部分进行傅里叶变换”就不准确了。小波变换并没有采用窗的思想,更没有做傅里叶变换。)
至于为什么不采用可变窗的STFT呢,我认为是因为这样做冗余会太严重, STFT做不到正交化 ,这也是它的一大缺陷。
于是小波变换的出发点和STFT还是不同的。 STFT是给信号加窗,分段做FFT ;而小波直接把傅里叶变换的基给换了——将 无限长的三角函数基 换成了 有限长的会衰减的小波基 。这样 不仅能够获取频率 ,还可以 定位到时间 了~
这就是为什么它叫“小波”,因为是很小的一个波嘛~
从公式可以看出,不同于傅里叶变换,变量只有频率ω,小波变换有两个变量:尺度a(scale)和平移量 τ(translation)。 尺度 a控制小波函数的 伸缩 , 平移量 τ控制小波函数的 平移 。 尺度 就对应于 频率 (反比), 平移量 τ就对应于 时间 。
当伸缩、平移到这么一种重合情况时,也会相乘得到一个大的值。这时候和傅里叶变换不同的是,这 不仅可以知道信号有这样频率的成分,而且知道它在时域上存在的具体位置。
而当我们在每个尺度下都平移着和信号乘过一遍后,我们就知道信号 在每个位置都包含哪些频率成分 。
看到了吗?有了小波,我们从此再也不害怕非稳定信号啦!从此可以做时频分析啦!
做傅里叶变换只能得到一个 频谱 ,做小波变换却可以得到一个 时频谱 !
小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在 吉布斯效应 ,我们用无限长的三角函数怎么也拟合不好突变信号。
链接:
(1) PSNR(峰值信噪比)
PSNR: Peak Signal to Noise Ratio,一种全参考的图像质量评价指标。
其中,MSE表示当前图像X和参考图像Y的均方误差(Mean Square Error),H、W分别为图像的高度和宽度;n为每像素的比特数,一般取8,即像素灰阶数为256. PSNR的单位是dB,数值越大表示失真越小。
PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即基于误差敏感的图像质量评价。由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响等),因而经常出现评价结果与人的主观感觉不一致的情况。
(2) SSIM(结构相似性)
SSIM: structural similarity index, 是一种衡量两幅图像相似度的指标。它分别从亮度、对比度、结构三方面度量图像相似性。
结构相似性的范围为-1到1。当两张图像一模一样时,SSIM的值等于1。
其他指标:
怎样用python画wav文件的时频分析图
这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数。和matlab里的那个差不多。使用超级方便,自动就做好了短时傅立叶变换(short
time fourier
transform)~函数用法具体可参照
关于短时傅立叶变换的具体内容可google之~下面介绍程序。
#首先import各种library。wave和struct都是安装python2.6自带的。scipy可以在
#下载。pylab可在下载。都是非常#强大的包包啊~~
import wave
import struct
from scipy import *
from pylab import *
#读取wav文件,我这儿读了个自己用python写的音阶的wav
filename = '/Users/rongjin/Desktop/scale.wav'
wavefile = wave.open(filename, 'r') # open for writing
#读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames,在后面要用到滴。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
#建一个y的数列,用来保存后面读的每个frame的amplitude。
y = zeros(numframes)
#for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。
#unpack是struct里的一个函数,用法详见。简单说来
就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个
#tuple,所以我们取它的第零位。
for i in range(numframes):
val =
wavefile.readframes(1)
left =
val[0:2]
#right = val[2:4]
v =
struct.unpack('h', left )[0]
y[i] =
v
#framerate就是44100,文件初读取的值。然后本程序最关键的一步!specgram!实在太简单了。。。
Fs = framerate
specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
show()
时频分析的主要方法
时频分析
时频分析(jtfa)即时频联合域分析(joint
time-frequency
analysis)的简称,作为分析时变非平稳信号的有力工具,
成为现代信号处理研究的一个热点,它作为一种新兴的信号处理方法,近年来受到越来越多的重视。时频分析方法提供了时间域与
频率域的联合分布信息,清楚地描述了信号频率随时间变化的关系。
时频分析的基本思想是:设计时间和频率的联合函数,用它
同时描述信号在不同时间和频率的能量密度或强度。时间和频率的这种联合函数简称为时频分布。利用时频分布来分析信号,能在
每一时间指示出信号在瞬时频率串附近的能量聚集情况,并且能够进行时频滤波和时变信号综合。
信号时频分析的重要性
(1)时间和频率是描述信号的两个最重要的物理量。
(2)信号的时域和频域之间具有紧密的联系。
时频分析的主要方法
(1)窗口傅立叶变换(gabor变换);
(2)连续小波变换;
文章题目:包含时频分析函数python的词条
分享地址:http://pwwzsj.com/article/dociggd.html