Main Content

snr

신호 대 잡음비

설명

예제

r = snr(xi,y)는 신호 xi의 제곱 크기 합과 잡음 y의 제곱 크기 합의 비율을 계산하여 SNR(신호 대 잡음비)을 데시벨 단위로 반환합니다.

r = mag2db(rssq(xi(:))/rssq(y(:))).

yxi와 차원이 같아야 합니다. 입력 신호가 반드시 정현파이지 않으며 잡음에 대한 추정값을 가지고 있는 경우 이 형식을 사용하십시오.

예제

r = snr(x)는 실수 값 정현파 입력 신호 x의 SNR을 dBc(반송파 기준 데시벨) 단위로 반환합니다. SNR은 입력값과 같은 길이의 수정된 주기도를 사용하여 결정됩니다. 수정된 주기도는 β = 38인 카이저 윈도우를 사용합니다. 이 결과에서는 기본주파수(Fundamental)를 포함하여 처음 6개 고조파(Harmonic)의 전력이 제외됩니다.

예제

r = snr(x,fs,n)은 레이트 fs로 샘플링된 실수 정현파 입력 신호 x에 대한 SNR을 dBc 단위로 반환합니다. 계산 시, 기본주파수를 포함하여 가장 낮은 n개 고조파에 포함된 전력이 제외됩니다.

예제

r = snr(pxx,f,"psd")는 입력값 pxx를 단측 파워 스펙트럼 밀도(PSD) 추정값으로 지정합니다. 인수 fpxx의 추정값이 나타나는 주파수의 벡터입니다. 잡음 계산 시 기본주파수를 포함하여 처음 6개 고조파의 전력이 제외됩니다.

r = snr(pxx,f,n,"psd")는 SNR을 계산할 때 제외할 고조파 수 n을 지정합니다. n의 디폴트 값은 6이고 이 중에 기본주파수가 포함됩니다.

예제

r = snr(sxx,f,rbw,"power")는 입력값 sxx를 실수 신호의 단측 파워 스펙트럼으로 지정합니다. 입력값 rbw는 각 전력 추정값이 적분되는 분해능 대역폭(Resolution Bandwidth)입니다.

r = snr(sxx,f,rbw,n,"power")는 SNR을 계산할 때 제외할 고조파 수 n을 지정합니다. n의 디폴트 값은 6이고 이 중에 기본주파수가 포함됩니다.

예제

r = snr(___,"aliased")는 나이퀴스트 범위로 에일리어싱된 기본주파수의 고조파를 제거합니다. 정현파 입력 신호가 언더샘플링된 경우 이 옵션을 사용하십시오. 이 옵션을 지정하지 않거나 "omitaliases"로 설정하면 이 함수는 나이퀴스트 범위를 벗어난 기본주파수의 고조파를 모두 잡음으로 처리합니다.

예제

[r,noisepow] = snr(___)은 신호에서 고조파가 아닌 성분의 총 잡음 파워도 반환합니다.

예제

snr(___)(출력 인수 없음)은 현재 Figure 창에 신호의 스펙트럼을 플로팅하고 각 주요 특징을 레이블로 표시합니다. 각각 다른 색을 사용하여 기본주파수 성분(Fundamental), DC 값과 고조파(DC and Harmonics), 잡음(Noise)을 그립니다. SNR은 이 플롯 위에 표시됩니다. 이 구문 형식은 snr(x,y)를 제외하고 위에 나열된 모든 구문에 사용할 수 있습니다.

예제

모두 축소

10kHz로 2초 동안 샘플링된 20밀리초 사각 펄스를 생성합니다.

Tpulse = 20e-3;
Fs = 10e3;
t = -1:1/Fs:1;
x = rectpuls(t,Tpulse);

신호 대 잡음비(SNR)가 53dB이 되도록 펄스에 백색 가우스 잡음을 포함시킵니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다.

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)를 계산하고 비교합니다.

48kHz로 샘플링된 정현파 신호를 생성합니다. 신호는 기본주파수 1kHz와 단위 진폭을 가집니다. 이 신호에 진폭이 절반인 2kHz 고조파와 분산이 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

48kHz로 샘플링된 2.5kHz 정현파의 SNR을 계산합니다. 분산이 0.001²인 백색 잡음을 추가합니다.

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에 대한 주석을 표시합니다.

snr(x,Fs);

Figure contains an axes object. The axes object with title SNR: 57.71 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

48kHz로 샘플링된 2.5kHz 정현파의 주기도 파워 스펙트럼 밀도(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

48kHz로 샘플링되고 표준편차가 0.00001인 백색 잡음이 포함된 2.5kHz 정현파의 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 = 97.7446

신호의 스펙트럼을 플로팅하고 SNR에 대한 주석을 표시합니다.

snr(Sxx,F,rbw,'power');

Figure contains an axes object. The axes object with title SNR: 97.74 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

2.1kHz 톤을 입력값으로 사용하는 약한 비선형 증폭기(Weakly Nonlinear Amplifier)의 출력과 유사한 신호를 생성합니다. 이 신호는 10kHz로 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')

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

고조파는 4.2kHz, 6.3kHz, 8.4kHz, 10.5kHz, 12.6kHz, 14.7kHz 주파수의 잡음에서 두드러집니다. 첫 번째 주파수를 제외한 모든 주파수가 나이퀴스트 주파수보다 큽니다. 고조파는 각각 3.7kHz, 1.6kHz, 0.5kHz, 2.6kHz, 4.7kHz로 에일리어싱됩니다.

신호의 신호 대 잡음비를 계산합니다. 기본적으로, snr은 에일리어싱된 고조파를 잡음의 일부로 처리합니다.

snr(x,Fs,7);

Figure contains an axes object. The axes object with title SNR: 23.62 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 14 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

계산을 반복하되, 이번에는 에일리어싱된 고조파를 신호의 일부로 처리합니다.

snr(x,Fs,7,'aliased');

Figure contains an axes object. The axes object with title SNR: 55.23 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 19 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

48kHz로 샘플링된 정현파 신호를 생성합니다. 신호는 기본주파수 1kHz와 단위 진폭을 가집니다. 이 신호에 진폭이 절반인 2kHz 고조파와 분산이 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,npow] = snr(x,fs);
compare = [10*log10(powfund)-npow SNR]
compare = 1×2

   17.0281   17.0178

