AnyMath 文档

频谱图

使用加窗傅立叶变换的频谱图。

库::`工程师`

语法

函数调用

* [参数:s],[参数:f],[参数:时间],[参数:p]=频谱图(<参数:x>>) — 返回输入信号的窗口傅立叶变换(OPF) [参数:x]. 每列 [参数:s] 包含短期、时间本地化频率内容的估计值 [参数:x]. 价值 [参数:s]2 是时频表示频谱图。 [参数:x] [book_1,[1]]

* [参数:s],[参数:f],[参数:时间],[参数:p]=频谱图([参数:x],[参数:窗口]) — 另外使用参数 [参数:窗口] 以将信号分成段并执行窗口处理。

* [参数:s],<参数:f>>,<参数:时间>>,<参数:p>>=频谱图(<参数:x>>,<参数:窗口>>,<参数:noverlap>>) — 另外使用参数 [参数:noverlap] 以重叠相邻段。

* [参数:s],[参数:f],[参数:时间],[参数:p]=频谱图(<参数:x>>,[参数:窗口],[参数:nfft]) — 另外使用参数 [参数:nfft] 来设定离散傅立叶变换中的点的数目。

* [参数:s],<参数:f>>,<参数:时间>>,<参数:p>>=频谱图(<参数:x>>,<参数:窗口>>,<参数:noverlap>>,<参数:freq>>) — 另外使用参数 [参数:freq] 来设置归一化或循环频率。

* [参数:s],[参数:f],[参数:时间],[参数:p]=频谱图(_,Name=值) -使用参数 名称=值 除了前面语法中提供的任何输入参数。

争论

输入参数

# *x* — 输入信号

+ 向量资料

Details

输入信号被设置为行向量或列向量。

数据类型

漂浮物32, 漂浮64</无翻译> 支持复数::是

# *窗口* — 窗户

+ 一个正整数 | 向量资料

Details

指定为正整数、行向量或列向量的窗口值。 使用方法 窗户 将信号分成若干段:

*如果 窗户 -一个整数,然后 *频谱图* 分歧;分歧 [参数:x] 成段长度 窗户 并对每个段使用相同长度的汉明窗口。

*如果 窗户 -矢量,然后 *频谱图* 分歧;分歧 [参数:x] 成与向量长度相同的段,并对每个段使用一个窗口。 窗户.

如果长度为 [参数:x] 如果不能精确地分割成整数个没有重叠样本的段,则 [参数:x] 相应地被截断。

如果不指定 窗户 然后 *频谱图* 使用汉明窗的方式是 [参数:x] 它被分成八个段,没有重叠计数。

# *诺弗拉普* — 相交点的数目

+ 一个非负整数

Details

相交信号点的个数,设为非负整数。

*如果参数 [参数:窗口] -标量,参数的值 诺弗拉普 必须小于参数的值 [参数:窗口].

*如果参数 [参数:窗口] -向量,参数的值 诺弗拉普 必须小于参数长度的值。 [参数:窗口].

如果不指定参数的值 诺弗拉普,频谱图使用一个数字,给出 50% 段之间重叠。 如果未指定段长度,则函数设置值 诺弗拉普 平等的 ,在哪里 -输入信号的长度和符号 表示向下舍入。

# *nfft*是 离散傅立叶中的点的数量 变换+ 一个正整数

Details

离散傅立叶变换中的点的数目,作为正整数标量给出。

如果您没有为 nfft,然后频谱图将使用该值 ,在哪里 ,符号 表示四舍五入,而:

* [参数:窗口] 如果论点是 [参数:窗口] -标量; * 长度(<参数:窗口>>) 如果论点是 [参数:窗口] -矢量。

# *freq* — 归一化/循环频率

+ 真实向量

Details

指定为实向量的频率值。 设置频率的类型取决于参数的值 [参数:fs]:

*如果输入参数的值为 [参数:fs] 如果未指定,默认频率将被视为标准化。;

*如果输入参数的值为 [参数:fs] 如果指示,频率被认为是循环的。

你可以设置 弗雷克 作为向量,或者 [参数:nfft] 作为正整数。 在同一时间使用这些参数会给出错误。

名称-值输入参数

指定格式中的可选参数对 名称=值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 类型参数 名称=值 它们应该放在其他参数之后,但对的顺序无关紧要。

# *财政司司长* — 抽样调查 费率+ 1赫兹 (默认情况下)| 正实数

Details

的采样率,设置为正标量。 采样率是单位时间内的样本数。 如果时间单位是秒,那么采样频率以Hz表示。

# *freqrange* — 能谱密度估计的频率范围

+ "onesided" | "twosided"

Details

用于估计能谱密度(PSD)的频率范围,给定为 "onesided""twosided".

对于具有实数值的信号,默认值为 "onesided". 对于复杂信号,默认值为 "twosided",并指定值 "onesided" 导致错误。

