「java频谱」java频谱图
今天给各位分享java频谱的知识,其中也会对java频谱图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
用JAVA实现频谱分析和包络谱分析,难吗?
不难,需要对JAVA 有足够的了解,只要算法能够写出来,其他都好做了
javafx音频频谱数据怎么绑定动画
javafx音频频谱数据绑定动画的方法:
添加import static java.lang.Math.random,到import语句列表中,就可以绑定动画了。
动画由时间轴驱动,因此此代码创建时间轴,然后使用for循环向30个圆中的每一个添加两个关键帧。0秒处的第一个关键帧使用属性translateXProperty并translateYProperty在窗口内设置圆圈的随机位置。40秒的第二个关键帧也是如此。
因此,当播放时间线时,它在40秒的时间段内将所有圆圈从一个随机位置动画到另一个随机位置。
注意javafx的动画需要设置路径和节点进行绑定,但如果路径的属性绑定在设置路径之前,就会使得该路径的属性被设置成绑定属性的初始值。
采用JavaFX组件完成的一款小巧、界面精美的本地音乐播放器,支持(拖动 or 文件选择器)添加本地音乐。
歌曲以及删除它们、具有歌词文件解析、三种播放模式选择、歌词滚动、歌单列表控制、频谱图展示、歌词海报显示、自定义背景、系统托盘控制、一些快捷键等。同时使用.ini文件记录应用设置信息,数据库用sqlite。
主要功能清单:
支持系统托盘控制和全屏控制。
界面简洁而精美且支持自定义背景。
支持播放的音乐格式:mp3 文件、wav 文件、aac 文件。
支持解析歌词并展示。
支持解析歌词文件(缩略图、专辑、时长等)。
支持频谱图动效。
支持拖动添加文件。
支持歌单列表控制。
图像傅里叶变换的步骤是什么? java
冈萨雷斯版图像处理里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当考虑光时,讨论它的光谱或频率谱。同样, 傅立叶变换能通过频率成分来分析一个函数。
Fourier theory讲的就是:任何信号(如图像信号)都可以表示成一系列正弦信号的叠加,在图像领域就是将图像brightness variation 作为正弦变量。比如下图的正弦模式可在单傅里叶中由三个分量编码:频率f、幅值A、相位γ 这三个value可以描述正弦图像中的所有信息。
1.frequency
frequency在空间域上可由亮度调节,例如左图的frequency比右图的frequency低……
2.幅值magnitude(amplitude)
sin函数的幅值用于描述对比度,或者说是图像中最明和最暗的峰值之间的差。(一个负幅值表示一个对比逆转,即明暗交换。)
3.相位表示相对于原始波形,这个波形的偏移量(左or右)。
=================================================================
一个傅里叶变换编码是一系列正弦曲线的编码,他们的频率从0开始(即没有调整,相位为0,平均亮度处),到尼奎斯特频率(即数字图像中可被编码的最高频率,它和像素大小、resolution有关)。傅里叶变换同时将图像中所有频率进行编码:一个只包含一个频率f1的信号在频谱上横坐标f为f1的点处绘制一个单峰值,峰值高度等于对应的振幅amplitude,或者正弦曲线信号的高度。如下图所示。
DC term直流信号对应于频率为0的点,表示整幅图像的平均亮度,如果直流信号DC=0就表示整幅图像平均亮度的像素点个数=0,可推出灰度图中,正弦曲线在正负值之间交替变化,但是由于灰度图中没有负值,所以所有的真实图像都有一个正的DC term,如上图所示。
出于某些数学分析原因,经常把傅里叶变换用mirror-image表示,在原点的的两端,frequency都是增加的方向,具有相同的幅值。
上面讲的都是一维信号,一个二维傅里叶变换是一维傅里叶变换在每一个行扫描线和列扫描线上的傅里叶变换的叠加。
傅里叶谱图上的每一个像素点都代表一个频率值,幅值由像素点亮度变码而得。最中心的亮点是指直流分量,傅里叶谱图中越亮的点,对应于灰度图中对比越强烈(对比度越大)的点。
由于每一列扫描线上没有变化,所以相应的fourier spectrum上行向量为0, 每一行扫描线上有contrast,所以有频率幅值。
这里频率比上面的小,相应的亮点比上副图也集中。
图像傅立叶变换的物理意义
傅里叶提出任何周期函数都可以表示为不同频率的正弦和/或余弦和的形式,每个正弦和/或余弦乘以不同的系数(傅里叶级数)。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.在噪声点和图像边缘处的频率为高频。
傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数.
傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰.
图像是两个参数的函数,通过一组正交函数的线性组合可以将其分解,而傅里叶就是通过谐波函数来分解的。而对于离散傅里叶变换,傅里叶变换的条件是存在的。
傅里叶变换进行图像处理有几个特点
1. 直流成分F(0,0)等于图像的平均值;
2. 能量频谱|F(u,v)|^2完全对称于原点;其中F=PfQ, f表示原图,P和Q都是对称的实正交矩阵,这个公式表示傅里叶变换就是个正交矩阵的正交变换
3.图像f平移(a,b)后,F只有exp[-2pij(au/M+bv/M)]的相位变化,能量频谱不发生变化。
4. 图像f自乘平均等于能量频谱的总和,f的分散等于能量频谱中除直流成分后的总和。
5.图像f(x,y)和g(x,y)的卷积h(x,y)=f(x,y)*g(x,y)的傅里叶变换H(u,v)等于f(x,y)和g(x,y)各自的傅里叶变换的乘积。
图像中的每个点通过傅里叶变换都成了谐波函数的组合,也就有了频率,这个频率则是在这一点上所有产生这个灰度的频率之和,也就是说傅里叶变换可以将这些频率分开来。当想除去图像背景时,只要去掉背景的频率就可以了。
在进行傅里叶变换时,实际上在某一特定的频率下,计算每个图像位置上的乘积。就是f(x,y)exp[-j2pi(ux+vy)],然后计算下一个频率。这样就得到了频率函数。
也就是说,看到傅里叶变换的每一项(对每对频率u,v,F(u,v)的值)是由f(x)函数所有值的和组成。f(x)的值与各种频率的正弦值和余弦值相乘。因此,频率u, v决定了变换的频率成分(x, y也作用于频率,但是它们相加,对频率有相同的贡献)。
通常在进行傅里叶变换之前用(-1)^(x+y)乘以输入的图像函数,这样就可以将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。
每个F(u,v)项包含了被指数修正的f(x,y)的所有值,因而一般不可能建立图像特定分量和其变换之间的联系。然而,一般文献通常会有关于傅里叶变换的频率分量和图像空间特征之间联系的阐述。变换最慢的频率成分(u=v=0)对应一幅图像的平均灰度级。当从变换的原点移开时,低频对应着图像的慢变换分量,较高的频率开始对应图像中变化越来越快的灰度级。这些事物体的边缘和由灰度级的突发改变(如噪声)标志的图像成分。
在频率域中的滤波基础
1. (-1)^(x+y)乘以输入图像来进行中心变换
2. 由(1)计算图像的DFT, 即F(u,v)
3. 用滤波器函数H(u,v)乘以F(u,v)
4. 计算(3)中的结果的反DFT
5. 得到(4)中的结果的实部
6. 用(-1)^(x+y)乘以(5)中的结果
另外说明以下几点:
1、图像经过二维傅立叶变换后,其变换系数矩阵表明:
若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一幅图像能量集中低频区域。
2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)
音频算法入门-傅里叶变换
上一篇文章中讲了一个时域处理的算法wsola,接下来会学习频域处理算法,在这之前必须得对频域有所了解,这就不得不提傅里叶变换了,本文的目的是让大家学会用傅里叶变换公式和傅里叶逆变换公式进行计算。数学公式是人们对世界中的现象的描述,我们学习数学公式也不该只停留在使用公式来解决问题的层次,得明白公式到底在描述什么现象,从这些天才数学家的角度来看世界。懂的地方可跳过。项目地址在文章末尾给出。
我直接说结论,傅里叶级数公式包含了傅里叶变换和傅里叶逆变换(不严谨的说就是这么回事)。
先简单说下具体关系,法国数学家傅里叶发现,任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示,这种表示方式就是傅里叶级数。假如有个波形比较复杂的周期函数,那么找出能用来构成这个周期函数的正弦函数和余弦函数的频率的方法就叫做傅里叶变换,用这些频率的正弦函数和余弦函数叠加起来表示这个周期函数的方法就叫做傅里叶逆变换。
再从公式中看下他们的关系,首先介绍傅里叶级数到底是什么,首先级数是指将数列的项依次用加号连接起来的函数。这么说可能大家还不理解,举个例子:e^x=1+x/1!+x^2/2!+...x^n/n!....,等号左边是指数函数,等号右边就是级数。傅里叶级数公式如下:
我们主要看这个指数形式的傅里叶级数公式,把求和符号去掉,展开一下就是f(t)=Fa*e^jaω0t+Fb*e^jbω0t+Fc*e^jcω0t+Fd*e^jdω0.....。现在看下面的周期函数叠加效果图,图中显示的是3个周期函数分别在坐标轴(横轴时间,纵轴幅度)的图像,写成傅里叶级数形式就是f(t)=fa(t)+fb(t)+0+0....,这就是傅里叶级数公式要描述的现象。其中Fa*e^jaω0t=fa(t),Fb*e^jbω0t=fb(t),Fc*e^jcω0t=0....。
看下图的傅里叶变换和逆变换公式,你会发现傅里叶逆变换公式和傅里叶级数公式极其相似,而傅里叶级数系数公式Fn又和傅里叶变换公式极其相似。所以对一个周期函数进行傅里叶级数展开的过程可以认为是先做傅里叶变换再做傅里叶逆变换的过程。
上图就是傅里叶变换公式也叫连续傅里叶变换公式,有个很重要的事情,就是傅里叶变换公式和逆变换公式一定要一起给出,不然就会让人误解,你们在网上会看到各种各样的写法,但这些写法都是对的,常见的如下图所示。
为了方便后面的讲解我把角频率ω换成2πf,如上图所示,ω是希腊字母读作Omega,大写是Ω,小写是ω,以后这两个字母会经常看到,都是等于2πf。不要和电学中的电阻单位搞混了,要明白字母只不过是一个符号而已,在不同学科领域都是混着用的,只要不和自己公式中其他字母冲突就行,例如上图傅里叶变换公式中的j其实就是虚数单位i,一般时候我们会把虚数单位写成i,但因为傅立叶变换经常用于电学解决一些问题,为了不和电流符号i混淆,所以公式就把i写成j 。
要想了解傅里叶变换公式,首先要了解欧拉公式e^ix=cosx+isinx在图像中的含义。以实部的值cosx作为横坐标值,虚部sinx的值作为纵坐标值,x的取值从负无穷到正无穷,画出所有的e^ix点后,你会发现这些点会形成一个周期为2π的圆。如下图1所示(如果不理解,建议看3Blue1Brown的视频,视频连接:)
所以欧拉公式e^ix其实就是随着x的增大而在坐标系上逆时针画圆的过程,那么e^-ix就表示顺时针画圆,e^-i2πx就表示画圆的速度提高2π倍,也就是说x从0到1的过程就是顺时针画出一个完整圆的过程(当然x从1到2或者2到3等等,都能画出一个完整的圆),把x换成t后,e^-i2πt表示每秒都会顺时针画出一个圆。e^-i2πft表示每秒都会顺时针画出f个圆。f(t)表示t时刻的振幅,f(t)函数画出来就是时域波形图。f(t)*e^-i2πft表示每经过1秒会顺时针画出f个圆,并在画圆的同时,t时刻的圆半径要乘上t时刻的振幅,其实就是以每秒的音频振幅数据绕f圈的速度进行旋转缠绕(为了方便理解,没有用复杂的音频数据,用的是一个频率为3的正弦波音频做的实验,请看下图2,图的上半部分是时域波形图,图的左下角是f等于0.4的时候,用公式f(t)*e^-i2πft在实部和虚部构成的坐标系画的图,图的右下角是频谱图,频谱图的横坐标是频率,纵坐标是振幅,振幅的值就是左下角图中数据形成的图案的质心(图中的红点)到坐标系原点的距离的2倍)。当改变f的值,你会发现数据大多数时候是和我们想的一样,以坐标系原点为圆心环绕着,也就是振幅一直都是0,但是当f的值,也就每秒的圈数等于该音频数据的频率时,你会发现一个神奇的现象,那就是所有的数据会在实部或虚部坐标轴的一侧形成一个圆(如下图3所示,如此一来就知道这段音频数据包含了一个频率为3振幅为0.5的正弦波)。所以将多个正弦波叠加的音频数据用傅里叶公式,f从负无穷到正无穷遍历一遍,就可以把这个音频数据里包含的正弦波都一一找出来。(如果不理解,建议看3Blue1Brown的视频,视频连接:)
平时我们说的对音频进行傅里叶变换处理,其实说的是短时离散傅里叶变换。短时离散傅里叶变换的公式(也可以直接叫做离散傅里叶变换公式)如下。
下面将教大家如何理解这个公式。上面说的连续傅里叶变换公式中有两个原因导致我们无法使用,第一点要求是音频数据的时间从负无穷到正无穷,第二点要求是任意时间t都要有幅度值x(t)才能代入公式进行计算。所以为了解决这两个问题,把公式变为短时且离散的傅里叶变换公式,这个公式可以把一段时间(时间假设为Ts秒)的离散音频数据(有N个采样数据)进行傅里叶变换。你可以把离散傅里叶变换公式理解成连续傅里叶变换的变形,最重要的一点是连续傅里叶变换公式的f和离散傅里叶变换公式的k不是一个意思,他们的关系是k=f*Ts。所以离散傅里叶变换公式也可以写成F(f)=1/n*∑f(t)*e^-j2πf*Ts*n/N,其中的Ts*n/N对应的就是连续傅里叶变换公式的t,只不过这个t没办法取任意时间了,t的取值也就随着n的取值成为了离散的时间点,所以前面的系数由1/2π变为1/N。这样这两个公式就对应起来了。下面将进一步详细介绍这个公式。
上一段说了k=f*Ts,这段我来解释下为什么,其实离散傅里叶变换公式中k表示的是这段Ts秒的音频数据环绕坐标系原点的圈数,所以k并不是连续傅里叶变换公式里的频率f,而频率f指的是1秒钟震荡的次数,在这个公式中频率f也对应着1秒的音频数据环绕的圈数,所以真正的频率f=k/Ts。
有人可能会好奇,那为什么不把离散傅里叶变换公式的自变量k换成f呢,这样不是更好理解吗?是会更好理解,但是没有必要,用f的话还要做一次无用的换算。因为采样点只有N个的原因,k的取值范围就被限制住了,k的取值范围只能是0~N-1的整数,这也是为什么用k来做自变量而不是用f的原因。
还有人可能会好奇,傅里叶逆变换到底是怎么把频域的信息还原回时域的,其实公式计算出来的F(k)是一个复数,这个复数包含了这个频率的周期函数的振幅和相位的信息,假设F(k)=a+ib,,F(k)的模|F(k)|=(a^2+b^2)^1/2,频率f=k/Ts时的振幅为|F(k)|*2(因为求出来的值相当于圆心,但实际上振幅是圆离圆心最远点到坐标原点的距离,所以要乘2),频率f=k/Ts时的相位为arctan(b/a)。所以如果你知道一个周期函数包含了哪些频率的周期函数,并且你这到这些周期函数的振幅和相位,你就可以像下图一样把fa(t)和fb(t)叠加在一起还原回f(t)。傅里叶逆变换的做法略有不同,但意思就是这么个意思,理解了离散傅里叶变换公式的计算,逆变换其实也是差不多代入数值计算就是了。(如果不理解怎么用离散傅里叶变换公式计算,建议看视频,视频里有离散傅里叶变换完整的计算过程,视频连接:)
快速傅里叶变换推荐看下面两个视频
下面是我用java实现的离散傅里叶变换及逆变换和快速傅里叶变换及逆变换,从他们的运行时间就可以看出来快速傅里叶变换快得多。(学完快速傅里叶变换再想想频谱为何Y轴对称?为何N/2对称?)
java频谱的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java频谱图、java频谱的信息别忘了在本站进行查找喔。