SeeSharpExamples-Spectrum相关范例说明
来源: | 作者:JYTEK | 发布时间: 2024-10-25 | 383 次浏览 | 分享到:

关键词:SeeSharpExamples,Spectrum


1. Spetrum AveragingSpectrum

      背景知识

FFT平均是一种通过对信号的多次FFT结果进行平均,减弱频谱中噪声的波动,突出信号中的周期性成分。

基本原理:先对信号进行FFT变换。对每次采集后的频谱进行平均,这可以通过线性平均、指数平均或峰值保持完成。最终结果是一个平均后的频谱,它表示了信号的真实成分。

本范例可以仿真生成不同类型的波形,包括正弦波、方波、锯齿波和方波。通过配置合适的频谱平均模式、加权模式和平均次数,降低频谱中的噪声波动,突出显示信号的有效成分。


函数说明

SpectralEstimation.AverageMagPhaseSpectrum

n 说明

计算单通道实数信号的平均频谱,返回幅度和相位。

平均次数:增加平均次数通常可以改善信噪比,但同时也会增加测量时间。

平均类型:线性平均、指数平均或峰值保持的选择取决于具体应用和信号的性质。

窗口函数:选择合适的窗口函数可以帮助减少频谱泄漏,得到更精确的频谱分析结果。

n 参数

x

    单通道实数信号

sampleRate

    采样率

window

    窗函数类型,默认值为汉宁窗

windowParam

    窗系数

averaging

    平均参数设置,默认值为不进行平均

dBMag

     是否将幅度的单位转换为dB

unwrapPhase

    是否展开相位

convertToDegree

    是否将相位单位转换为角度,默认值为弧度单位

restartAveraging

    是否重新开始进行平均过程

n 返回

返回包含幅度谱、相位谱、频谱分辨率、平均完成次数以及完成旗帜位的元组。如果输入信号单位是V,幅度单位是V,如果dBMag为true,幅度单位是dBV。


2. Spectrum Calculation Example

      函数说明

      Spectrum.PowerSpectrum

       n 说明

       从输入信号中寻找最高幅度的单频信号,计算出频率、幅度和相位。

       n 参数

       waveform

    输入的时域波形

samplingRate

    输入信号的采样率,以S/s为单位

spectrum

    输出功率谱

df

    功率谱的频谱间隔,以Hz为单位

unit

    设置功率谱的单位

windowType

    窗类型

windowPara

    窗调整系数,仅用于Kaiser/Gaussian/Dolph-Chebyshev窗

PSD

    输出的频谱是否为功率谱密度


3. Spectrum ChirpZ

      背景知识

  Chirp-Z 变换(CZT)可以在任意频率范围内进行频谱计算,并且能够以更高的分辨率分析信号的频率特性。Chirp-Z 变换克服了FFT在频率分辨率和范围上的限制,提供了更为灵活和精确的频谱分析工具。适用于需要在非均匀频率范围内进行高分辨率分析的场景

本范例先仿真生成一个时间序列和对应的信号序列,其中信号序列是由多个不同频率的正弦波叠加而成的。对该序列进行Chirp-Z,观察频谱上各频率成分的比重。

函数说明

Fourier.ChirpZ

       n 说明

计算一维输入序列在Z平面上围绕螺旋线的频率响应,也叫作线性调频变换,原理是利用卷积来实现任意大小的离散傅里叶变换(DFT)的快速傅里叶变换算法。

       n 参数

       x

    一维输入序列

ratio

    螺旋线上分布点的比例

startPoint

    螺旋线的起始点位置

size

    输出序列长度,默认值等于输入序列长度

       n 返回

Chirp-Z变换结果


4Spectrum Cross

      背景知识

交叉频谱(Cross-Spectrum)是一种用于分析两个信号之间频域关系的重要工具。它能够揭示两个信号在频域上的相互作用,尤其是在频率成分上的相干性和相位关系。

互功率谱密度(CPSD)

功率谱密度描述了信号在不同频率上的功率分布。而互功率谱密度表示两个信号在频率f处的相互作用程度。如果互功率谱中某个频率点上的值较大,说明这两个信号在该频率下具有较强的相关性。需要特别注意,如果互功率谱中某个频率点上的值是一个实数且为正,这意味着两个信号在该频率上是同相的(即它们的波形是同步的)。如果互功率谱中某个频率点上的值是一个负数,则它们在该频率上是反相的。

相干性(Coherence)

相干性度量了两个信号在不同频率下的相关程度。它的值域在0到1之间。相干性为1表示两个信号在某一频率下完全相关(即其中一个信号可以通过另一个信号的线性变换来表示);相干性为0表示两个信号在该频率下完全不相关。

互功率谱密度提供了两个信号在频域中的相对相位和幅度信息,用于分析它们在不同频率下的共同特征。相干性则进一步量化了这种共同特征的强度,独立于信号的幅度,仅关注于频率成分的相关性。

本范例先仿真生成两个余弦波形,这两个波形相位相差45°,并且在两个信号上都叠加白噪声。然后分析并绘制两个信号的互功率谱已经相关性谱,展示两个信号的交叉相位谱。


函数说明

SpectralEstimation.CrossPowerSpectralDensity

n 说明

使用Welch平均周期图法估计两个一维实信号的互功率谱密度。

n 参数

x

    第一个输入信号

y

    第二个输入信号

sampleRate

    采样率

window

    窗函数类型,null为汉宁窗

noverlap

    分段重叠的样本数,为NaN时使用默认值,大小为分段长度的一半

nfft

    DFT变换的点数,为NaN时使用默认值

freqRange

           频谱范围,默认为单边功率谱,默认为单边功率谱