*价值 "onesided" -返回真实输入信号的单向频谱图。 **如果参数的值为 [参数:nfft] 甚至,那么争论 [参数:p][参数:nfft]/2+1 行,并在间隔上计算 [0, π] 弧度数。 **如果参数的值为 [参数:nfft] 如果是奇数,那么 [参数:p](<参数:nfft>>+1)/2 线条和间距 [0, π) 弧度数。 如果指定 [参数:fs],那么间隔将分别 [0,[参数:fs]/2] 每单位时间的周期和 [0,[参数:fs]/2) 每单位时间的周期。

*价值 "twosided" -返回真实或复杂信号的双向频谱图。 论点 [参数:p][参数:nfft] 行,并在间隔上计算 [0, 2π) 弧度数。 如果指定参数 [参数:fs],那么间隔将有 [0,[参数:fs]) 每单位时间的周期。

# *居中* — 频率范围是否居中

+ 错误 (默认情况下)| 真的

Details

启用频率范围的定心,设置为 错误真的.

# *光谱类型* — 缩放能谱密度

+ "psd" (默认情况下)| "权力"

Details

能谱密度(PSD)的缩放,定义为 "psd""权力".

如果未指定频谱类型或指定了值 "psd",则函数返回谱功率密度。

意义 "权力" 将能谱密度的每个估计按等效窗噪声带缩放。 结果是对每个频率处的功率的估计。

# *freqloc* — 频率显示轴

+ "xaxis" (默认)| "雅西斯"

Details

频率显示轴,设置为 "xaxis""雅西斯".

*价值 "xaxis" -沿轴的频率显示 和轴上的时间 . *价值 "雅西斯" -沿轴的频率显示 和轴上的时间 .

# *MinThreshold* — 最小值的阈值

+ -Inf (默认)| 真正的标量

Details

以dB为单位设置为真实标量的阈值。 频谱图将这些元素归零 [参数:s],为其 10log10([参数:s])≤MinThreshold.

# *输出时间* — 时间方向

+ "acrosscolumns" (默认情况下)| "downrows"

Details

输出数据的时间方向,设为 "acrosscolumns""downrows". 将此参数设置为 "downrows" 如果您希望输出参数的时间方向以行显示,频率方向以列显示。 设置值 "acrosscolumns" 如果您希望输出参数的时间方向以列显示,频率方向以行显示。

# *出* — 输出数据的类型

+ :剧情 (默认情况下)| :数据

Details

输出数据的类型:

* :数据 -函数返回数据 [参数:s], [参数:f], [参数:时间][参数:p];

* :剧情 -功能建立一个频谱图。

如果 out=:剧情,那么你可以另外传递参数来显示总 热图(). 例如,如果您调用 频谱图(x,c=cgrad([:黑色,:白色], [0.1, 0.3, 0.8])),然后频谱图将具有灰色而不是标准颜色。

输出参数

# *s*是 离散傅里叶 变换+ 矩阵

Details

作为矩阵返回的离散傅立叶变换。 时间在矩阵的各列中增加 s,并且频率逐行增加,从零开始。

*如果 [参数:x] -信号长度 ,则矩阵 s 列在哪里

** [参数:noverlap] 长度(<参数:窗口>>) [参数:noverlap] 如果 [参数:窗口] -矢量。

*如果 [参数:x] -材料,嗯 [参数:nfft] -甚至,然后矩阵 s(<参数:nfft>>/2+1) 线条。

*如果 [参数:x] -材料,嗯 [参数:nfft] -奇,则矩阵 s(<参数:nfft>>+1)/2 线条。

*如果 [参数:x] -复杂,然后矩阵 s[参数:nfft] 线条。

如果参数 [参数:freqrange] 这很重要 "onesided",然后频谱图输出值 s 在正奈奎斯特范围内并且不保留全功率。

# *f* — 循环频率

+ 向量资料

Details

作为向量返回的循环频率。 矢量长度 f 等于矩阵的行数 [参数:s].

# *时间* — 时间点

+ 向量资料

Details

返回的时间点作为向量。 时间值在 t 它们对应于每个段的中间。

# *p* 是能谱密度

+ 矩阵

Details

能谱密度(PSD)或作为矩阵返回的功率谱。

*如果 [参数:x] -一个实数,和 [参数:freqrange] 省略或设置为value "onesided" 然后 p 它包含一个单侧修改的PSD周期图或每个段的功率谱。 该函数将功率乘以 2 在除 0 和奈奎斯特频率来保持整体功率。

*如果 [参数:x] 是复数或者如果 [参数:freqrange] 设置为值 "twosided""居中" 然后 p 它包含一个双面修改的PSD周期图或每个段的功率谱。

*如果在以下位置指定归一化或循环频率的向量 [参数:freq] 然后 p 它将包含一个修改的PSD周期图或每个段的功率谱计算在输入频率。

例子:

频谱图的默认值

Details

生成 表示正弦的总和的信号的样本。 正弦曲线的归一化频率为 rad/倒计时和 rad/倒计时。 具有较高频率的正弦曲线具有 倍的另一正弦波的振幅。

import EngeeDSP.Functions: spectrogram
N = 1024
n = 0:N-1
w0 = 2pi / 5
x = sin.(w0 &ast; n) .+ 10 &ast; sin.(2 &ast; w0 &ast; n)

