普威尔奇
Welch功率的谱密度的估计。
库::`工程师`
语法
函数调用
-
[参数:pxx],[参数:f],[参数:pxxc]=pwelch(___,[参数:freqrange],[参数:spectrumtype],[参数:trace],[参数:out]=:数据)-另外设置频率范围[参数:freqrange]、频谱类型[参数:光谱类型]和跟踪模式[参数:跟踪]. 您可以指定任何以前的输入语法选项。
-
[参数:pxx],[参数:f],[参数:pxxc]=pwelch(___,Name,Value,out=:data)-使用参数设置其他参数,如 «名称-值» 对于前面的任何语法选项。
-
pwelch(___)-绘制SPM或Welch功率谱的估计。
争论
输入参数
# x-输入信号
+
向量资料 | 矩阵
Details
指定为矢量或矩阵的输入信号。 如果 x -矩阵,函数 pwelch 将其列视为独立通道。
| 数据类型 |
|
# 赢-窗口
+
空数组 (默认情况下)| 一个整数 | 向量资料
Details
设置为空数组的窗口 地板32[], 浮标64[] 或 Int64[],正整数或向量。
功能 pwelch 分割输入信号 [参数:x] 划分为段并应用窗口以将每个段的计数递增地乘以窗口值。 窗口值取决于此参数的设置方式。:
-
地板32[],浮标64[]或Int64[]-该函数应用这样长度的汉明窗口进行分割[参数:x]上8与重叠的段[参数:noverlap]计数; -
一个正整数-功能划分[参数:x]成段长度赢并应用相同长度的汉明窗; -
向量资料-功能划分[参数:x]成长度等于向量长度的段赢,并应用参数中指定的窗口赢.
如果长度为 [参数:x] 不允许您获得整数个重叠段 [参数:noverlap] 计数,功能 pwelch 相应地截断信号 [参数:x].
有关可用窗口的列表,请参阅库 光谱分析.
默认情况下,汉明窗口的旁瓣在 42.5 dB,因此频谱分量低于该水平(相对于最大分量)它们可以被隐藏。 选择不同的窗口允许您更改分辨率(例如,使用矩形窗口)和旁瓣衰减(例如,使用矩形窗口)之间的比率。
|
| 数据类型 |
|
# nOverlap-重叠计数的数量
+
空数组 (默认)| 一个整数
# freqSpec-频率响应
+
空数组 (默认情况下)| 一个整数 | 向量资料
Details
以下列方式之一指定的频率响应:
-
地板32[],浮标64[]或Int64[]-该函数使用等于最大值的DFT点的数量计算频谱估计值256和二的最近幂,等于或大于窗口长度; -
一个正整数-函数使用此自变量中指定的DFT点数计算光谱估计值:
如果 freqSpec 更长的段长,功能 pwelch 向段数据添加零;
如果 freqSpec 小于段长,函数对段进行模分割 freqSpec 并总结所得片段;
-
向量资料,包含至少两个元素,—该函数计算在该参数中指定的频率下的频谱估计值:
如果设置了采样率 [参数:fs],函数考虑值 freqSpec 作为循环频率在相同的单位 [参数:fs];
如果未设置采样频率,则函数假定值 freqSpec -这些是rad/count中的归一化频率。
| 数据类型 |
|
# freqRange-用于估计SPM或功率谱的频率范围
+
"onesided" | "twosided" | "居中"
Details
SPM估计值或功率谱的频率范围,定义为 "onesided", "twosided" 或 "居中".
功能 pwelch 申报表 [参数:pxx] 随着行数和频率范围取决于值 freqRange,freqRange,dft点数的奇偶性在 [参数:freqspec] 这取决于参数是否设置。 [参数:fs].
|
|
行数 |
频率范围 |
|
|
|
|||
|
偶数 |
|
|
|
奇数 |
|
|
|
|
|
偶数或奇数 |
|
|
|
|
偶数 |
|
|
|
奇数 |
|
|
||
|
以下情况不支持此参数 |
| 数据类型 |
|
# spectrumType-功率谱的缩放
+
"psd" (默认)| "权力"
Details
功率谱的缩放,设置为以下值之一:
-
"psd"-功能pwelch返回频谱功率密度; -
"权力"-该函数将每个SPM估计值按窗口的等效噪声频带缩放,并返回每个频率处功率的估计值。
该表显示了SPM估计值与返回到的功率谱的估计值之间的缩放比例 [参数:pxx],与指定的输入信号 [参数:x],窗口向量 [参数:赢],重叠的长度 [参数:noverlap]、频率响应 [参数:freqspec] 和采样率 [参数:fs].
| 采样率 | 缩放比例 |
|---|---|
|
psd = pwelch(x, win, nOverlap, freqSpec, Fs, "psd") pow = pwelch(x, win, nOverlap, freqSpec, Fs, "power") 然后 |
|
psd = pwelch(x, win, nOverlap, freqSpec, "psd") pow = pwelch(x, win, nOverlap, freqSpec, "power") 然后 |
# 跟踪-跟踪模式
+
"卑鄙" (默认)| "马克斯霍尔德" | "minhold"
Details
跟踪模式,由以下值之一设置:
-
"卑鄙"-功能pwelch通过平均每个频率范围内所有段的功率谱的估计值,返回每个输入通道的功率谱的估计值; -
"马克斯霍尔德"-该函数返回每个输入通道的最大保留频谱,在每个频率范围内按段选择功率谱的最大值; -
"minhold"-该函数返回每个输入通道的最小保留谱,在每个频率范围内按段选择功率谱的最小值。
输入参数 «名称-值»
将可选参数对指定为 名称,值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 类型参数 «名称-值» 它们应该放在其他参数之后,但对的顺序无关紧要。 您可以指定多个对 «名称-值».
使用逗号分隔名称和值,以及 姓名 将其用引号括起来,或者使用等号分隔名称和值,并且 姓名 指定不带引号。
# Parent-目标父容器
+
空数组 (默认)/对象 轴心 /对象 事务委员会
Details
目标父容器,设置为对象 轴心 或 事务委员会.
如果指定 父=h (或 "家长",h),功能 pwelch 在指定的目标父容器上绘制SPM或Welch功率谱的估计,而不考虑是否存在输出参数。
# out-输出数据的类型
+
:剧情 (默认情况下)| :数据 | :全部
Details
输出数据的类型:
-
:剧情-函数返回一个图形; -
:数据-函数返回数据; -
:全部-函数返回数据和图形。
| 对于此参数,名称和值用等号(=)分隔。 |
输出参数
# pxxc-置信区间
+
矩阵
Details
作为实矩阵返回的置信区间的边界。
+
因此, pxxc[m,2*n − 1] —这是置信区间的下限,并且 pxxc[m,2*n] -估计值对应的置信区间的上限 <参数:pxx>[m,n].
*复盖置信区间的概率由自变量的值决定 [参数:ConfidenceLevel].
| 数据类型 |
|
例子:
使用默认输入数据进行Welch估计
Details
我们得到输入信号的Welch SPM估计值,该信号是具有角频率的离散正弦曲线 rad/计数和加性白噪声 .
让我们创建一个角频率的正弦曲线 rad/计数和加性白噪声 . 重置随机数发生器的状态以获得可再现的结果。 信号的长度为 数数。
using Random
Random.seed!(0)
n = 0:319
x = cos.(π/4 * n) + randn(length(n))
我们使用Hamming窗口和默认DFT长度获得Welch SPM的估计值。 默认段长度为 71 的计数,并且dft的长度包含 256 分,这给出了频率分辨率 rad/倒计时。 由于信号是真实的,SPM估计是片面的,并且有 256 / 2 + 1 分。
import EngeeDSP.Functions: pwelch
pxx, f, pxxc = pwelch(x, out = :data)
([0.1863630724000894; 0.33918260379618265; … ; 0.24304012258269603; 0.11708917663794487;;], [0.0; 0.02454369260617026; … ; 3.117048960983623; 3.141592653589793;;], [0.08146885100079476 0.7719778085293696; 0.1818050422612173 0.8436289786035511; … ; 0.130271774739574 0.6044994291550672; 0.05118568052389489 0.48502229985464423])
让我们建立一个Welch的SPM评估图。
pwelch(x)
让我们重复计算。
*将信号分成长度的部分 . 这个动作相当于将信号分成尽可能长的段,以便得到尽可能多的,但不超过8个重叠的段。 50%.
*我们使用汉明窗口段。
*指定重叠 50 相邻段之间的%。
*要计算FFT,我们使用 点在哪里 .
让我们确保这两种方法产生相同的结果。
Nx = length(x)
nsc = floor(Int, Nx / 4.5)
nov = floor(Int, nsc / 2)
nff = max(256, 2^nextpow(2, nsc))
import EngeeDSP.Functions: hamming
pxxt = pwelch(x, hamming(nsc), nov, nff, out = :data)
maxerr = maximum(abs.(abs.((pxxt[1])[:]) - abs.(pxx[:])))
0.0
将信号分成8个相等的重叠段 50 之间的%。 我们将指定与上一步相同的FFT长度。 让我们计算Welch的SPM分数,并确保结果与之前的估计相匹配。
ns = 8
ov = 0.5
lsc = Int(floor(Nx / (ns - (ns - 1) * ov)))
pxxt8 = pwelch(x, lsc, floor(ov * lsc), nff, out = :data)
maxerr8 = maximum(abs.(abs.((pxxt8[1])[:]) - abs.(pxx[:])))
0.0
给定段长度的韦尔奇分数
Details
我们得到输入信号的Welch SPM估计值,该信号是具有角频率的离散正弦曲线 rad/计数和加性白噪声 .
让我们创建一个角频率的正弦曲线 rad/计数和加性白噪声 . 重置随机数发生器的状态以获得可再现的结果。 信号包含 512 数数。
using Random
Random.seed!(0)
n = 0:511
x = cos.(π/3 * n) + randn(length(n))
我们通过将信号分成长度段来获得Welch的SPM估计值 132 倒计时。 信号段乘以长度为Hamming窗口 132 倒计时。 未指定重叠计数的数量,因此将其设置为 132 / 2 = 66. DFT的长度为 256 分,这给出了频率分辨率 2π / 256 rad/倒计时。 由于信号是真实的,SPM估计是片面的,并且有 256 / 2 + 1 = 129 分。 让我们将SPM绘制为归一化频率的函数。
import EngeeDSP.Functions: pwelch
segmentLength = 132
pxx, w, pxxc = pwelch(x, segmentLength, out = :data)
plot(w/π, 10 * log10.(pxx),
xlabel = "Normalized Frequency (× π rad/sample)",
title = "Welch Power Spectral Density Estimate")
具有给定分段重叠的Welch分数
Details
我们得到输入信号的Welch SPM估计值,该信号是具有角频率的离散正弦曲线 rad/计数和加性白噪声 .
让我们创建一个角频率的正弦曲线 rad/计数和加性白噪声 . 重置随机数发生器的状态以获得可再现的结果。 信号的长度为 320 数数。
using Random
Random.seed!(0)
n = 0:319
x = cos.(π/4 * n) + randn(length(n))
我们通过将信号分成长度段来获得Welch的SPM估计值 100 数数。 信号段乘以长度为Hamming窗口 100 数数。 重叠计数的数目为 25. DFT的长度为 256 分,这给出了频率分辨率 2π / 256 rad/倒计时。 由于信号是真实的,SPM估计是片面的,并且有 256 / 2 + 1 分。
import EngeeDSP.Functions: pwelch
segmentLength = 100
noverlap = 25
pxx, f, pxxc = pwelch(x, segmentLength, noverlap, out = :data)
plot(10 * log10.(pxx),
xlabel = "Frequency Samples",
title = "Welch Power Spectral Density Estimate")
具有给定DFT长度的Welch估计
Details
我们得到输入信号的Welch SPM估计值,该信号是具有角频率的离散正弦曲线 rad/计数和加性白噪声 .
让我们创建一个角频率的正弦曲线 rad/计数和加性白噪声 . 重置随机数发生器的状态以获得可再现的结果。 信号的长度为 320 数数。
using Random
Random.seed!(0)
n=0:319
x=cos。(π/4*n)+randn(长度(n))
我们通过将信号分成长度段来获得Welch的SPM估计值 100 默认情况下具有重叠的计数 50%. 我们指定DFT的长度等于 640 分,使频率 π/4 Rad/计数对应于DFT的第81个bin。 由于信号是真实的,SPM估计是片面的,并且有 640 / 2 + 1 分。
import EngeeDSP.Functions: pwelch
segmentLength = 100
nfft = 640
pxx, f, pxxc = pwelch(x, segmentLength, [], nfft, out = :data)
plot(10 * log10.(pxx),
xlabel = "Frequency Points",
title = "Welch Power Spectral Density Estimate")
使用频率为Hz的Welch方法估计SPM信号
Details
让我们创建一个由频率为 100 加性白噪声中的Hz . 重置随机数发生器的状态以获得可再现的结果。 采样率为 1 kHz,信号的持续时间 — 5 几秒钟。
using Random
Random.seed!(0)
Fs = 1000
t = 0:1/Fs:5-1/Fs
x = cos.(2π * 100 * t) + randn(length(t))
我们获得了前一个信号在重叠段上平均的Welch SPM的估计值。 使用段长度 500 重叠计数 300 数数。 我们使用 500 DFT点,使频率 100 Hz直接落入DFT仓中。 让我们输入采样频率以获得以Hz为单位的频率矢量。 让我们绘制结果图。
import EngeeDSP.Functions: pwelch
pxx, f, pxxc = pwelch(x, 500, 300, 500, Fs, out = :data)
plot(f, 10 * log10.(pxx),
xlabel = "Frequency (Hz)",
ylabel = "PSD (dB/Hz)")
置信区间的上限和下限
Details
此示例说明了将置信边界与平均重叠Welch分段的SPM估计方法一起使用。 虽然这不是统计显着性的必要条件,但Welch估计中的频率,其中置信下限超过SPM周围估计的置信上限,清楚地表明时间序列中的显着波动。
让我们创建一个由频率正弦的叠加组成的信号 100 Hz和 150 加性白噪声中的Hz . 两个正弦波的幅值为 1. 采样率为 1 千赫。 重置随机数发生器的状态以获得可再现的结果。
using Random
Random.seed!(0)
Fs = 1000
t = 0:1/Fs:1-1/Fs
x = cos.(2π * 100 * t) + sin.(2π * 150 * t) + randn(length(t))
我们将得到一个具有置信水平的估计 95%. 让我们将段长设置为 200 计数和重叠 — 50%(即 100 计数)。
import EngeeDSP.Functions: hamming, pwelch
L = 200
win = hamming(L)
nOverlap = 100
pxx, f, pxxc = pwelch(x, win, nOverlap, 200, Fs, ConfidenceLevel = 0.95, out = :data)
让我们将SPM估计与置信区间一起绘制并放大感兴趣的频域。 100 和 150 赫兹。 置信区间的下限在紧邻 100 和 150 Hz明显高于该区域外置信区间的上限。
plot(f, 10 * log10.(pxx),
xlim = (25, 250),
xlabel = "Frequency (Hz)",
ylabel = "PSD (dB/Hz)",
title = "Welch Estimate with 95%-Confidence Bounds")
plot!(f, 10 * log10.(pxxc),
linestyle = :dashdot,
color = "#DD5400")
以零频率为中心的功率谱
Details
让我们创建一个由频率为 100 加性白噪声中的Hz . 重置随机数发生器的状态以获得可再现的结果。 采样率为 1 kHz,信号的持续时间 — 5 几秒钟。
using Random
Random.seed!(0)
Fs = 1000
t = 0:1/Fs:5-1/Fs
noisevar = 1/4
x = cos.(2π * 100 * t) + sqrt(noisevar) * randn(length(t))
我们使用Welch方法使用长度段获得中心功率谱 500 计数,重叠 300 计数和DFT长度 500 分。
import EngeeDSP.Functions: pwelch
pxx,f,pxxc=pwelch(x,500,300,500,Fs,"居中","功率",out=:数据)
让我们绘制结果图。 频率下的功率 −100 和 100 Hz接近预期功率 1/4 对于一个真正的正弦与振幅 1. 偏离 1/4 这是由于加性噪声的影响。
plot(f, 10 * log10.(pxx),
xlabel = "Frequency (Hz)",
ylabel = "Magnitude (dB)")
此外
通过平均重叠焊缝段进行SPM估计
Details
周期图不是对最广泛意义上的静止过程的真实谱功率密度的一致估计。 Welch方法通过将输入信号分割成重叠段来减小周期图方差。
Welch方法为每个段计算修改的周期图,然后对这些估计进行平均以获得频谱功率密度的估计。 由于该过程在最广泛的意义上是静止的,并且Welch方法使用输入信号的各个段的功率谱密度的估计,因此修改的周期图是真实功率谱密度的近似不相关
通常,分段乘以窗口函数,例如汉明窗口,使得韦尔奇方法减少到平均修改的周期图。 因为段通常重叠,段的开始和结束处的数据值,由一个段中的窗口平滑,远离相邻段的末端。 这可以防止因使用窗口模式而导致的信息丢失。