n 返回

互功率谱密度、相位谱和对应频率

SpectralEstimation.MagnitudeSquaredCoherence

n 说明

使用Welch平均周期图法估计两个输入信号的幅值平方相干性。

n 参数

x

    第一个输入信号

y

    第二个输入信号

sampleRate

    采样率

window

    窗函数类型,null为汉宁窗

noverlap

    分段重叠的样本数,为NaN时使用默认值,大小为分段长度的一半

nfft

    DFT变换的点数,为NaN时使用默认值

freqRange

频谱范围,默认为单边功率谱,默认为单边功率谱

n 返回

幅度相干和频点


5Spectrum Dynamic Parameter Test

      背景知识

      在信号处理中,带宽和动态范围是评估信号质量和系统性能的重要指标。带宽表示信号或系统能够有效传输或处理的频率范围,而动态范围则衡量系统在不引入显著失真的前提下,能够处理的最大信号与最小信号的比值。常见的动态参数包括信噪比(SNR)、无杂散动态范围(SFDR)、总谐波失真(THD)等。

       原理:

动态参数反映了系统在处理信号时的质量,SNR表示信号与噪声的比值,SINAD表示信号与噪声及失真分量的比值,SFDR是无杂散动态范围,THD是总谐波失真,反映了信号中的失真成分。

SNR: 信号与噪声比,反映信号的清晰度。

SINAD: 信号与所有失真和噪声的比值,是信号整体质量的综合指标。

SFDR: 系统中最大无杂散动态范围,表示信号与最强的杂散信号的功率比。

THD: 总谐波失真,所有谐波功率之和与基频信号功率之比,反映信号中谐波失真的程度。


      函数说明

      SpectralEstimation.Periodogram

周期图法来估计单通道实信号的功率谱或功率谱密度

n 参数

x

    输入信号

sampleRate

    采样率

window

    窗函数系数

    描述: 应用于信号的窗函数系数。如果为 `null`,默认为矩形窗;如果值为 `true`,则使用凯瑟窗。

nfft

    DFT点数

     描述: 离散傅里叶变换(DFT)中使用的点数。如果设置为 `NaN`,则使用默认值。

freqRange

    频谱范围

    描述: 定义使用单边功率谱还是双边功率谱。默认为单边功率谱。

exportMode

    频谱导出类型

    描述: 决定导出功率谱还是功率谱密度。默认为功率谱。

reassigned

    功率谱重新分配

    描述: 是否将功率谱重新分配到最接近中心功率的频率,以锐化局部频谱估计。默认为 `false`。

dB

    转换为dB

    描述: 是否将功率谱值转换为分贝(dB)。如果为 `true`,功率谱将以dB为单位,功率谱密度以dB/Hz为单位。默认为 `false`。

n 返回

spectrum

    功率谱

    描述: 估计的功率谱值。一维数组,包含输入信号的功率谱。

f

    频率点

            描述: 对应于功率谱值的频率点。一维数组,包含计算功率谱时所用的频率。

Distortion.SNR

    用于在时域中测量输入信号的信噪比(SNR)。通过分析输入信号与噪声的比例,忽略特定的低次谐波和可能存在的混叠效应,返回信噪比和噪声功率。

n 参数

x

    输入信号

sampleRate

    采样率

nHarm

    忽略的谐波数

    描述: 忽略的低次谐波数量,包括基频。默认值为6,意味着会忽略前6个谐波。

omitAliases

    忽略混叠谐波

    描述: 当信号欠采样时,是否忽略由于混叠产生的基波谐波。

n 返回

r

    信噪比

    描述: 信噪比,单位为dBc(相对于载波的分贝值)。

noisePow

    噪声功率

    描述: 总噪声功率,单位为dB,不包括被忽略的谐波。

Distortion.SINAD

    用于在时域中测量输入信号的信号噪声加失真比(SINAD),计算并返回 SINAD 值以及总噪声和谐波失真的功率。

n 返回

r

    SINAD 值,单位为 dBc(相对于载波的分贝),表示信号与噪声及失真总功率的比率。

totDistPow

    总噪声和谐波失真的功率,单位为 dB,包含信号中的所有噪声和失真分量。

Distortion.SFDR

    用于测量时域输入信号的无杂散动态范围(SFDR)。SFDR是指在信号中,基频信号的功率与最大的杂散信号功率之间的比值,通常用来评估系统的纯净度。

n 参数

x

    输入信号

sampleRate

    采样率

minSpurDistance

    杂散最小距离

    描述: 基频的最小距离,以一个DFT bin为单位,用于忽略接近基频的杂散信号或旁瓣信号。这个参数帮助排除基频附近的干扰。

    默认值为0。

n 返回

r (SFDR):

    描述: 无杂散动态范围,以dB为单位。

spurPow

    最大杂散功率

    描述: 最大杂散信号的功率,以dB为单位。

spurFreq

    最大杂散频率

    描述: 最大杂散信号对应的频率。

Distortion.THD

    用于在时域中测量输入信号的总谐波失真(THD),计算了每个谐波的功率和频率,以及总谐波失真比。

n 参数

nHarm

    计算的谐波的数量

omitAliases

    是否忽略混叠的基波谐波。当信号被欠采样时,谐波可能会混叠进来,这个参数决定是否忽略这些混叠的谐波。默认为 `false`,表示不忽略混叠谐波。

n 返回

ratio

    总谐波失真(THD),单位为 dBc(相对于载波的分贝),表示信号中谐波功率相对于基频信号功率的比率。

harmPow

    各阶谐波的功率,单位为 dB,表示每个谐波分量的功率。

