Main Content

powerbw

설명

bw = powerbw(x)는 입력 신호 x의 3dB(반전력) 대역폭 bw를 반환합니다.

예제

bw = powerbw(x,fs)는 샘플 레이트 fs에 대한 3dB 대역폭을 반환합니다.

예제

bw = powerbw(pxx,f)는 파워 스펙트럼 밀도(PSD) 추정값 pxx의 3dB 대역폭을 반환합니다. 주파수 fpxx의 추정값에 대응됩니다.

bw = powerbw(sxx,f,rbw)는 파워 스펙트럼 추정값 sxx의 3dB 대역폭을 계산합니다. 주파수 fsxx의 추정값에 대응됩니다. 이 함수는 분해능 대역폭 rbw를 사용하여 각 전력 추정값을 적분합니다.

bw = powerbw(___,freqlims,r)은 기준 레벨을 계산하는 주파수 구간을 지정합니다. 이 구문은 위에 열거된 구문에 사용할 수 있습니다. 단, 두 번째 입력 인수가 fs 또는 f여야 합니다. 두 번째 입력값이 빈 값으로 전달될 경우 powerbw 함수는 이를 정규화 주파수로 간주합니다. 이 함수는 스펙트럼이 기준 레벨보다 rdB만큼 떨어지거나 끝점에 도달하는 점들 사이의 주파수 차이를 계산합니다.

예제

[bw,flo,fhi,power] = powerbw(___)는 전력 대역폭의 하한 및 상한과 이 범위 내의 전력도 반환합니다.

powerbw(___)에 출력 인수를 지정하지 않으면 현재 Figure 창에 PSD 또는 파워 스펙트럼을 플로팅하고, 대역폭에 주석을 표시합니다.

예제

모두 축소

1024kHz로 샘플링된 1024개의 처프 샘플을 생성합니다. 처프는 초기 주파수가 50kHz이며 샘플링 끝에서 100kHz에 도달합니다. 신호 대 잡음비가 40dB이 되도록 백색 가우스 잡음을 추가합니다.

nSamp = 1024;
Fs = 1024e3;
SNR = 40;

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

x = chirp(t,50e3,nSamp/Fs,100e3);
x = x + randn(size(x))*std(x)/db2mag(SNR);

신호의 3dB 대역폭을 추정하고 파워 스펙트럼 밀도(PSD) 플롯에서 이 대역폭에 주석을 표시합니다.

powerbw(x,Fs)

Figure contains an axes object. The axes object with title 3-dB Bandwidth: 44.386 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line, patch.

ans = 4.4386e+04

또 다른 처프를 생성합니다. 초기 주파수는 200kHz로, 최종 주파수는 300kHz로, 진폭은 첫 번째 신호의 두 배가 되도록 지정합니다. 백색 가우스 잡음을 추가합니다.

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

처프를 결합하여 2채널 신호를 생성합니다. 각 채널의 3dB 대역폭을 추정합니다.

y = powerbw([x x2],Fs)
y = 1×2
104 ×

    4.4386    9.2208

PSD 플롯에서 두 채널의 3dB 대역폭에 주석을 표시합니다.

powerbw([x x2],Fs);

Figure contains an axes object. The axes object with title 3-dB Bandwidth, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 8 objects of type line, patch.

두 채널을 합해 하나의 새로운 신호를 생성합니다. PSD를 플로팅하고 3dB 대역폭에 주석을 표시합니다.

powerbw(x+x2,Fs)

Figure contains an axes object. The axes object with title 3-dB Bandwidth: 92.243 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line, patch.

ans = 9.2243e+04

1024kHz로 샘플링된 1024개의 100.123kHz 정현파 샘플을 생성합니다. 신호 대 잡음비가 40dB이 되도록 백색 가우스 잡음을 추가합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다.

nSamp = 1024;
Fs = 1024e3;
SNR = 40;
rng default

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

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

periodogram 함수를 사용하여 신호의 파워 스펙트럼 밀도(PSD)를 계산합니다. 신호와 길이가 같고 형태 인자가 38인 카이저 윈도우를 지정합니다. 신호의 3dB 대역폭을 추정하고 PSD 플롯에서 이 대역폭에 주석을 표시합니다.

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

powerbw(Pxx,f);

Figure contains an axes object. The axes object with title 3-dB Bandwidth: 3.175 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line, patch.

또 다른 정현파를 생성합니다. 이번에는 주파수를 257.321kHz로, 진폭을 첫 번째 정현파의 두 배가 되도록 합니다. 백색 가우스 잡음을 추가합니다.

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

정현파를 결합하여 2채널 신호를 생성합니다. 각 채널의 PSD를 추정하고 그 결과를 바탕으로 3dB 대역폭을 결정합니다.

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

y = powerbw(Pyy,f)
y = 1×2
103 ×

    3.1753    3.3015

PSD 플롯에서 두 채널의 3dB 대역폭에 주석을 표시합니다.

powerbw(Pyy,f);

Figure contains an axes object. The axes object with title 3-dB Bandwidth, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 8 objects of type line, patch.

