# powerbw


功率带宽

函数库: TySignalProcessing

# 语法

bw = powerbw(x)
bw = powerbw(x, fs)
bw = powerbw(pxx, f)
bw = powerbw(sxx, f, rbw)
bw = powerbw(___, freqrange, r)
bw, flo, fhi, power = powerbw(___)
powerbw(___; plotfig = true)

# 说明

bw = powerbw(x) 返回输入信号 x 的 3 dB(半功率)带宽 bw。


bw = powerbw(x, fs) 以采样率 fs 为单位返回 3 dB 带宽。示例


bw = powerbw(pxx, f) 返回功率谱密度(PSD)估计的 3 dB 带宽 pxx。频率 f 对应于 pxx 中的估计值。示例


bw = powerbw(sxx, f, rbw) 计算功率谱估计的 3 dB 带宽 sxx。频率 f 对应于 sxx 中的估计值。rbw 是用于积分每个功率估计的分辨率带宽。


bw = powerbw(___, freqlims, r) 指定计算参考电平的频率间隔。只要第二个输入参数是 fs 或 f,该语法就可以包括以前语法中输入参数的任何组合。如果第二个输出为空,则将假定为归一化频率。频率范围必须在目标频带内。

如果还指定 r,函数将计算频谱低于参考电平 r dB或达到端点的点之间的频率差。


bw, flo, fhi, power = powerbw(___) 还返回功率带宽的下限和上限以及这些边界内的功率。示例


powerbw(___; plotfig = true) 在当前图形窗口中绘制 PSD 或功率谱,并注释带宽。

# 示例

3 dB 线性调频信号带宽

生成以 1024 kHz 采样的线性调频信号的 1024 个样本。线性调频信号具有 50 kHz 的初始频率,并且在采样结束时达到 100 kHz。添加高斯白噪声,使得信噪比为 40 dB。

using TyControlSystems
using TyMath
using TySignalProcessing
using TyPlot
nSamp = 1024
Fs = 1024e3
SNR = 40
rng = MT19937ar(5489)
t = [0:(nSamp - 1);] / Fs
x = chirp(t, 50e3, nSamp / Fs, 100e3)
x = x + randn(rng, size(x)) * std(x) / db2mag(SNR)

估计信号的 3 dB 带宽,并在功率谱密度(PSD)图上对其进行注释。

powerbw(x, Fs; plotfig=true)
powerbw(x, Fs)[1] = 
    1×1 Matrix{Float64}:
    44385.61729599802

生成另一个线性调频信号。指定 200 kHz 的初始频率、300 kHz 的最终频率以及第一个信号的两倍振幅。添加高斯白噪声。

x2 = 2 * chirp(t, 200e3, nSamp / Fs, 300e3)
x2 = x2 + randn(rng, size(x2)) * std(x2) / db2mag(SNR)

连接线性调频信号以产生双通道信号。估计每个信道的 3 dB 带宽。在 PSD 图上标注两个通道的 3 dB 带宽。

figure()
y, = powerbw([x x2], Fs; plotfig=true)
y = 
    1×2 Matrix{Float64}:
    44385.6  92207.6

将两个通道相加以形成新的信号。绘制 PSD 并注释 3 dB 带宽。

figure()
powerbw(x .+ x2, Fs; plotfig=true)
powerbw(x .+ x2, Fs)[1] = 
    1×1 Matrix{Float64}:
    92242.99562399543
正弦的 3 dB 带宽

生成以 1024 kHz 采样的 100.123 kHz 正弦曲线的 1024 个样本。添加高斯白噪声,使得信噪比为 40dB。重置随机数生成器以获得可重复的结果。

using TyControlSystems
using TyMath
using TySignalProcessing
using TyPlot
nSamp = 1024
Fs = 1024e3
SNR = 40
rng = MT19937ar(5489)

t = (0:(nSamp - 1)) / Fs

x = sin.(2 * pi * t * 100.123e3)
x = x .+ randn(rng, size(x)) * std(x) / db2mag(SNR)

使用周期图函数来计算信号的功率谱密度(PSD)。指定一个长度与信号相同、形状因子为 38 的 Kaiser 窗口。估计信号的 3 dB 带宽,并在 PSD 的图上对其进行注释。

Pxx, f = periodogram(x, kaiser(nSamp, 38), [], Fs; nargout=2)

powerbw(Pxx, f; plotfig=true)

生成另一个正弦曲线,该正弦曲线的频率为 257.321 kHz,振幅是第一个正弦曲线的两倍。添加白噪声。

x2 = 2 * sin.(2 * pi * t * 257.321e3)
x2 = x2 .+ randn(rng, size(x2)) * std(x2) / db2mag(SNR)

连接正弦曲线以产生双通道信号。估计每个信道的 PSD,并使用结果来确定 3 dB 带宽。

Pyy, f = periodogram([x x2], kaiser(nSamp, 38), [], Fs; nargout=2)

y, = powerbw(Pyy, f)
y = 
    1×2 Matrix{Float64}:
    3175.34  3301.51

在PSD图上标注两个通道的 3 dB 带宽。

figure()
powerbw(Pyy, f; plotfig=true)

将两个通道相加以形成新的信号。估计 PSD 并注释 3 dB 带宽。

Pzz, f = periodogram(x + x2, kaiser(nSamp, 38), [], Fs; nargout=2)
figure()
powerbw(Pzz, f; plotfig=true)
带限信号带宽