harmFreq

    各阶谐波的频率,单位为 Hz,表示每个谐波的实际频率


6Spectrum FFT

      背景知识

快速傅里叶变换(FFT, Fast Fourier Transform)是傅里叶变换的一种高效算法,用于将时间域信号转换为频域信号。傅里叶变换的基本思想是将一个复杂的周期性信号分解成若干个简单的正弦波(或者余弦波)之和,每个正弦波具有不同的频率、幅度和相位。

在进行FFT时,有时会对信号进行补零操作,即在信号的末尾添加零,以增加FFT的点数。补零的目的是为了提高频谱的分辨率,或是为了使FFT的点数满足特定的要求,如2的整数次幂。对于一个N点的有限长序列,其Z变换可以由其N点DFT系数表示。当对原始数据序列进行补零,使序列长度变为2N时,相当于对原有的DFT系数进行了插值。这意味着,补零并不会改变信号的基本频率成分,而是在频域上进行了一种“插值”,使得频谱变得更加“细腻”。

本范例先仿真生成带有多个谐波的信号,再通过 FFT 分析信号的频谱。最后通过补零的方式增长分析点数,提高频谱分析的分辨率。

函数说明

Fourier.Forward

n 说明

使用快速傅里叶变换算法计算实数信号的离散傅里叶变换 (DFT)。

n 参数

x

    一维输入实数信号

size

    变换长度,若信号小于变换长度,则对信号进行补零, 若信号长度大于变换长度,则对信号进行截断。默认值等于输入信号长度

n 返回

FFT变换结果


7Spectrum Hilbert

      背景知识

希尔伯特变换用于从一个实信号生成其对应的解析信号。解析信号包含了原始信号的所有信息,并且还提供了信号的瞬时幅度和瞬时相位信息,在频谱上只包含正频率分量。变换得到的解析信号得到的是一个复数信号,实部为原始信号,虚部为希尔伯特变换后的结果,是将实信号的正频率分量相位延迟90度,负频率分量相位提前90度得到。保留了信号的原始信息,但负频率分量的能量转移到正频率部分。

调幅信号分析:在调幅信号中,通过希尔伯特变换可以提取出包络信息。

瞬时信息:用于计算信号的瞬时幅度、频率、相位。

滤波器设计:在数字信号处理中,希尔伯特变换可以用于设计特殊的滤波器,如全通滤波器。

函数说明

Hilbert.Forward

n 说明

用于对输入信号进行希尔伯特变换,来生成对应的解析信号。

n 参数

x

    输入的实值信号序列。希尔伯特变换是针对实数信号的,因此这个参数代表了信号的原始实数部分。通过希尔伯特变换,输出的结果会包含信号的实部和虚部。

size

    默认值: `NaN`(未指定时,使用默认值)

    离散傅里叶变换(DFT)的点数。DFT 点数决定了希尔伯特变换过程中傅里叶变换的长度。如果未指定 `size`,则默认为输入信号长度。如果 `size` 大于输入信号长度,则使用零填充;如果小于输入信号长度,信号会被截断。控制傅里叶变换的计算精度和信号分辨率。较大的 DFT 点数可以提高频率分辨率,较小的点数则计算速度更快。

n 返回

解析信号

    类型: `Complex[]`

    输出的解析信号,包含原始信号的实部和虚部。实部为输入信号,虚部是其希尔伯特变换。解析信号的形式为  x’ = x + j y ,其中 y 是x  的希尔伯特变换。

SpectralEstimation.Pwelch

n 说明

方法利用 Welch 平均周期图法来估计二维复信号的功率谱或功率谱密度。

n 参数

x

    输入信号

sampleRate

    采样率

segLength

    分段长度

         默认值 `NaN`

    说明: 将信号划分为若干段进行 Welch 平均时,每段的长度,不能超过信号的总长度。

windowType

    窗函数类型

    默认值: `Hamming`

    说明: 选择用于加窗的窗函数类型,常见的窗函数有 Hamming 窗、Hann 窗等。窗函数用于减少频谱泄漏,提高频谱估计的精度。

windowParam

    窗函数系数

    默认值: `NaN`

    说明: 窗函数的特定参数,例如 Kaiser 窗的贝塞尔参数。对某些窗函数来说,可以指定系数来改变窗函数的形状

noerlap

    分段重叠点数

    默认值: `NaN`(即为分段长度的一半)

    说明: 相邻段之间的重叠点数。重叠可以提高频谱估计的平滑性,默认值是分段长度的一半。

nfft 

    DFT 变换的点数

    默认值: `NaN`

    说明: 进行离散傅里叶变换(DFT)时使用的点数。如果未指定,则默认为分段长度。如果指定的点数大于分段长度,会进行零填充,若小于,则信号会被截断。

traceMode 

    跟踪模式

    默认值: `Aerage`

    说明: 控制如何处理不同分段的频谱值。默认值是平均模式,即对每段的频谱进行平均。

    `TraceMode` 是一个枚举类型,用于控制功率谱密度(PSD)的跟踪模式。在使用 Welch 平均周期图法计算频谱时,决定如何处理每段信号的频谱值。1) Aerage

    平均功率

说明: 计算每段信号的频谱后,将所有段的频谱值进行平均处理。这是默认模式,用于生成一个平滑的平均功率谱。平均模式适合观察信号的总体能量分布,而不是过分关注瞬时的极值。

适用场景: 适用于需要分析信号的平均能量分布场合,适合平稳或准平稳信号的频谱分析。

2) MaxHold

最大值保持

说明: 在计算每段信号的频谱后,保留每个频率点的最大值。即对于同一频率点,多段信号的频谱值进行比较,选择其中的最大值。这种模式可以有效捕捉信号中的最大瞬时功率。

