이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

thd

총 고조파 왜곡

설명

예제

r = thd(x)는 실수 값을 갖는 정현파 신호 x의 총 고조파 왜곡(THD)(단위: dBc)을 반환합니다. 총 고조파 왜곡은 입력 신호와 길이가 같은 수정된 주기도를 사용하여 기본주파수와 처음 5개 고조파를 기준으로 결정됩니다. 수정된 주기도는 β = 38인 카이저 윈도우를 사용합니다.

예제

r = thd(x,fs,n)은 THD 계산에 사용할 샘플 레이트 fs와 고조파 수(기본주파수 포함)를 지정합니다.

r = thd(pxx,f,'psd')는 입력값 pxx를 단측 전력 스펙트럼 밀도(PSD) 추정값으로 지정합니다. fpxx의 PSD 추정값에 대응되는 주파수로 구성된 벡터입니다.

예제

r = thd(pxx,f,n,'psd')는 THD 계산에 사용할 고조파 수(기본주파수 포함)를 지정합니다.

예제

r = thd(sxx,f,rbw,'power')는 입력값을 단측 전력 스펙트럼으로 지정합니다. rbw는 각 전력 추정값이 적분되는 분해능 대역폭입니다.

r = thd(sxx,f,rbw,n,'power')는 THD 계산에 사용할 고조파 수(기본주파수 포함)를 지정합니다.

예제

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

예제

[r,harmpow,harmfreq] = thd(___)는 기본주파수를 포함하여 고조파의 주파수와 전력(단위: dB)을 반환합니다.

예제

thd(___)에 출력 인수를 지정하지 않으면 현재 Figure 창에 신호의 스펙트럼을 플로팅하고 고조파에 대한 주석을 지정합니다. 각각 다른 색을 사용하여 기본주파수 성분, 고조파, DC 수준과 잡음을 그립니다. THD는 플롯 위에 표시됩니다. 기본주파수와 고조파에 레이블이 표시됩니다. DC 항은 측정에서 제외되므로 레이블이 표시되지 않습니다.

예제

모두 축소

이 예제에서는 기본주파수와 두 개의 고조파로 구성된 신호에 대해 총 고조파 왜곡(단위: dBc)을 계산하는 방법을 명시적으로 보여줍니다. 명시적인 계산 결과를 thd에서 반환된 결과와 비교합니다.

1kHz로 샘플링된 신호를 생성합니다. 이 신호는 진폭이 2인 100Hz의 기본주파수 하나와 진폭이 각각 0.01 및 0.005인 200Hz와 300Hz에서의 두 개의 고조파로 구성됩니다. 총 고조파 왜곡을 명시적으로 구하고, thd를 사용하여 다시 구해 봅니다.

t = 0:0.001:1-0.001;
x = 2*cos(2*pi*100*t)+0.01*cos(2*pi*200*t)+0.005*cos(2*pi*300*t);
tharmdist = 10*log10((0.01^2+0.005^2)/2^2)
tharmdist = -45.0515
r = thd(x)
r = -45.0515

1kHz로 샘플링된 신호를 생성합니다. 이 신호는 진폭이 2인 100Hz의 기본주파수 하나와 진폭이 각각 0.01, 0.005, 0.0025인 200Hz, 300Hz, 400Hz에서의 세 개 고조파로 구성됩니다.

고조파 수를 3으로 설정합니다. 이 고조파 수에는 기본주파수가 포함됩니다. 이에 따라 100Hz, 200Hz, 300Hz에서의 전력이 THD 계산에 사용됩니다.

t = 0:0.001:1-0.001;
x = 2*cos(2*pi*100*t)+0.01*cos(2*pi*200*t)+ ...
    0.005*cos(2*pi*300*t)+0.0025*sin(2*pi*400*t);
r = thd(x,1000,3)
r = -45.0515

고조파 수를 3으로 지정하면 THD 계산 시 400Hz에서의 전력이 무시됩니다.

1kHz로 샘플링된 신호를 생성합니다. 이 신호는 진폭이 2인 100Hz의 기본주파수 하나와 진폭이 각각 0.01, 0.005, 0.0025인 200Hz, 300Hz, 400Hz에서의 세 개 고조파로 구성됩니다.

신호에 대한 주기도 PSD 추정값을 구하고 PSD 추정값을 thd에 대한 입력값으로 사용합니다. 고조파 수를 3으로 설정합니다. 이 고조파 수에는 기본주파수가 포함됩니다. 이에 따라 100Hz, 200Hz, 300Hz에서의 전력이 THD 계산에 사용됩니다.