让我们使用默认函数参数计算窗口化傅立叶变换。 让我们建立一个频谱图。

spectrogram(x,freqloc="yaxis")

spectrogram 1

复杂信号频谱图

Details

生成 512 具有正弦变化频率组成的频率调制样本。 让我们计算频率调制的中心双向窗口傅立叶变换。 让我们把信号分成几段 32 在重叠的参考点 16 数数。 指定 64 离散傅立叶变换点。 让我们建立一个频谱图。

import EngeeDSP.Functions: spectrogram
N = 512
n = collect(0:N-1)

x = @. exp(im&ast;pi&ast;sin(8&ast;n/N)&ast;32)
spectrogram(x, 32, 16, 64, centered = true, freqloc="yaxis")

spectrogram 2

让我们将结果显示为数据。

spectrogram(x, 32, 16, 64, centered = true, freqloc="yaxis", out=:data)
(ComplexF64[-0.004799003568266007 - 0.0505661817205643im 0.04928181142575791 - 0.08168061694423136im … 0.06661413792128079 + 0.005582741943515573im 0.06563897996263357 - 0.03809302080510557im; 0.08251130568172917 - 0.009465091175966937im 0.01113491156754788 + 0.0019301579098507408im … -0.0033130937073331257 + 0.04853476281962177im 0.013263617768417113 + 0.025903864451430003im; … ; -0.009649405525420679 - 0.05239849276178002im 0.04401940995315085 - 0.0914065432314291im … 0.06820937107281076 - 6.325260894440854e-5im 0.06223032913485138 - 0.04414639111404428im; 0.08717673328273712 - 0.01888297777102288im 0.0132333274580263 + 0.0005901735083794213im … 0.002529248964486752 + 0.05007735729089752im 0.017119544189724056 + 0.024263377986849743im], [-3.043417883165112, -2.945243112740431, -2.84706834231575, -2.748893571891069, -2.650718801466388, -2.5525440310417067, -2.4543692606170255, -2.356194490192345, -2.2580197197676637, -2.1598449493429825  …  2.2580197197676637, 2.3561944901923453, 2.454369260617026, 2.5525440310417067, 2.6507188014663883, 2.748893571891069, 2.8470683423157497, 2.9452431127404313, 3.043417883165112, 3.1415926535897936], [2.5464790894703255 5.092958178940651 … 76.39437268410977 78.94085177358009], [3.3313443855835635e-5 0.00011750773553006685 … 5.770022477295285e-5 7.436932913915006e-5; 8.906550573571001e-5 1.6490579693362508e-6 … 3.0558345518866313e-5 1.0935898096347522e-5; … ; 3.665443356386854e-5 0.00013290498623780864 … 6.0074958410346855e-5 7.516942675213517e-5; 0.00010273510683279117 2.2657190730313684e-6 … 3.246341980220297e-5 1.1385977847041683e-5])

此外

窗口傅立叶变换(OPF)

Details

窗口化傅立叶变换(OPF)用于分析非稳态信号的频率内容随时间的变化。 OPF的平方的值被称为信号的时频表示的频谱图。

通过滑动分析窗口计算信号的OPF 长度 基于所述信号和所述离散傅立叶变换(dft)的窗口数据的每个段的计算。 窗口在原始信号上滑动,间隔为 计数,这相当于 相邻段之间的重叠计数。 大多数窗口函数在边缘逐渐变细,以避免频谱振铃。 具有窗口的每个段的DFT被添加到包含每个时间点和频率的量值和相位的复数矩阵中。 OPF矩阵具有 列在哪里 -信号长度 ,以及符号 表示向下舍入函数。 矩阵中的行数为 ,DFT点的数量,用于居中和双面变换,以及接近奇数 ,用于实信号的单向变换。

-OPF矩阵的第列 包含以时间为中心的窗口数据DFT :


spectrogram 1 cn

如果窗口化傅立叶变换中有零,则其转换为分贝导致无法绘制的负无穷大值。 为了避免这种潜在的困难,功能 *频谱图* 增加 每股收益 到窗口傅立叶变换,当你调用它没有输出参数。

文学作品

  1. Boashash,Boualem,ed。 "时频信号分析处理:综合参考。"第二版。 EURASIP和学术出版社系列的信号和图像处理. 阿姆斯特丹和波士顿:学术出版社,2016。

  2. Chassande-Motin,Éric,François Auger和Patrick Flandrin。 "Reassignment。"在时频分析:概念和方法。 由Franz Hlawatsch和François Auger编辑。 伦敦:ISTE/John Wiley and Sons,2008。

  3. Fulop,Sean A.和Kelly Fitz。 "Algorithms用于计算时间校正的瞬时频率(重新分配)频谱图,具有应用程序。"美国声学学会杂志。 卷。 119,2006年1月,第360-371页。

  4. Oppenheim,Alan V.和Ronald W.Schafer,与John R.Buck。 "Discrete-时间信号处理。"第二版。 Upper Saddle River,NJ:Prentice Hall,1999。

  5. Rabiner,Lawrence R.和Ronald W.Schafer。 "语音信号的数字处理。"Englewood Cliffs,NJ:Prentice-Hall,1978。