适用场景: 适合捕捉频谱中出现的峰值,例如瞬时强度较高的信号或突发性信号。如果关心极值和信号的最大输出,MaxHold 是合适的选择。

3) MinHold

最小值保持

说明: 在计算每段信号的频谱后,保留每个频率点的最小值。即对于同一频率点,选择所有段中的最小功率值。这种模式用于确定信号中的最低能量点。

适用场景: 适用于识别信号中低能量或背景噪声水平。如果目标是分析噪声的最小功率分布,或寻找信号中最低能量的部分,MinHold 是最佳选择。

Aerage:计算各段频谱的平均值,适合平滑、全局分析。

MaxHold:保留最大值,用于捕捉信号中的瞬时峰值或强度最高的部分。

MinHold:保留最小值,用于分析信号的最低能量或背景噪声水平。

freqRange 

    频谱范围

    默认值: `TwoSided`

 说明: 控制输出的频谱范围。常见选项有单边功率谱和双边功率谱,函数中还提供了居中谱。如果输入信号为实数,通常选择单边功率谱;对于复数信号,则使用双边功率谱。

1) OneSided

    适用于实数信号,节省计算量。

   2) TwoSided

    适用于复数信号,或需要完整查看正负频率的场景。

   3) Centered

    适用于复数信号,将零频率放在中心。

exportMode

   频谱导出类型

   默认值: `PowerSpectrum`

说明: 控制输出的频谱类型。可以选择导出功率谱(单位为 ^2)或功率谱密度(单位为 ^2/Hz)。

dB

    是否将线性值转换为 dB

    默认值: `false`

    说明: 如果设置为 `true`,则输出的频谱单位将是对数标度(dB),例如功率谱单位为 dB,功率谱密度为 dB/Hz。

n 返回

spectrum

    频谱

    说明: 估计出的功率谱或功率谱密度。

f

    频率点

          说明: 对应频谱的频率点。


8Spectrum IMD

      背景知识

互调失真(IMD)是信号处理中常见的非线性失真类型。它是指两个或多个信号通过一个非线性系统后,除了产生原始信号的谐波外,还会产生新的频率分量,这些分量是原始信号频率的组合(加法或减法)。这种现象会导致频谱中出现不希望的频率分量,影响信号的质量。

原理

IMD的测量通常需要生成两个或多个频率相近的基频信号,通过系统或设备后,在输出信号中检测新的频率分量。这些新产生的频率分量称为互调产物。测量IMD的关键指标是互调产物的功率大小及其与基频信号的功率比值。

范例内容说明

时域信号图表:测试信号的时域波形,展示信号在时间上的变化情况。

频域信号图表:频谱,可以看到基频信号的频率分量以及由于IMD产生的互调频率分量。

其中比较关注的是三阶互调产物中的2f1-f2或者2f2-f1,因为落在带宽以内,会影响到基本信号。

参数输入框

三阶截断点 (dB): 三阶截断点是IMD的一个关键指标,是基本信号功率曲线与三阶互调产物的功率曲线交叉点,功率的dB值,代表着非线性效应开始显著影响系统的性能,越高的三阶截断点表示设备在较高输入功率下仍能保持良好的线性性能。

基频功率 (dB): 输入基频信号的功率大小,通常以dB表示。

基频频率 (Hz): 输入基频信号的频率。

互调功率 (dB): 显示或输入测量得到的互调产物的功率。

互调频率 (Hz): 显示或输入测量得到的互调产物的频率。

使用场景

IMD测量通常用于评估系统的非线性失真特性,尤其在通信系统中,IMD的存在会影响信号的质量和传输效果。

函数说明

Windows.Kaiser

n 说明

用于设计 KaiserBessel 窗函数。

n 参数

width

    窗函数系数长度

    说明:  Kaiser 窗的长度,决定了窗函数在时间域上的采样点数。窗函数长度越长,频域分辨率越高,但会导致频谱主瓣更窄、旁瓣更高。

beta

    形状系数

    默认值: `0.5`

    说明: Kaiser 窗函数的形状参数 ,用于调整窗函数的主瓣和旁瓣的特性。常见的范围是 0 到 10 左右,但没有严格上限,较大的beta值使窗函数边缘更平滑,旁瓣衰减更强,但主瓣变宽。

Beta=0:相当于矩形窗

Bet=5:相当于汉宁窗

Beta=6:相当于汉明窗

Beta=8.6:相当于布莱克曼窗。

symmetric

    窗系数是否对称

           默认值: `false`

说明: 窗函数系数的对称性。当 `symmetric` 为 `true` 时,生成对称的窗函数,通常用于滤波器设计,确保滤波器的线性相位特性;当 `symmetric` 为 `false` 时,生成非对称的窗函数,适用于频谱分析,可以提高频率分辨率。

n 返回

窗函数系数数组:

类型: `double[]`

说明: 返回生成的 Kaiser 窗函数的系数数组,可以用于卷积操作,设计滤波器,或在频谱分析中对信号进行加窗。

SpectralEstimation.Periodogram

n 说明

使用周期图法来估计单通道实数信号的功率谱或功率谱密度。这种方法基于信号的离散傅里叶变换(DFT),通过对信号的时域加窗处理,减少频谱泄漏。

n 参数

x

    说明: 对信号分段FFT

sampleRate

    采样率

window

    窗系数

    默认值: `null`(默认为矩形窗)

    说明: 对信号进行窗函数处理的窗系数数组。如果未指定 `window`,则默认使用矩形窗(即无窗)

    常见窗函数包括 Hamming、Hann 和 Kaiser 等,不同窗函数的选择会影响频谱的平滑程度和分辨率。