50kHz로 샘플링된 주파수 2.5kHz의 정현파를 생성합니다. 난수 생성기를 재설정합니다. 표준편차가 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);

Figure contains an axes object. The axes object with title SNR: 83.80 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

기본주파수를 포함하여 DC 성분과 모든 고조파가 잡음 측정에서 제외됩니다. 기본주파수와 고조파에 레이블이 표시됩니다.

입력 인수

모두 축소

입력 신호로, 벡터, 행렬 또는 N차원 배열로 지정됩니다.

데이터형: double | single
복소수 지원 여부:

입력 신호의 잡음 추정값으로, 벡터, 행렬 또는 xi와 동일한 차원을 가진 N차원 배열로 지정됩니다.

데이터형: double | single
복소수 지원 여부:

실수 값을 갖는 정현파 입력 신호로, 행 벡터나 열 벡터로 지정됩니다.

데이터형: double | single

샘플 레이트로, 양의 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간 단위가 초이면 샘플 레이트는 헤르츠(Hz)를 단위로 사용합니다.

데이터형: double | single

SNR 계산에서 제외시킬 고조파 수로, 양의 정수 스칼라로 지정됩니다. n의 디폴트 값은 6입니다.

단측 파워 스펙트럼 밀도(PSD) 추정값으로, 음이 아닌 실수 값 열 벡터로 지정됩니다.

파워 스펙트럼 밀도는 데시벨이 아닌 선형 단위로 표현해야 합니다. db2pow를 사용하여 데시벨 값을 전력 값으로 변환합니다.

예: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2))는 2π Hz로 샘플링되고 잡음이 있는 2채널 정현파의 주기도 PSD 추정값과 이 추정값이 계산된 주파수를 지정합니다.

데이터형: double | single

단측 PSD 추정값 pxx의 주기적 주파수로, 행 벡터나 열 벡터로 지정됩니다. f의 첫 번째 요소는 0이어야 합니다.

데이터형: double | single

파워 스펙트럼으로, 음이 아닌 실수 값 행 벡터나 열 벡터로 지정됩니다.

파워 스펙트럼은 데시벨이 아닌 선형 단위로 표현해야 합니다. db2pow를 사용하여 데시벨 값을 전력 값으로 변환합니다.

예: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power")는 백색 가우스 잡음에 묻힌 2채널 정현파의 주기도 파워 스펙트럼 추정값과 이 추정값이 계산된 정규화 주파수를 지정합니다.

데이터형: double | single

분해능 대역폭(Resolution Bandwidth)으로, 양의 스칼라로 지정됩니다. 분해능 대역폭은 이산 푸리에 변환의 주파수 분해능과 윈도우의 등가 잡음 대역폭의 곱입니다.

데이터형: double | single

출력 인수

모두 축소

신호 대 잡음비로, dBc 단위로 표현되는 실수 값 스칼라로 반환됩니다. SNR은 입력 신호가 정현파가 아닌 경우 데시벨(dB)로 반환됩니다.

데이터형: double | single

입력 신호에서 고조파가 아닌 성분의 총 잡음 전력으로, 실수 값 스칼라로 반환됩니다.

데이터형: double | single

세부 정보

모두 축소

왜곡 측정 함수

함수 thd, sfdr, sinad, snr은 정현파를 인가한 약한 비선형 시스템(Weakly Nonlinear System)의 응답을 측정합니다.

시간 영역 입력값이 주어지면 snr는 사이드로브 감쇠량이 큰 카이저 윈도우를 사용하여 주기도를 계산합니다. 기본주파수를 구하기 위해 이 알고리즘은 주기도에서 0이 아닌 가장 큰 스펙트럼 성분을 찾습니다. 그런 다음, 최댓값에서 단조 감소하며 멀어지는 모든 인접 Bin의 중심 모멘트를 계산합니다. 검출이 가능하려면 기본주파수가 적어도 두 번째 주파수 Bin에 포함되어야 합니다. 더 높은 고조파는 기본주파수의 정수 배에 놓여 있습니다. 고조파가 다른 고조파 근방에 있는 단조 감소 영역에 있는 경우 그 전력은 큰 고조파에 속하는 것으로 간주됩니다. 큰 고조파는 기본주파수일 수도 있고 기본주파수가 아닐 수도 있습니다.

이 함수는 잡음만 포함하는 영역의 전력 중앙값을 사용하여 잡음 수준을 추정합니다. DC 성분은 계산에서 제외됩니다. 각 지점의 잡음은 그 지점에서 예상되는 수준과 그 지점의 세로 좌표 중 더 작은 값으로 지정됩니다. 이 잡음이 신호와 고조파의 값으로부터 감산됩니다.

기본주파수가 신호에서 가장 높은 스펙트럼 성분이 아닐 경우 snr이 실패합니다.

주파수 성분이 카이저 윈도우의 사이드로브 폭을 수용할 만큼 충분히 떨어져 있는지 확인하십시오. 그렇지 않을 경우 "power" 플래그를 사용하고 다른 윈도우로 주기도를 계산할 수 있습니다.

확장 기능

버전 내역

R2013b에 개발됨

모두 확장

참고 항목

| | |