# cwtfreqbounds
CWT 最大和最小频率或周期
函数库: TyWavelet
# 语法
minfreq, maxfreq = cwtfreqbounds(N)
minfreq, maxfreq = cwtfreqbounds(N, Fs)
maxperiod, minperiod = cwtfreqbounds(N, Ts)
___ = cwtfreqbounds(___; Name=Value)
# 说明
minfreq, maxfreq = cwtfreqbounds(N) 返回长度为 N 的信号的最小和最大小波带通频率(以周期/采样为单位)。最小和最大频率是为默认 Morse(3,60) 小波确定的。最小频率被确定为使得默认小波的两个时间标准偏差以最粗的尺度跨越 N 点信号。最大频率使得最高频率的小波带通滤波器在奈奎斯特频率处下降到其峰值幅度的 ½。
minfreq, maxfreq = cwtfreqbounds(N, Fs) 返回采样频率 Fs 的带通频率(赫兹)。
maxperiod, minperiod = cwtfreqbounds(N, Fs) 返回采样周期 Ts 的带通周期。maxperiod 和 minperiod 是与 Ts 格式相同的标量持续时间。如果设置了标准偏差的数量,使得 log2(maxperiod/minperiode)<1/NV,其中 NV 是每倍频程的声音数量,则 maxperiode 将调整为 minperiod*2^(1/NV)。
___ = cwtfreqbounds(___; Name=Value) 返回最小和最大小波带通频率或周期,以及由一个或多个 Name=Value 参数指定的附加选项。例如,minf, maxf = cwtfreqbounds(1000; TimeBandwidth=30)将默认 Morse 小波的时间带宽参数设置为 30。
# 示例
使用默认值的小波带通频率
使用默认值获取 1000 个样本信号的最小和最大小波带通频率。
using TyWavelet
minfreq, maxfreq = cwtfreqbounds(1000)
minfreq = 0.003295415195896477
maxfreq = 0.4341244679221789
构建具有奈奎斯特峰值振幅的 CWT 滤波器组
获取长度为 10,000 和采样频率为 1 kHz 的信号的默认 Morse 小波的最小和最大小波带通频率。将截止频率设为 100%,使最高频率的小波带通滤波器在 500 Hz 的奈奎斯特频率上达到峰值。
using TyWavelet
using TyPlot
sigLength = 10000
Fs = 1e3
minfreq, maxfreq = cwtfreqbounds(sigLength, Fs; Cutoff=100)
使用 cwtfreqbounds 返回的值构建 CWT 滤波器组。获取滤波器组的频率响应。
fb = cwtfilterbank(;
SignalLength=sigLength, SamplingFrequency=Fs, FrequencyLimits=[minfreq maxfreq]
)
psidft, f = freqz(fb)
构建与第一个滤波器相同的第二个 CWT 滤波器组,但使用默认的频率限制。获取第二个滤波器组的频率响应。
fb2 = cwtfilterbank(; SignalLength=sigLength, SamplingFrequency=Fs)
psidft2, = freqz(fb2)
为每个滤波器组绘制中心频率最高的滤波器的频率响应图。确认第一个滤波器组的频率响应在奈奎斯特达到峰值,第二个滤波器组的频率响应是奈奎斯特峰值幅度的 50%。
plot(f, psidft[1, :])
hold("on")
plot(f, psidft2[1, :])
hold("off")
title("Frequency Responses")
xlabel("Frequency (Hz)")
ylabel("Magnitude")
legend("First Filter Bank", "Second Filter Bank"; loc="northwest")
将 CWT 滤波器组中的最高频率小波衰减到特定值
获取长度为 5 000、采样频率为 10 kHz 的信号的 bump 小波的最小和最大频率。指定截止值为
using TyWavelet
minf, maxf = cwtfreqbounds(Int(5e3), 1e4; Wavelet="bump", Cutoff=100 * 1e-8 / 2)
使用 cwtfreqbounds 返回的值构建滤波器组。绘制频率响应图。
fb = cwtfilterbank(;
SignalLength=Int(5e3),
Wavelet="bump",
SamplingFrequency=1e4,
FrequencyLimits=[minf maxf],
);
freqz(fb; plotfig=true)
严格归零和有效归零截止值的频率范围
获取长度为 4096 的信号的最小和最大小波带通频率。指定截止频率为 0,显示最小和最大带通频率。
using TyWavelet
using TyPlot
sLength = 4096;
co = 0;
minfreq, maxfreq = cwtfreqbounds(sLength; Cutoff=co)
println(
"Min Frequency: $(round(minfreq;digits=6)) cycles/sample\nMax Frequency: $(round(maxfreq,digits=6)) cycles/sample",
)
Min Frequency: 0.000805 cycles/sample
Max Frequency: 0.103574 cycles/sample
使用频率限制创建滤波器组。获取双面小波频率响应。
fb = cwtfilterbank(; SignalLength=sLength, FrequencyLimits=[minfreq, maxfreq])
psif, f = freqz(fb; FrequencyRange="twosided")
获取长度为 4096 的信号的最小和最大小波带通频率,但这次指定的截止频率为
co = 100 * (1e-8 / 2)
minfreq2, maxfreq2 = cwtfreqbounds(sLength; Cutoff=co)
fb2 = cwtfilterbank(; SignalLength=sLength, FrequencyLimits=[minfreq2, maxfreq2])
println(
"Min Frequency: $(round(minfreq2;digits=6)) cycles/sample\nMax Frequency: $(round(maxfreq2,digits=6)) cycles/sample",
)
Min Frequency: 0.000805 cycles/sample
Max Frequency: 0.28177 cycles/sample
获取第二个滤波器组的双向小波频率响应。
psif2, f2 = freqz(fb2; FrequencyRange="twosided")
绘制滤波器组的频率响应图。
subplot(2, 1, 1)
hold("on")
plot.(Ref(f), collect(eachslice(abs.(psif); dims=1)))
ax = gca()
ax.set_xlim([0, 1])
ax.set_ylim([0, 2])
hold("off")
title("Frequency Responses: Zero Cutoff Filter Bank")
ylabel("Magnitude")
xlabel("Normalized Frequency (cycles/sample)")
subplot(2, 1, 2)
hold("on")
plot.(Ref(f2), collect(eachslice(abs.(psif2); dims=1)))
ax = gca()
ax.set_xlim([0, 1])
ax.set_ylim([0, 2])
hold("off")
title("Frequency Responses: Nonzero Cutoff Filter Bank")
ylabel("Magnitude")
xlabel("Normalized Frequency (cycles/sample)")
tightlayout()
对于每个滤波器组中中心频率最高的小波滤波器,获取奈奎斯特频率响应的幅度。观察两个值之间的最小差异。
println("Zero Cutoff / Magnitude at Nyquist: $(psif[1,Int(floor(size(psif,2)/2))])")
Zero Cutoff / Magnitude at Nyquist: 2.43333146437288e-309
println("Nonzero Cutoff / Magnitude at Nyquist: $(psif2[1,Int(floor(size(psif2,2)/2))])")
Nonzero Cutoff / Magnitude at Nyquist: 1.022645888557553e-8
# 输入参数
N - 信号长度正整数 ≥ 4
信号长度,指定为大于等于 4 的正整数。
Fs - 采样频率正标量
以赫兹为单位的采样频率,指定为正标量。
示例: minf, maxf = cwtfreqbounds(2048,100)
Ts - 采样周期标量持续时间
采样周期,指定为正标量持续时间。
示例: minp, maxp = cwtfreqbounds(2048,seconds(2))
# 名-值参数
以 Name1=Value1,...NameN=ValueN 的形式指定可选的参数对,其中 Name 是参数名,Value 是相应的值。名称-值参数必须出现在其他参数之后,但参数对的顺序并不重要。
示例: minf, maxf = cwtfreqbounds(1000; Wavelet="bump", VoicesPerOctave=10) 返回使用bump 小波的最小和最大带通频率,以及 1000 个样本信号的每倍频程 10 个声部。
Wavelet - 解析小波"Morse" (默认) | "amor" | "bump"
用于确定最小和最大频率或周期的解析小波,指定为 "Morse"、"amor" 或 "bump"。这些字符串分别指定了解析 Morse 、Morlet 和 bump 小波。默认小波是解析 Morse(3,60) 小波。
对于 Morse 小波,还可以使用 TimeBandwidth 或 WaveletParameters 名-值参数对小波进行参数化。
示例: minp, maxp = cwtfreqbound(2048, seconds(1), Wavelet="bump")
Cutoff - 峰值幅度的百分比Morse 小波为 50,解析 Morse 小波和 bump 小波为 10(默认值) | 0 和 100 之间的标量
奈奎斯特峰值幅度的百分比,指定为 0 到 100 之间的标量。将截止值设为 0 表示小波频率响应在奈奎斯特衰减为 0。将截止值设置为 100 表示小波带通滤波器的值在奈奎斯特处达到峰值。
对于 cwtfilterbank,解析小波滤波器的峰值为 2。 因此,通过将截止值设置为 100 × α/2,可以确保最高频率的小波在奈奎斯特频率上衰减到 α 值。在这种情况下,必须使 0 ≤ α ≤ 2。
StandardDeviations - 时间标准差的个数2(默认) | 正整数 ≥ 2
用于确定最小频率(最长刻度)的时间标准差的个数,指定为大于等于 2 的正整数。 对于 Morse 小波、解析 Morlet 小波和 bump 小波,4 个标准差通常可确保小波在信号支持的两端衰减为零。将标准差按 4 的倍数递增,例如 4*M,可确保 M 个完整的小波适合信号长度。如果设置的标准差个数使 log2(minfreq/maxfreq)>-1/NV,其中 NV 为每倍频程的声部数,则 minfreq 会调整为 maxfreq × 2^(-1/NV)。
TimeBandwidth - Morse 小波的时间带宽60(默认) | 大于 3 且小于或等于 120 的标量
Morse 小波的时间带宽,指定为正标量。Morse 小波的对称性(伽玛)假定为 3。时间带宽参数越大,小波在时间上就越分散,在频率上就越窄。Morse 小波在时间上的标准偏差约为 sqrt(时间带宽/2)。频率标准偏差约为 1/2*sqrt(2/TimeBandwidth) 。
如果指定了 TimeBandwidth,则不能指定 WaveletParameters。
WaveletParameters - Morse 小波参数[3,60](默认) | 标量的两元素向量
Morse 小波参数,指定为双元素向量。第一个元素是对称参数(gamma),必须大于或等于 1。 第二个元素是时间带宽参数,必须大于或等于 gamma。时间带宽参数与伽马值的比值不能超过 40。
当 gamma 等于 3 时,Morse 小波在频域上是完全对称的。伽马值大于 3 时,偏斜度为正,小于 3 时,偏斜度为负。
如果指定了 WaveletParameters,则不能指定 TimeBandwidth。
VoicesPerOctave - 每个倍频程的声部数10(默认) | 1 和 48 之间的整数
用于确定最小音阶和最大音阶之间必要间隔的每倍频程声部数,指定为 1 到 48 之间的整数。最小和最大音阶分别相当于最小和最大频率或最大和最小周期。
# 输出参数
minfreq - 最小小波带通频率标量
最小小波带通频率,以标量形式返回。如果未指定采样频率,minfreq 的单位是周期/采样。否则,minfreq 的单位是赫兹。
maxfreq - 小波带通最大频率标量
最大小波带通频率,以标量形式返回。如果未指定采样频率,则 maxfreq 以周期/采样为单位。否则,maxfreq 的单位是赫兹。
maxperiod - 小波带通最大周期标量持续时间
最大小波带通周期,以标量形式返回,格式与 Ts 相同。
如果设定的标准差数 log2(maxperiod/minperiod)小于 1/NV,其中 NV 是每倍频程的声部数,则 maxperiod 会调整为 minperiod × 2^(1/NV)。
minperiod - 最小小波带通周期标量持续时间
最小小波带通周期,以标量形式返回,格式与 Ts 相同。
如果设定的标准差数 log2(maxperiod/minperiod)小于 1/NV,其中 NV 是每倍频程的声部数,则 maxperiod 将调整为 minperiod × 2^(1/NV)