AnyMath 文档

辛纳德

信号与噪声和失真之和的比值。

库::`工程师`

语法

函数调用

  • [参数:r]=sinad(<参数:x>>) -返回信号与噪声和失真之和(信噪比和失真比,SINAD)的比率,单位为dBn,用于真实的正弦信号 [参数:x]. 使用与输入信号相同长度的经修改的周期图确定SINAD。 修改后的周期图使用Kaiser窗口与 .

  • [参数:r]=sinad(<参数:sxx>>,<参数:f>>,<参数:rbw>>,"功率") -将输入信号定义为单向功率谱。 论点 [参数:rbw] -其中每个功率估计被积分的分辨率带。

  • 辛纳德(___,out=:plot) -在当前图形窗口中绘制信号的频谱并标记其主要成分。 主分量、常数分量的值和噪声以不同的颜色显示。 SINAD值显示在图形上方。

争论

输入参数

# *x*是 一个真实的正弦输入信号

+ 向量资料

Details

指定为行向量或列向量的真实正弦输入信号。

数据类型

漂浮物32, 漂浮64</无翻译>

# 财政司司长 — 抽样调查 费率+ 正标量

Details

的采样率,设置为正标量。 采样率是单位时间内的样本数。 如果时间单位是秒,那么采样频率以Hz为单位测量。

# pxx — 单边评估SPM

+ 向量资料

Details

SPM的单侧估计,作为实非负列向量给出。

功率谱密度应以线性单位表示,而不是以分贝表示。

数据类型

漂浮物32, 漂浮64</无翻译>

# f — 循环频率

+ 向量资料

Details

与单侧SPM评估相对应的循环频率 [参数:pxx],指定为行向量或列向量。 第一个元素 f 必须等于 0.

数据类型

漂浮64, 漂浮物32</无翻译>

# sxx — 功率谱

+ 非负实向量是行或列向量

Details

的功率谱,定义为实行向量或列向量。

功率谱应以线性单位表示,而不是以分贝表示。

# rbw — 分辨率波段

+ 正标量

Details

的分辨率带,设置为正标量。 分辨率带是离散傅立叶变换的频率分辨率与窗口的等效噪声带的乘积。

输出参数

# *r*是 信号与噪声和失真之和的比值

+ 真正的标量

Details

以dBn为单位的信号与噪声和失真之和的比率,作为真实标量返回。

# totdistpow — 信号的噪声和谐波失真的总功率

+ 真正的标量

Details

信号的噪声和谐波失真的总功率,作为真实标量返回,以dB表示。

例子:

单次谐波或单次谐波加噪声信号的SINAD

Details

让我们创建两个信号。 两个信号都具有基频 带幅度的rad/计数 1 和频率的一次谐波 带幅度的rad/计数 0.025. 其中一个信号另外包含具有方差的加性白高斯噪声 .

让我们设置随机数生成器的默认设置,以获得可重复的结果。 让我们为没有加性噪声的信号定义SINAD,并将结果与理论SINAD进行比较。

import EngeeDSP.Functions: randn, sinad
using Random

n = 0:159
x = cos.(π/4*n) + 0.025 * sin.(π/2*n)

Random.seed!(123)

y = cos.(π/4*n) + 0.025 * sin.(π/2*n) + 0.05 * randn(length(n), 1)
r = sinad(x)
println("r = ", r[1])
r = 32.041199826559314
powfund = 1
powharm = 0.025^2
thSINAD = 10 * log10(powfund / powharm)
println("thSINAD = ", thSINAD)
thSINAD = 32.04119982655924

让我们为具有加性噪声的正弦信号定义SINAD。 我们展示了加性噪声理论方差的包含如何近似SINAD。

r = sinad(y)
println("r = ", r[1])
r = 24.588862275561493
varnoise = 0.05^2
thSINAD = 10 * log10(powfund / (powharm + varnoise))
println("thSINAD = ", thSINAD)
thSINAD = 25.05149978319906

具有采样频率的信号的SINAD

Details

让我们创建一个基频信号 1 kHz和单振幅,以频率采样 480 千赫。 该信号另外包含幅度为 0.02 和具有方差的加性白高斯噪声 .

让我们定义SINAD并将结果与理论SINAD进行比较。

import EngeeDSP.Functions: randn, sinad
using Random

fs = 48e4
t = 0:1/fs:1-1/fs

Random.seed!(123)

x = cos.(2π*1000*t) + 0.02 * sin.(2π*2000*t) + 0.01 * randn(length(t), 1)
r = sinad(x, fs)
println("r = ", r[1])
r = 32.243478303520384
powfund = 1
powharm = 0.02^2
varnoise = 0.01^2
thSINAD = 10 * log10(powfund / (powharm + varnoise * (1 / fs)))
println("thSINAD = ", thSINAD)
thSINAD = 33.97939782477054

放大信号的SINAD

Details

产生频率的正弦 2.5 带采样率的kHz 50 千赫。 将具有标准偏差的高斯白噪声添加到信号中。 0.00005. 让我们通过具有低非线性的放大器传递结果。 让我们绘制SINAD图。

import EngeeDSP.Functions: randn, polyval, sinad

fs = 5e4
f0 = 2.5e3
N = 1024
t = (0:N-1) / fs

ct = cos.(2π*f0*t)
cd_signal = ct + 0.00005 * randn(length(ct),1)

amp = [1e-5 5e-6 -1e-3 6e-5 1 25e-3]
sgn = polyval(amp, cd_signal)

sinad(sgn, fs, out=:plot)

sinad

该图显示了用于计算比率的频谱和被视为噪声的面积。 常数分量和基波谐波的电平被排除在噪声计算之外。 主谐波进行标记。

此外

失真测量功能

Details

功能 sfdr, 辛纳德信噪比 测量由正弦波激励的弱线性系统的响应。

当在时域中设置输入数据时,功能 辛纳德 使用旁瓣衰减较大的Kaiser窗口构建周期图。 为了找到基频,算法在周期图上搜索最大的非零频谱分量。 然后它计算所有相邻区间的中心时刻,随着它们远离最大值而单调递减。 对于检测,主频率必须至少在第二频率范围内。 高次谐波的频率是基频的倍数. 如果一个谐波位于另一个谐波旁边的单调递减区域,则其功率被认为属于较大的谐波。 这个大的谐波可能是也可能不是主要的。

该函数在仅包含噪声和失真的区域中使用中值功率值来估计噪声水平。 常数分量被排除在计算之外。 每个点的噪声由点的计算水平或纵坐标确定,以较低者为准。 然后从信号和谐波的值中减去噪声。

功能 辛纳德 如果基频不是信号的最高频谱分量,则失败。

确保频率分量足够间隔以考虑到Kaiser窗口的旁瓣的宽度。 如果这是不可能的,您可以使用该标志 "权力" 并计算具有不同窗口的周期图。