生成一个信号,其 PSD 类似于 88 阶带通 FIR 滤波器的频率响应,归一化截止频率分别为 0.25π rad/sample 和 0.45π rad/sample。

using TySignalProcessing
using TyPlot
using TyBase
d = fir1(88, [0.25 0.45])

计算信号的 3 dB 占用带宽。指定 0.2π rad/sample 和 0.6π rad/sample 之间频带的平均功率作为参考电平。绘制 PSD 并注释带宽。

powerbw(d, [], [0.2, 0.6] * pi, 3; plotfig=true)

输出被占用的带宽、其下限和上限以及被占用的频带功率。指定 2π 的采样率相当于未设置采样率。

bw, flo, fhi, power = powerbw(d, 2 * pi, [0.2 0.6] * pi);

fprintf("bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n", [bw flo fhi] / pi)
bw = 0.200*pi, flo = 0.250*pi, fhi = 0.450*pi
fprintf("power = %.1f%% of total", power / bandpower(d) * 100)
power = 96.9% of total

添加第二个通道,其归一化截止频率为 0.5π rad/sample 和 0.8π rad/sample,振幅为第一个通道的十分之一。

d = [d fir1(88, [0.5 0.8]) / 10]

计算双通道信号的 6dB 带宽。指定频谱的最大功率电平作为参考电平。

figure()
powerbw(d, [], [], 6; plotfig=true)

输出每个通道的 6dB 带宽以及下限和上限。

bw, flo, fhi = powerbw(d, [], [], 6)
bds = [bw; flo; fhi]

fprintf("One: bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n", bds[:, 1] / pi)
One: bw = 0.198*pi, flo = 0.252*pi, fhi = 0.450*pi 
fprintf("Two: bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n", bds[:, 2] / pi)
Two: bw = 0.294*pi, flo = 0.503*pi, fhi = 0.797*pi 

# 输入参数

x - 输入信号
向量 | 矩阵

输入信号,指定为向量或矩阵。如果 x 是一个向量,则将其视为单个通道。如果 x 是一个矩阵,那么 powerbw 独立地计算每列的功率带宽。x 必须是有限值的。

示例: cos.(pi ./ 4 .* (0 : 159)) .+ randn(160) 是单通道行向量信号。

示例: cos.(pi ./ [4 2] .* (0 : 159)) .+ randn(160, 2) 是一个双通道信号。

fs - 采样率
正实标量

采样率,指定为正实数标量。采样率是指每单位时间的采样数。如果时间以秒为单位测量,则采样率以赫兹为单位。

pxx - 功率谱密度
向量 | 矩阵

功率谱密度(PSD),指定为具有实非负元素的向量或矩阵。如果 pxx 是单侧估计,那么它必须对应于真实信号。如果 pxx 是一个矩阵,那么 powerbw 独立地计算 pxx 的每列的带宽。

功率谱密度必须以线性单位表示,而不是以分贝表示。使用 db2pow 将分贝值转换为功率值。

示例: pxx, f = periodogram(cos.(pi./[4 2].*(0:159)).+randn(160,2);nargout=2) 指定了以 2πHz 采样的有噪声双通道正弦曲线的周期图 PSD 估计及其计算频率。

f - 频率
向量

频率,指定为向量。如果 f 的第一个元素是 0,那么 powerbw 假设该频谱是真实信号的单边频谱。换言之,该函数在寻找 3 dB 点时将零频率仓中的功率值加倍。

sxx - 功率谱估计
向量 | 矩阵

功率谱估计,指定为具有实非负元素的向量或矩阵。如果 sxx 是一个矩阵,那么 powerbw 独立地计算 sxx 的每列的带宽。

功率谱必须以线性单位表示,而不是以分贝表示。使用 db2pow 将分贝值转换为功率值。

示例: sxx, w = periodogram(cos.(pi./[4 2].*(0:159)).+randn(160,2),"power";nargout=2) 指定嵌入高斯白噪声中的双通道正弦曲线的周期图功率谱估计值及其计算时的归一化频率。

rbw - 分辨率带宽
正标量

分辨率带宽,指定为正标量。分辨率带宽是两个值的乘积:离散傅立叶变换的频率分辨率和用于计算 PSD 的窗口的等效噪声带宽。

freqlims - 频率限制
二元向量

频率限制,指定为实值的二元向量。如果指定 freklims,则参考电平是参考频带中的平均功率电平。如果您没有指定频率限制,那么参考电平就是频谱的最大功率电平。频率限制必须位于目标频带内。

r - 功率电平下降
10lg2(默认值)| 正实数标量

功率电平下降,指定为以 dB 表示的正实数标量。

# 输出参数

bw - 功率带宽
标量 | 向量

功率带宽,指定为标量或向量。

  • 如果指定采样率,那么 bw 的单位与 fs 相同。
  • 如果未指定采样率,则 bw 的单位为 rad/sample。
flo, fhi - 带宽频率界限
标量 | 向量

带宽频率界限,以标量或向量形式返回。

power - 存储在带宽中的功率
标量 | 向量

存储在带宽中的功率,以标量或向量形式返回。

# 算法

为了确定 3 dB 带宽,powerbw 使用矩形窗口计算周期图功率谱估计,并将估计的最大值作为参考电平。带宽是频谱比参考电平下降至少 3 dB 的点之间的频率差。如果信号在下降 3 dB之前到达其端点之一,则 powerbw 使用该端点来计算差值。

# 另请参阅

bandpower | obw | periodogram | pwelch