nfft

    DFT 点数

    默认值: `NaN`(使用默认值)

    说明: 离散傅里叶变换(DFT)的点数,控制频谱的频率分辨率。`nfft` 可以大于或小于信号长度。较大的 `nfft` 提供更高的频率分辨率。较大的 `nfft` 值能够细化频谱估计,但会增加计算复杂度。

freqRange

    频谱范围

    默认值: `FrequencyRange.OneSided`(单边功率谱)

    说明: 控制输出频谱的范围。默认是单边功率谱,仅显示正频率分量。如果设置为 `FrequencyRange.TwoSided`,则会显示正负频率分量。

exportMode

    频谱导出类型

    默认值: `ExportMode.PowerSpectrum`(功率谱)

    说明: 控制导出的频谱类型。`ExportMode.PowerSpectrum` 输出功率谱,单位为 (V^2 ;`ExportMode.PowerSpectralDensity` 输出功率谱密度,单位为 V^2/Hz。

reassigned

    重新分配功率谱

    默认值: `false`

    说明: 是否重新分配功率谱到最接近中心功率的频率。在标准的频谱估计中,频谱值被固定分配到离散的频率点,可能会导致某些频率成分的模糊,尤其是在信号频率成分变化迅速时。功率谱重新分配算法会计算出每个频率成分的实际中心位置并将该频率成分的功率值重新分配到离该位置最近的频率点上。可以局部锐化频谱估计,减少频谱的模糊,使得频率分布更加清晰,尤其是在高分辨率频谱分析中。

处理具有复杂频率特性的信号如存在快速频率变化的信号或混合频率成分的信号;在频谱估计中看到更精确的频率位置和局部频率变化的细节,启用 `reassigned` 参数能够提供更好的频谱分辨效果


      dB

    是否转换为 dB 单位

    默认值: `false`

    说明: 是否将频谱结果从线性值转换为对数值,以 dB 为单位。如果 `dB = true`,则功率谱单位为 dB,功率谱密度单位为 dB/Hz。

n 返回

spectrum

    频谱

    说明: 估计得到的功率谱或功率谱密度数组。

f

    频率点

    说明: 与功率谱对应的频率点数组,频率范围由 `sampleRate` 和 `nfft` 决定。

oip3

    三阶截断点,功率的dB值,10lgP,如果第二主频率是第一主频率的二次谐波分量,此时较低的交调分量在零频,oip3的值为NaN;

fundPow

    两个基频正弦信号的功率;

fundFreq

    两个基频正弦信号的频率;

imodPow

    两个互调分量(2f1–f2, 2f2–f1)的功率值,单位是dB;

imodFreq

    两个互调分量的频率。


9. Spectrum Interference

      背景知识

频谱泄露是指在使用离散傅里叶变换(DFT)或快速傅里叶变换(FFT)时,信号频谱的能量从原本应该集中出现的频率点扩展到其他频率上,从而导致频谱不纯,能量“泄漏”到邻近频率。频谱泄露可能导致频谱分析结果不准确,特别是在检测弱信号时,泄露的强信号能量可能掩盖弱信号,导致无法正确检测或识别频率成分。

泄露系数计算信号的频谱能量在主瓣以外的部分相对于总能量的比例。频谱泄露参数的范围是 0 到 1。默认值是 0.5,对应于汉宁窗。泄露越小,频率分辨率越低;泄露值为1时,相当于矩形窗,频率分辨率提高,但泄露增加。

频谱泄露主要发生在以下两种情况:

1. 信号截断:我们在对信号进行DFT/FFT时,通常只能处理有限长度的信号,这相当于对信号进行了截断。截断本质上相当于将信号与一个矩形窗口相乘,而这种乘积会导致频谱变宽。

2. 不整周期信号:如果信号在分析区间内不整周期,即信号的周期与采样长度不匹配,信号的傅里叶变换就不能集中在离散的频率点上,而是扩散到多个频率点,形成频谱泄露。

窗函数:通过应用不同的窗口函数(如Hanning窗、Hamming窗、Blackman窗等)来平滑信号的截断点,可以减少频谱泄露。这些窗口函数的目的是使得信号在截断处逐渐减小到零,从而减少频谱扩散。

采样整周期信号:在信号采样时,确保采样长度与信号周期相匹配,可以显著减少频谱泄露。

函数说明

SpectralEstimation.PowerSpectrum

n说明

用于估计二维实数信号的平均功率谱,返回功率谱及其对应的频率点。

n参数

x

    输入信号

ampleRaste

    采样率

frequencyResolution

    频率分辨率

    描述:频率分辨率的带宽,Hz。这个值越小,频率分辨率越高

leakage 

    频谱泄露。(根据泄露参数确定窗类型)

    描述:频谱泄露参数的范围是 0 到 1。默认值是 0.5,对应于汉宁窗。泄露越小,频率分辨率越低;泄露值为1时,相当于矩形窗,频率分辨率提高,但泄露增加。

twoSided

    双边谱

    描述:是否计算双边谱。双边谱会包括正负频率的成分,单边谱则仅包括正频率。默认值为 `false`,即单边谱。

dB

    功率谱单位是否转换为 dB

    描述:是否将功率谱的单位转换为分贝 (dB)。如果 `dB` 为 `true`,返回的功率谱将以 dB(分贝伏特)的单位表示。

    默认值为 `false`。

n 返回

spectrum

    功率谱

    估计的功率谱值。它是一个二维数组,表示每个频率点的功率谱。

f

    频率点

          与功率谱相对应的频率点。这些频率点是 `spectrum` 的每一列对应的频率值。


10Spectrum Measure

      背景知识

在信号处理中,带宽和动态范围是评估信号质量和系统性能的重要指标。带宽表示信号或系统能够有效传输或处理的频率范围,而动态范围则衡量系统在不引入显著失真的前提下,能够处理的最大信号与最小信号的比值。

原理:

功率和带宽:带宽的测量通常包括占用带宽(系统有效传输信号的频率范围)、3dB带宽(信号功率降至最大值的一半对应的频率范围)以及平均频率(信号频谱的中心)和中间频率。

带内功率: 显示信号在特定频率范围内的功率,通常作为总信号功率的一部分。

占用带宽 (Hz):占用带宽是指信号的频谱中包含了指定百分比(通常为99%或90%)总功率的频带宽度,信号的主要能量集中在哪个频带范围内,表示系统有效传输的频段。

3dB带宽 (Hz):从信号的最大功率开始,功率下降到一半所对应的频率范围,常用于滤波器的带宽定义。

平均频率 (Hz):信号频谱的重心位置。

中间频率 (Hz):频率范围的中心频率。

函数说明

SpectralEstimation.Periodogram

周期图法来估计单通道实信号的功率谱或功率谱密度

n 参数

x

    输入信号

sampleRate

    采样率

window

    窗函数系数

    描述: 应用于信号的窗函数系数。如果为 `null`,默认为矩形窗;如果值为 `true`,则使用凯瑟窗。

nfft

    DFT点数

    描述: 离散傅里叶变换(DFT)中使用的点数。如果设置为 `NaN`,则使用默认值。

freqRange

频谱范围

    描述: 定义使用单边功率谱还是双边功率谱。默认为单边功率谱。

exportMode

    频谱导出类型

    描述: 决定导出功率谱还是功率谱密度。默认为功率谱。

reassigned

    功率谱重新分配

    描述: 是否将功率谱重新分配到最接近中心功率的频率,以锐化局部频谱估计。默认为 `false`。

dB

    转换为dB

    描述: 是否将功率谱值转换为分贝(dB)。如果为 `true`,功率谱将以dB为单位,功率谱密度以dB/Hz为单位。默认为 `false`。

n 返回

 spectrum

    功率谱

    描述: 估计的功率谱值。一维数组,包含输入信号的功率谱。

f

    频率点

    描述: 对应于功率谱值的频率点。一维数组,包含计算功率谱时所用的频率。

SpectralFeature.BandPower

用于估算信号在指定频率范围内的平均功率

n 参数

x

    输入信号

sampleRate

    采样率

freqRange

    指定频率范围,Hz

    描述: 指定的频率范围,估算功率将在这个频率范围内进行。如果未指定,可能默认估算整个频率范围。

units

    功率测量单位

    描述: 用于测量功率的单位,默认值为 `V^2`。

    类型: `PowerUnits`,V = 0, V2 = 1, W = 2, dbm = 3, dbW = 4, dbV = 5, dbmV = 6, dBuV = 7

impedance

    阻抗

    描述: 电路或系统的阻抗值,默认值为 50 欧姆。功率计算时会考虑阻抗。

n 返回

BandPower

    平均带内功率

    描述: 返回指定频率范围内信号的平均功率值。

SpectralFeature.OccupiedBandwidth

用于计算输入信号的占用带宽,带宽定义为频谱功率从 0.5% 到 99.5% 之间所占用的频率范围。

n 参数

x

    输入信号

sampleRate

    采样率

n 返回

bw

    带宽

    描述: 计算出的占用带宽,即频谱功率从 0.5% 到 99.5% 部分之间的频率范围。

flow

    低频边界

    描述: 占用带宽的低频边界(从频谱功率 0.5% 开始)。

fhigh

    高频边界

    描述: 占用带宽的高频边界(到频谱功率 99.5% 结束)

pwr

    功率

    描述: 在计算的带宽范围内的总功率。

SpectralFeature.PowerBandwidth

用于计算输入信号的3dB(半功率)带宽,并返回带宽范围、对应的频率边界和带内功率。

x

    输入信号

    描述: 输入的信号,用于计算3dB 带宽

sampleRate

    采样率

n 返回

bw

    带宽

    描述: 3dB 带宽,即信号功率降低一半的频率范围。

flow

    低频边界

    描述: 3dB 带宽的低频边界。

fhigh

    高频边界

    描述: 3dB 带宽的高频边界。

pwr

    功率

    描述: 在3dB 带宽范围内的总功率。

    SpectralFeature.MeanFreq

    用来计算输入信号的平均频率以及对应的功率。

n 参数

frequencyRange

    频带范围。双精度数组,指定信号的频率范围。如果未提供这个参数,则计算整个频带的平均频率。

n 返回

    该方法返回一个 元组 `(freq, power)`,其中:

freq

    输入信号的平均频率。

power

    对应的功率。

    SpectralFeature.MedianFreq

    计算输入信号的中位数频率

n 返回

信号的中位数频率


11Spectrum MultiTone

      背景知识

多音信号(MultiTone Signal)是由多个不同频率的正弦波信号叠加而成的信号类型。多音信号在频谱上表现为多个离散的频率分量。它们广泛应用于音频测试、通信系统分析等领域,用于评估系统在处理多频信号时的性能。

原理

在多音频谱测量中,需要对输入信号进行离散傅里叶变换(DFT)以获得其频谱。通过分析频谱中的各个频率分量,可以得出每个频率分量的幅度和相位信息。这些信息对于系统的频率响应分析和调试具有重要意义。

范例内容说明

时域信号图表: 显示信号的时域波形,这里可以观察到多个正弦波信号叠加的结果。

频域信号图表: 显示信号的频域特征,展示多个频率分量的幅值和分布情况。

频率参数表格: 列出了信号中的各个频率分量及其对应的幅度和相位。

噪声水平 (dB): 设置信号中添加噪声的水平,可以通过调整噪声水平观察对信号的影响。

单频数量: 选择提取的频率数量

阈值: 设置频率分量的检测阈值,只有幅度超过该阈值的频率分量才会被列出。

输出排序:选择频率分量的输出排序方式,如按幅度递减等,方便分析最强的频率成分。

函数说明

SingleTone.FFTWithHanning

n 说明

通过对输入信号应用汉宁窗进行傅里叶分析,并获取复数频谱。

n 参数

x

    输入信号

correctDC

    是否校正直流

    描述: 指定是否校正直流分量(DC成分),默认为`true`。如果为`true`,会对信号的直流成分进行修正。

excludeNyquist

    是否包含奈奎斯特频率

    描述: 指定结果中是否包含奈奎斯特频率(采样频率的一半),默认为`true`,即默认不包含奈奎斯特频率。

n 返回

    Complex[] (复数频谱)

    返回傅里叶分析后的复数频谱,每个频率点的频谱以复数形式表示,包含幅度和相位信息。

    SingleTone.ExtractMultiTone

n 说明

    从输入信号中提取振幅超过指定阈值的单频信号,并计算出每个单频信号的频率、振幅和相位。

n参数

x

    输入信号

sampleRate

    采样率

threshold

    阈值设置(Vp)

    描述: 单频信号的最小幅值,只有幅值超过该阈值的信号会被提取。

    默认值为 0.001。

maxNumTones

    最大单频数量

    描述: 可以提取的最大单频数量。默认情况下,提取所有幅值超过阈值的单频信号。

    默认值为 `1`(提取所有符合条件的单频信号)。

sorting

    输出排序方式

    描述: 输出结果的排序方式,默认按照频率升序排列。

    默认值为 `IncreasingFrequency`(按频率递增排序)。

n 返回

返回一个包含三个数组的元组,分别是每个单频信号的:

freq

    频率

    类型: `double[]`,每个单频信号的频率。

amp

    幅值

    类型: `double[]`,每个单频信号的振幅。

phase

    相位

    类型: `double[]`,每个单频信号的相位,单位是角度。


12Spectrum Periodogram

      背景知识

周期图法是一种直接的进行功率谱/功率谱密度估计的方法,又称直接法。之所以称为直接法,是和BT法(间接法)相比,跳过了自相关计算的部分。

数学原理:先对信号进行DFT变换。再对DFT变换后的结果里的每个元素的幅值的平方取平均数。就得到了功率谱估计。如果再除以采样频率,则得到了功率谱密度估计。

本范例首先仿真生成了两个Sine波形和一些噪音。分别对单通道信号波形分析和混合叠加的信号分析两种方式体现周期图法进行功率谱密度分析的效果。

函数说明

SpectralEstimation.Periodogram

n 说明

使用周期图法估计单通道实数信号的功率谱或者功率谱密度。

如果输入信号单位是V,ExportMode为功率谱时频谱单位是V^2;ExportMode为功率谱密度时频谱单位是V^2/Hz。

如果dB为True,ExportMode为功率谱时频谱单位是dBV,ExportMode为功率谱密度时频谱单位是dBV/Hz。

n 参数

x

    单通道实数信号

sampleRate

    采样率

window

    窗系数,为null时默认为矩形窗,如果reassigned为真则使用kaiser窗

nfft

    DFT变换的点数,为NaN时使用默认值

freqRange

    频谱范围,默认为单边功率谱

exportMode

    频谱导出类型,默认为功率谱

reassigned

    将功率谱重新分配到最接近中心功率的频率,将用于锐化局部的频谱估计

dB

    是否将线性值转换为dB

n 返回

返回一个频谱和对应频率点的元组。如果ExportMode为功率谱则输出功率谱和对应频率,如果为功率谱密度则输出功率谱密度和对应频率。


13Spectrum SingleTone

      函数说明

SingleTone.ExtractSingleTone

n 说明

从输入信号中寻找最高幅度的单频信号,计算出频率、幅度和相位。

n 参数

x

    输入信号

sampleRate

    采样率

approxFreq

    在频域中搜索单频的近似中心频率,默认可在全频范围[0,Fs/2]搜索单频

freqWidth

    搜索的频带宽度,单位是采样率的百分比仅当approxFreq不为NaN时有效。默认值是5%,即当approxFreq存在时,在其附近5%采样率的范围内搜索。



14Spectrum SpeedTest

比较了周期法、Welch法和SeeSharpTools法在频谱估计上的运行效率。SeeSharpTools效率最高,比Welch法高甚至2个数量级。

SeeSharpTools底层引用了Intel的MKL库。

背景知识

使用Intel MKL(Math Kernel Library)进行频谱分析(如快速傅里叶变换,FFT)比较快,主要有以下几个原因:

1. 高度优化的算法

Intel MKL包含了高度优化的FFT算法,这些算法针对不同的输入大小和类型进行了优化。MKL的FFT实现利用了最新的数学和计算技术,以确保在各种情况下都能提供最佳性能。

例如:快速傅里叶变换(FFT)算法的效率在很大程度上取决于输入数据的长度。传统的Cooley-Tukey FFT算法最适合处理长度为2的幂次的输入数据。然而,现代FFT算法已经发展出许多变种,可以更高效地处理任意长度的数据。混合基数FFT、质因数FFT和Bluestein's FFT等算法通过不同的分解方法和转换技术,显著提高了FFT计算的效率。Intel MKL包含了这些优化算法,并能够根据输入数据的特性自动选择最佳的算法,从而提供卓越的性能。

2. 硬件加速

Intel MKL针对Intel处理器进行了专门优化,充分利用了处理器的特性,如SIMD(Single Instruction, Multiple Data)指令集(如SSE、AVX、AVX-512等)。这些指令集允许在单个时钟周期内对多个数据进行并行处理,从而显著提高计算速度。

3. 多线程支持

Intel MKL支持多线程计算,可以充分利用多核处理器的性能。通过并行化计算任务,MKL能够在多核系统上显著加速FFT计算。

4. 内存优化

MKL的实现考虑了内存访问模式和缓存利用率,减少了内存带宽的瓶颈。优化的内存访问模式可以减少缓存未命中,从而提高计算效率。

5. 自动调优

Intel MKL包含了自动调优功能,可以根据运行时的硬件配置和输入数据的特性,动态选择最佳的算法和参数。这种自适应优化确保了在不同硬件平台和应用场景下都能获得最佳性能。


15Spectrum Transfer

      背景知识

传递函数估计。这是一种用于确定系统输入和输出之间关系的方法。传递函数描述了系统对输入信号的响应特性。其结果是一个包含复数值的向量数组,其中每个复数值表示传递函数在特定频率下的响应。将这个向量数组绘制出来,就是该系统的奈奎斯特曲线。

本范例将向量数组结果中的幅值部分拿出,只绘制了幅频曲线。如果直接将向量数组结果绘制,则可以得到奈奎斯特曲线图。更可以说明TransferFunction函数的结果。

函数说明

SpectralEstimation.TransferFunction

n 说明

使用Welch平均周期图法估计一维输入信号和输出信号的传递函数。

n 参数

x:

    单通道输入信号

y:

    单通道输出信号

sampleRate:

    采样率

window:

    窗函数系数,为null是使用默认的汉明窗

noverlap:

    分段重叠点数,为NaN时使用默认值,大小为分段长度的一半

nfft:

    DFT变换的点数,为NaN时使用默认值

estimator:

    转移函数估计方法:

    1) H1

    噪声和输入信号无关,只影响输出信号。此方法假设输入信号是无噪声的。适用于输入信号是精确已知的情况。

    2) H2

    噪声和输出信号无关,只影响输入信号。此方法假设输出信号是无噪声的。适用于输出信号是精确已知的情况。

