# freqz
CWT 滤波器组频率响应
函数库: TyWavelet
# 语法
psidft, f = freqz(fb)
___ = freqz(___; Name = Value)
freqz(___; plotfig = true)
# 说明
psidft, f = freqz(fb) 返回小波滤波器 psidft 的频率响应和连续小波变换(CWT)滤波器组 fb 的频率向量 f。频率单位为周期/采样或赫兹。如果指定了采样周期,则频率单位为周期/单位时间,其中时间单位是采样周期的单位。
频率响应 psidft 是正频率的单边频率响应。对于 cwtfilterbank 支持的解析小波,频率响应为实值,等同于幅度频率响应。
___ = freqz(___; Name = Value) 指定一个或多个附加的名值参数。例如,psidft = freqz(fb; FrequencyRange = "twosided") 返回完整的双边频率响应。示例
freqz(___; plotfig = true) 没有输出参数,绘制的是 CWT 滤波器组 fb 的幅频响应。示例
# 示例
使用近似合成滤波器进行连续小波逆变换
加载 Kobe 地震数据。创建一个具有周期边界处理功能的 CWT 滤波器组,并将其应用于数据。
using TyWavelet
using TyBase
using TyPlot
using TyMath
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/kobe.mat"
y = load(source_path)
fb = cwtfilterbank(; SignalLength=length(kobe), Boundary="periodic")
获得双向小波和缩放滤波器响应。
psidft, f = freqz(fb; IncludeLowpass=true, FrequencyRange="twosided")
获取数据的 CWT。同时获得缩放系数。
cfs, _, _, scalcfs = wt(fb, kobe)
使用滤波器组和缩放系数进行逆变换。
xrec = icwt(cfs; ScalingCoefficients=scalcfs, AnalysisFilterBank=psidft)
plot(kobe)
hold("on")
plot(xrec)
axis("tight")
获得最大重建误差。
norm(kobe .- xrec, Inf)
3.637978807091713e-11
连续小波变换滤波器组的频率响应
创建一个 CWT 滤波器组。将每个倍频程的声音设置为 14 个,采样频率设置为 1000 Hz,频率限制范围为 200 Hz 至 300 Hz。
using TyWavelet
fb = cwtfilterbank(; VoicesPerOctave=14, SamplingFrequency=1000, FrequencyLimits=[200 300])
绘制频率响应图。
freqz(fb; plotfig=true)
边界处理和频率范围
该示例显示了边界处理和信号长度如何影响 freqz 返回的频率响应范围。
# Reflection / 偶数长度
创建一个适合偶数长度信号的 CWT 滤波器组。使用默认的 Boundary 设置 Reflection。
using TyWavelet
using TyPlot
sLen = 256
fb = cwtfilterbank(; SignalLength=sLen)
获取滤波器组的单边频率响应。同时获得频率矢量。
psidft, f = freqz(fb; FrequencyRange="onesided")
确认频率范围包括奈奎斯特频率。
f[end]
0.5
绘制中心频率最高的滤波器的频率响应图。
plot(f, psidft[1, :])
xlabel("Frequency (samples/cycle)")
ylabel("Magnitude")
title("Reflection / Even / One-sided")
获取并绘制双边频率响应。确认频率范围不包括奈奎斯特频率。
psidft, f = freqz(fb; FrequencyRange="twosided")
f[end]
0.998046875
plot(f, psidft[1, :])
xlabel("Frequency (samples/cycle)")
ylabel("Magnitude")
title("Reflection / Even / Two-sided")
# Reflection / 奇数长度
创建一个适合奇长信号的 CWT 滤波器组。使用默认的 Boundary 设置 Reflection。
using TyWavelet
using TyBase
using TyMath
sLen = 255
fb = cwtfilterbank(; SignalLength=sLen)
获取滤波器组的单边频率响应。确认频率范围不包括奈奎斯特频率。
_, f = freqz(fb; FrequencyRange="onesided")
f[end]
0.4990176817288802
# periodic / 偶数长度
创建适合偶数长度信号的周期性边界处理 CWT 滤波器组。
using TyWavelet
using TyBase
using TyMath
sLen = 256
fb = cwtfilterbank(; SignalLength=sLen, Boundary="periodic")
获取滤波器组的单边频率响应。确认频率范围确实包括奈奎斯特频率。
_, f = freqz(fb; FrequencyRange="onesided")
f[end]
0.5
# periodic / 奇数长度
创建一个 CWT 滤波器组,对奇数长度信号进行周期性边界处理
using TyWavelet
using TyBase
using TyMath
sLen = 255
fb = cwtfilterbank(; SignalLength=sLen, Boundary="periodic")
获取滤波器组的单边频率响应。确认频率范围不包括奈奎斯特频率。
_, f = freqz(fb; FrequencyRange="onesided")
f[end]
0.4980392156862745
# 输入参数
fb - 连续小波变换滤波器组cwtfilterbank 对象
连续小波变换 (CWT) 滤波器组,指定为 cwtfilterbank 对象。
# Name-Value 参数
以 Name1=Value1,...NameN=ValueN 的形式指定可选的参数对,其中 Name 是参数名,Value 是相应的值。Name-Value 参数必须出现在其他参数之后,但参数对的顺序并不重要。
示例: psidft = freqz(fb; IncludeLowpass = true) 将低通或缩放滤波器的频率响应添加到 psidft 的最后一行。
IncludeLowpass - 附加低通滤波器频率响应false 或 0(默认) | true 或 1
附加低通或缩放滤波器频率响应作为 psidft 最后一行的选项,指定为其中之一:
1(真)- 对称包含频率响应
0(false)- 不包含频率响应
对于 cwtfilterbank 支持的解析小波,缩放滤波器的频率响应是实值,等同于幅度频率响应。
FrequencyRange - 滤波器响应的频率范围"onesided" (默认) | "twosided"
小波和缩放函数频率响应的频率范围,指定为 "onesided" 或 "twosided" 之一。每个选项对应的频率范围如下
- "onesided" - 当填充滤波器的长度为偶数时,返回
的频率响应;当填充滤波器的长度为奇数时,返回 的频率响应。当滤波器组的边界属性为 "reflection" 时,将添加填充。
如果在滤波器组中指定了采样频率 Fs,间隔将分别变为
- "twosided" - 返回范围
的完整双面频率响应。如果在滤波器组中指定了采样频率 Fs,则区间变为 。
注意
要在逆 CWT 中使用小波和缩放滤波器,请将滤波器组中的 Boundary 设置为 "periodic",并在 freqz 中使用 IncludeLowpass = true 和 FrequencyRange = "twosided"。
# 输出参数
psidft - 频率响应实值二维矩阵
CWT 滤波器组的频率响应,以实值矩阵形式返回。psidft 的每一列都是 f 中相应元素的频率响应。
默认情况下,频率响应 psidft 是正频率的单边频率响应。对于 cwtfilterbank 支持的解析小波,频率响应为实值,等同于幅度频率响应。
f - 频率实值向量
以周期/采样或赫兹为单位的频率,以实值向量形式返回。
如果指定采样周期,则频率以周期/单位时间为单位,其中时间单位是 SamplingPeriod 的单位。