# 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 的单位。

# 另请参阅

cwtfilterbank | centerFrequencies | powerbw | centerPeriods