t = 0:0.001:1-0.001;
fs = 1000;
x = 2*cos(2*pi*100*t)+0.01*cos(2*pi*200*t)+ ...
    0.005*cos(2*pi*300*t)+0.0025*sin(2*pi*400*t);
[pxx,f] = periodogram(x,rectwin(length(x)),length(x),fs);
r = thd(pxx,f,3,'psd')
r = -45.0515

해밍 윈도우로 구한 전력 스펙트럼과 윈도우의 분해능 대역폭을 입력값으로 지정하여 THD를 구합니다.

10kHz로 샘플링된 신호를 생성합니다. 이 신호는 진폭이 2인 100Hz의 기본주파수 하나와 진폭이 각각 0.01, 0.005, 0.0025인 300Hz, 500Hz, 700Hz에서의 세 개 홀수 고조파로 구성됩니다. 고조파 수를 7로 지정합니다. THD를 구합니다.

fs = 10000;
t = 0:1/fs:1-1/fs;
x = 2*cos(2*pi*100*t)+0.01*cos(2*pi*300*t)+ ...
    0.005*cos(2*pi*500*t)+0.0025*sin(2*pi*700*t);
[sxx,f] = periodogram(x,hamming(length(x)),length(x),fs,'power');
rbw = enbw(hamming(length(x)),fs);
r = thd(sxx,f,rbw,7,'power')
r = -44.8396

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')

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

신호의 총 고조파 왜곡을 계산합니다. 기본적으로, thd는 에일리어싱된 고조파를 잡음의 일부로 처리합니다.

thd(x,Fs,7);

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

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

10kHz로 샘플링된 신호를 생성합니다. 이 신호는 진폭이 2인 100Hz의 기본주파수 하나와 진폭이 각각 0.01, 0.005, 0.0025인 300Hz, 500Hz, 700Hz에서의 세 개 홀수 고조파로 구성됩니다. 고조파 수를 7로 지정합니다. THD, 고조파의 전력, 이에 대응되는 주파수를 구합니다.

fs = 10000;
t = 0:1/fs:1-1/fs;
x = 2*cos(2*pi*100*t)+0.01*cos(2*pi*300*t)+ ...
    0.005*cos(2*pi*500*t)+0.0025*sin(2*pi*700*t);
[r,harmpow,harmfreq] = thd(x,10000,7);
[harmfreq harmpow]
ans = 7×2

  100.0000    3.0103
  201.0000 -319.7774
  300.0000  -43.0103
  399.0000 -281.8596
  500.0000  -49.0309
  599.0000 -282.0940
  700.0000  -55.0515

짝수 고조파의 전력은 -300dB에 가깝습니다. 이는 10-15의 진폭에 상응하는 수치입니다.

50kHz로 샘플링된 주파수 2.5kHz의 정현파를 생성합니다. 표준편차가 0.00005인 가우스 백색 잡음을 신호에 추가합니다. 약한 비선형 증폭기를 통해 결과를 전달합니다. THD를 플로팅합니다.

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);
thd(sgn,fs);

이 플롯에서는 비율을 계산하는 데 사용된 스펙트럼과 잡음으로 처리되는 영역을 보여줍니다. DC 레벨은 계산에서 제외되었습니다. 기본주파수와 고조파에 레이블이 표시됩니다.

입력 인수

모두 축소

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

예: cos(pi/4*(0:159))+cos(pi/2*(0:159))

데이터형: single | double

샘플 레이트로, 양의 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간 단위가 초이면 샘플 레이트의 단위는 Hz입니다.

고조파 수로, 양의 정수로 지정됩니다.

단측 PSD 추정값으로, 음이 아닌 실수 값을 갖는 열 벡터로 지정됩니다.

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

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

데이터형: single | double

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

데이터형: double | single

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

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

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

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

출력 인수

모두 축소

총 고조파 왜곡(단위: dBc)으로, 실수 스칼라로 반환됩니다.

고조파의 전력으로, 실수 스칼라나 벡터(단위: db)로 반환됩니다. harmpow가 스칼라인지 아니면 벡터인지는 입력 인수 n으로 지정하는 고조파 수에 따라 결정됩니다.

고조파의 주파수로, 음이 아닌 스칼라 또는 벡터로 반환됩니다. harmfreq가 스칼라인지 아니면 벡터인지는 입력 인수 n으로 지정하는 고조파 수에 따라 결정됩니다.

세부 정보

모두 축소

왜곡 측정 함수

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

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

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

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

참고 항목

| | |

R2013b에 개발됨