n 返回

转移函数和对应频率


16Spectrum Welch

      背景知识

Welch功率谱估计,通常而言,是一种改进的平均周期法。(之所以说通常而言,是我们的SpectralEstimation.Pwelch参数里有个traceMode设定,如果不设置为Average这个默认值,则不是平均法。)

方法是首先对数据进行分段切片,这些切片之间有重叠。然后对每片使用窗函数加窗。最后,对估计值结果做处理(默认是平均处理)。

Welch法在以下场景中应用会比较有优势:

1) 噪声较大的信号:

Welch方法通过分段和平均来减少估计的方差,因此在处理噪声较大的信号时效果更好。

2) 需要平滑的功率谱估计:

由于Welch方法对多个分段的周期图进行平均,得到的功率谱估计通常比直接的周期图更平滑,更稳定。

Welch法也会有一些代价,较明显的有以下两个:

1) 频率分辨率降低:

Welch方法通过将信号分段来计算功率谱密度,每个分段的长度通常比整个信号的长度要短。这会导致频率分辨率降低,因为频率分辨率与分段长度成反比。

2) 计算复杂度增加:

虽然每个分段的计算量较小,但需要对多个分段进行傅里叶变换和平均,这增加了计算复杂度。对于非常长的信号,这可能会导致计算时间增加。

