MATLAB 帮助中心
信噪比
r = snr(xi,y)
r = snr(x)
r = snr(x,fs)
r = snr(x,fs,n)
r = snr(pxx,f,"psd")
r = snr(pxx,f,n,"psd")
r = snr(sxx,f,rbw,"power")
r = snr(sxx,f,rbw,n,"power")
r = snr(___,"aliased")
[r,noisepow] = snr(___)
snr(___)
r = snr(xi,y) 通过计算信号 xi 的幅值平方和与噪声 y 之比,返回以 dB 为单位的信噪比 (SNR):
r
xi
y
r = mag2db(rssq(xi(:))/rssq(y(:))).
r = mag2db(rssq(xi(:))/rssq(y(:)))
mag2db
rssq
y 必须具有与 xi 相同的维度。如果输入信号不一定是正弦信号,并且您有噪声的估计值,请使用这种形式。
示例
r = snr(x) 返回相对于实数值正弦输入信号 x 的载波 (dBc) 的 SNR(以 dB 为单位)。snr 使用与 x 长度相同的修正周期图确定 SNR。修正周期图使用 β = 38 的凯塞窗。计算结果时将排除前六个谐波的功率,但包括基频。
x
snr
r = snr(x,fs) 返回以速率 fs 采样的实数值正弦输入信号 x 的 SNR(以 dBc 为单位)。
fs
r = snr(x,fs,n) 通过排除前 n 个谐波(包括基波)的功率来返回 r。
n
r = snr(pxx,f,"psd") 将输入 pxx 指定为单边功率谱密度 (PSD) 估计值。参量 f 是生成 pxx 估计值时的频率的向量。计算噪声时将排除前六个谐波的功率,但包括基频。
pxx
f
r = snr(pxx,f,n,"psd") 指定计算 SNR 时要排除的谐波数量 n。n 的默认值为 6 且包括基频。
r = snr(sxx,f,rbw,"power") 将输入 sxx 指定为实信号的单边功率谱。输入 rbw 是对每个功率估计值进行积分的分辨率带宽。
sxx
rbw
r = snr(sxx,f,rbw,n,"power") 指定计算 SNR 时要排除的谐波数量 n。n 的默认值为 6 且包括基频。
r = snr(___,"aliased") 会去除基频中混叠到奈奎斯特范围内的谐波。当正弦输入信号欠采样时,请使用此选项。如果您未指定此选项,或将其设置为 "omitaliases",则该函数会将基频中超出奈奎斯特范围的任何谐波视为噪声。
"omitaliases"
[r,noisepow] = snr(___) 还返回信号非谐波分量的总噪声功率。
noisepow
不带输出参量的 snr(___) 用于在当前图窗窗口中绘制信号的频谱并标注其主要特征。它使用不同颜色来绘制基本分量、DC 值和谐波以及噪声。SNR 出现在图的上方。此功能适用于上面列出的所有语法,但 snr(xi,y) 除外。
snr(xi,y)
全部折叠
生成一个 20 毫秒的矩形脉冲,采样率为 10 kHz,采样时间为 2 秒。
Tpulse = 20e-3; Fs = 10e3; t = -1:1/Fs:1; x = rectpuls(t,Tpulse);
将该脉冲嵌入高斯白噪声中,使得信噪比 (SNR) 为 53 dB。重置随机数生成器以获得可重现的结果。
rng default SNR = 53; y = randn(size(x))*std(x)/db2mag(SNR); s = x + y;
使用 snr 函数计算含噪信号的 SNR。
pulseSNR = snr(x,y)
pulseSNR = 53.1255
计算并比较信号的信噪比 (SNR)、总谐波失真 (THD) 以及信号的信噪失真比 (SINAD)。
创建以 48 kHz 频率采样的正弦信号。该信号包含频率为 1 kHz 的基频,其振幅为单位振幅。此外,它还包含 2/5 振幅的 2 kHz 谐波和方差为 0.1² 的加性噪声。
fs = 48e3; t = 0:1/fs:1-1/fs; A = 1.0; powfund = A^2/2; a = 0.4; powharm = a^2/2; s = 0.1; varnoise = s^2; x = A*cos(2*pi*1000*t) + ... a*sin(2*pi*2000*t) + s*randn(size(t));
验证 SNR、THD 和 SINAD 是否符合其定义。
SNR = snr(x); defSNR = 10*log10(powfund/varnoise); SN = [SNR defSNR]
SN = 1×2 17.0178 16.9897
THD = thd(x); defTHD = 10*log10(powharm/powfund); TH = [THD defTHD]
TH = 1×2 -7.9546 -7.9588
SINAD = sinad(x); defSINAD = 10*log10(powfund/(powharm+varnoise)); SI = [SINAD defSINAD]
SI = 1×2 7.4571 7.4473
计算以 48 kHz 频率采样的 2.5 kHz 正弦波的 SNR。添加方差为 0.001² 的白噪声。默认情况下,snr 排除最低 6 个谐波(包括基波)中包含的功率。
Fi = 2500; Fs = 48e3; N = 1024; x = sin(2*pi*Fi/Fs*(1:N)) + 0.001*randn(1,N); SNR = snr(x,Fs)
SNR = 57.7103
绘制频谱并对 SNR 进行注解。排除最低 3 个谐波(包括基波)中包含的功率。
snr(x,Fs,3);
获取以 48 kHz 频率采样的 2.5 kHz 正弦波的周期图功率谱密度 (PSD) 估计值。添加标准差为 0.00001 的白噪声。使用此值作为输入来确定 SNR。采用随机数生成器的默认设置,以获得可重现的结果。
rng default Fi = 2500; Fs = 48e3; N = 1024; x = sin(2*pi*Fi/Fs*(1:N)) + 0.00001*randn(1,N); w = kaiser(numel(x),38); [Pxx, F] = periodogram(x,w,numel(x),Fs); SNR = snr(Pxx,F,'psd')
SNR = 97.7446
使用功率谱,计算以 48 kHz 频率采样并嵌入在标准差为 0.00001 的白噪声中的 2.5 kHz 正弦波的 SNR。重置随机数生成器以获得可重现的结果。
rng default Fi = 2500; Fs = 48e3; N = 1024; x = sin(2*pi*Fi/Fs*(1:N)) + 0.00001*randn(1,N); w = kaiser(numel(x),38); [Sxx, F] = periodogram(x,w,numel(x),Fs,'power'); rbw = enbw(w,Fs); SNR = snr(Sxx,F,rbw,'power')
绘制信号的频谱并对 SNR 进行注解。
snr(Sxx,F,rbw,'power');
以 2.1 kHz 频率分量作为输入,生成一个类似弱非线性放大器输出的信号。此信号以 10 kHz 频率采样,采样时间为 1 秒。计算并绘制该信号的功率谱。使用 β = 38 的凯塞窗进行计算。
Fs = 10000; f = 2100; t = 0:1/Fs:1; x = tanh(sin(2*pi*f*t)+0.1) + 0.001*randn(1,length(t)); periodogram(x,kaiser(length(x),38),[],Fs,'power')
谐波在 4.2 kHz、6.3 kHz、8.4 kHz、10.5 kHz、12.6 kHz 和 14.7 kHz 的频率下明显区别于噪声。除第一个频率外,所有频率都大于奈奎斯特频率。谐波分别混叠到 3.7 kHz、1.6 kHz、0.5 kHz、2.6 kHz 和 4.7 kHz 的位置。
计算信号的信噪比。默认情况下,snr 将混叠谐波视为噪声的一部分。
snr(x,Fs,7);
重复该计算,但现在将混叠谐波视为信号的一部分。
snr(x,Fs,7,'aliased');
创建以 48 kHz 频率采样的正弦信号。该信号包含频率为 1 kHz 的基频,其振幅为单位振幅。此外,它还包含半振幅的 2 kHz 谐波和方差为 0.1² 的加性噪声。
计算信号中的噪声功率。验证它是否符合定义。
[SNR,npow] = snr(x,fs); compare = [10*log10(powfund)-npow SNR]
compare = 1×2 17.0281 17.0178
生成以 50 kHz 频率采样的 2.5 kHz 正弦波。重置随机数生成器。将标准差为 0.00005 的高斯白噪声添加到信号中。使结果通过弱非线性放大器。绘制 SNR。
rng default fs = 5e4; f0 = 2.5e3; N = 1024; t = (0:N-1)/fs; ct = cos(2*pi*f0*t); cd = ct + 0.00005*randn(size(ct)); amp = [1e-5 5e-6 -1e-3 6e-5 1 25e-3]; sgn = polyval(amp,cd); snr(sgn,fs);
噪声测量中不包括 DC 分量和所有谐波(包括基频)。标注基频和谐波。
输入信号,指定为向量、矩阵或 N 维数组。
数据类型: double | single 复数支持: 是
double
single
输入信号中噪声的估计值,指定为向量、矩阵或与 xi 维度相同的 N 维数组。
实数值正弦输入信号,指定为行向量或列向量。
数据类型: double | single
采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率的单位是赫兹。
要从 SNR 计算中排除的谐波数量,指定为正整数标量。n 的默认值为 6。
单边功率谱密度估计值,指定为实数值非负列向量。
功率谱密度必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。
db2pow
示例: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) 指定以 2π Hz 频率采样的含噪双通道正弦波的周期图 PSD 估计值及计算估计值时的频率。
[pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2))
单边 PSD 估计值 pxx 的周期性频率,指定为行向量或列向量。f 的第一个元素必须为 0。
功率谱,指定为实数值非负行向量或列向量。
功率谱必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。
示例: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power") 指定在高斯白噪声中嵌入的双通道正弦波的周期图功率谱估计值及计算估计值时的归一化频率。
[sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power")
分辨率带宽,指定为正标量。分辨率带宽是离散傅里叶变换的频率分辨率和窗的等效噪声带宽的乘积。
信噪比,以相对于载波 (dBc) 的实数值标量(以分贝为单位)形式返回。如果输入信号不是正弦信号,则 SNR 以分贝 (dB) 为单位返回。
输入信号的非谐波分量的总噪声功率,以实数值标量形式返回。
函数 thd、sfdr、sinad 和 snr 用于测量由正弦波激励的弱非线性系统的响应。
thd
sfdr
sinad
当提供时域输入时,snr 使用带有大旁瓣衰减的凯塞窗执行周期图。为了找到基频,该算法会在周期图中搜索最大的非零频谱分量。然后,它会计算所有相邻箱的中心矩,这些箱从最大值单调递减。为了可被检测到,基频应至少位于第二个频率箱中。高阶谐波是基频的整数倍。如果一个谐波位于另一个谐波邻域中的单调递减区域内,则我们认为其功率属于较大的谐波。此较大的谐波不一定是基频。
该函数使用仅含噪区域中的中位数功率来估计噪声电平。计算中不包括 DC 分量。每个点处的噪声是该点的估计电平或纵坐标,以较小者为准。该噪声随后将从信号和谐波值中减去。
如果基频不是信号中最高的频谱分量,则 snr 会失败。
请确保频率分量相距甚远,足以适应凯塞窗的旁瓣宽度。如果这种情况不可行,您可以使用 "power" 标志,并使用不同的窗计算周期图。
"power"
全部展开
用法说明和限制:
如果 x 和 y 在编译时是复数,则其大小在编译时必须为常量。
请参阅“C/C++ 代码生成”部分中的用法说明和限制。同样的用法说明和限制也适用于 GPU 代码生成。
backgroundPool
ThreadPool
snr 函数支持基于线程的环境,但存在以下用法说明和限制:
不支持不带输出参量的语法。
有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
此函数完全支持 GPU 数组。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
您可以在基于线程的环境中使用 snr。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
gpuArray
snr 函数支持 gpuArray 对象。您必须有 Parallel Computing Toolbox™ 才能使用此功能。
sfdr | sinad | thd | toi
toi
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处