두 채널을 합해 하나의 새로운 신호를 생성합니다. PSD를 추정하고 3dB 대역폭에 주석을 표시합니다.

[Pzz,f] = periodogram(x+x2,kaiser(nSamp,38),[],Fs);

powerbw(Pzz,f);

Figure contains an axes object. The axes object with title 3-dB Bandwidth: 3.302 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line, patch.

PSD가 88차 대역통과 FIR 필터의 주파수 응답과 비슷하고 정규화된 차단 주파수가 0.25π rad/sample, 0.45π rad/sample인 신호를 생성합니다.

d = fir1(88,[0.25 0.45]);

신호의 3dB 점유 대역폭을 계산합니다. 0.2π rad/sample과 0.6π rad/sample 사이 대역의 평균 전력을 기준 레벨로 지정합니다. PSD를 플로팅하고 대역폭에 주석을 표시합니다.

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

Figure contains an axes object. The axes object with title 3 -dB blank Bandwidth: blank 200 . 421 blank times blank pi blank mrad/sample, xlabel Normalized Frequency ( times pi blank mrad/sample), ylabel Power/frequency (dB/(rad/sample)) contains 4 objects of type line, patch.

대역폭, 대역폭의 하한과 상한, 대역 전력을 출력합니다. 샘플 레이트를 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이고 진폭이 첫 번째 채널의 1/10인 두 번째 채널을 추가합니다.

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

2채널 신호의 6dB 대역폭을 계산합니다. 스펙트럼의 최대 전력 레벨을 기준 레벨로 지정합니다.

powerbw(d,[],[],6);

Figure contains an axes object. The axes object with title 6-dB Bandwidth, xlabel Normalized Frequency ( times pi blank mrad/sample), ylabel Power/frequency (dB/(rad/sample)) contains 8 objects of type line, patch.

각 채널의 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가 행렬이면 powerbw 함수는 각 열에 대해 전력 대역폭을 개별적으로 계산합니다. x는 유한한 값이어야 합니다.

예: cos(pi/4*(0:159))+randn(1,160)은 단일채널 행 벡터 신호입니다.

예: cos(pi./[4;2]*(0:159))'+randn(160,2)는 2채널 신호입니다.

데이터형: single | double

샘플 레이트로, 양의 실수형 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간이 초 단위로 측정되는 경우 샘플 레이트는 헤르츠 단위입니다.

데이터형: single | double

파워 스펙트럼 밀도(PSD) 추정값으로, 벡터 또는 행렬로 지정됩니다. pxx가 단측 추정값일 경우 pxx는 실수 신호에 대응해야 합니다. pxx가 행렬일 경우, powerbw 함수는 pxx의 각 열에 대한 대역폭을 개별적으로 계산합니다.

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

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

데이터형: single | double

주파수로, 벡터로 지정됩니다. f의 첫 번째 요소가 0일 경우 powerbw 함수는 스펙트럼이 실수 신호의 단측 스펙트럼이라고 간주합니다. 즉, 함수는 3dB 점을 찾을 때 영주파수 Bin의 전력 값을 두 배로 만듭니다.

데이터형: single | double

파워 스펙트럼 추정값으로, 벡터 또는 행렬로 지정됩니다. sxx가 행렬일 경우, powerbw 함수는 sxx의 각 열에 대한 대역폭을 개별적으로 계산합니다.

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

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

데이터형: single | double

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

데이터형: single | double

주파수 제한으로, 실수 값으로 구성된 요소를 2개 가진 벡터로 지정됩니다. freqlims를 지정하면 기준 레벨은 기준 대역의 평균 전력 레벨이 됩니다. freqlims를 지정하지 않으면 기준 레벨은 스펙트럼의 최대 전력 레벨이 됩니다. freqlims는 목표 대역 내에 있어야 합니다.

데이터형: single | double

전력 레벨 감소량으로, 양의 실수형 스칼라로 지정됩니다(단위: dB).

데이터형: single | double

출력 인수

모두 축소

전력 대역폭으로, 스칼라 또는 벡터로 반환됩니다.

  • 샘플 레이트를 지정하는 경우 bw의 단위는 fs와 동일합니다.

  • 샘플 레이트를 지정하지 않는 경우 bw의 단위는 rad/sample입니다.

대역폭 주파수 범위로, 스칼라로 반환됩니다.

대역폭에 저장된 전력으로, 스칼라 또는 벡터로 반환됩니다.

알고리즘

3dB 대역폭을 결정하기 위해 powerbw는 사각 윈도우를 사용하여 주기도 파워 스펙트럼 추정값을 계산하고 이 추정값의 최댓값을 기준 레벨로 사용합니다. 대역폭은 스펙트럼이 기준 레벨보다 3dB만큼 떨어지는 점들 사이의 주파수 차이입니다. 신호가 3dB만큼 떨어지기 전에 끝점 중 하나에 도달하면 powerbw는 끝점을 사용하여 차이를 계산합니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2015a에 개발됨

모두 확장

참고 항목

| | | |