函数说明

SpectralEstimation.Pwelch

n说明

使用Welch平均周期图法估计一维实信号的功率谱或者功率谱密度。

如果输入信号单位是V,ExportMode为功率谱时频谱单位是V^2,ExportMode为功率谱密度时频谱单位是V^2/Hz。

如果dB为True,ExportMode为功率谱时频谱单位是dBV,ExportMode为功率谱密度时频谱单位是dBV/Hz。

n参数

x:

    输入信号

sampleRate:

    采样率

segLength:

    分段长度,不能超过信号长度

windowType:

    窗函数类型,默认为汉明窗

windowParam:

    窗函数系数

noverlap:

    分段重叠点数,为NaN时使用默认值,大小为分段长度的一半

nfft:

    DFT变换的点数,为NaN时使用默认值,大小为4092与一个2的N次幂的最大值。这个2的N次幂为不大于分段长度的最大的2的N次幂。参考以下代码:

    nfft = Math.Max(4092, num.CeilingToPowerOfTwo());//num为分段长度

traceMode:

    跟踪模式,默认为平均值模式。

    跟踪模式包括以下三种:

    1) Average

    这是最常用的模式。在这种模式下,对每个分段计算的功率谱进行平均。这样可以减少估计的方差,得到一个平滑且稳定的功率谱估计。

    2) MaxHold

    在这种模式下,对每个频率点,选择所有分段中功率谱最大的值。这种方法可以用于检测信号中的峰值频率成分,适用于需要识别信号中最强频率成分的场景。

    3) MinHold

    在这种模式下,对每个频率点,选择所有分段中功率谱最小的值。这种方法可以用于检测信号中的最低频率成分,适用于需要识别信号中最弱频率成分的场景。

freqRange:

    频谱范围,默认为单边功率谱

exportMode:

    频谱导出类型,默认为功率谱

dB:

    是否将线性值转换为dB

n 返回

频谱和以及对应的频率点