Main Content

medfreq

설명

예제

freq = medfreq(x)는 시간 영역 신호 x의 파워 스펙트럼에 대해 정규화된 중앙 주파수 freq를 추정합니다. medfreq 함수는 파워 스펙트럼을 계산하기 위해 periodogram 함수를 사용하며 여기에 사각 윈도우 및 x 길이와 동일한 개수의 DFT 점을 사용합니다.

예제

freq = medfreq(x,fs)는 샘플 레이트 fs에 대한 중앙 주파수를 추정합니다.

예제

freq = medfreq(pxx,f)는 파워 스펙트럼 밀도(PSD) 추정값 pxx의 중앙 주파수를 반환합니다. 주파수 fpxx의 추정값에 대응됩니다.

freq = medfreq(sxx,f,rbw)는 분해능 대역폭 rbw를 갖는 파워 스펙트럼 추정값 sxx의 중앙 주파수를 반환합니다.

예제

freq = medfreq(___,freqrange)는 중앙 주파수를 계산하는 주파수 구간을 지정합니다. 이 구문은 위에 열거된 구문에 사용할 수 있습니다. 단, 두 번째 입력 인수가 fs 또는 f여야 합니다. 두 번째 입력값이 빈 값으로 전달될 경우 medfreq 함수는 이를 정규화 주파수로 간주합니다. freqrange의 디폴트 값은 입력 신호의 전체 대역폭입니다.

예제

[freq,power] = medfreq(___)는 스펙트럼의 대역 전력 power도 반환합니다. freqrange를 지정할 경우, power에는 freqrange 내의 대역 전력이 포함됩니다.

예제

medfreq(___)에 출력 인수를 지정하지 않으면 PSD 또는 파워 스펙트럼을 플로팅하고, 중앙 주파수에 주석을 표시합니다.

예제

모두 축소

1024kHz로 샘플링된 1024개의 처프 샘플을 생성합니다. 초기 주파수가 50kHz이고 샘플링 끝에서 100kHz에 도달하도록 처프를 지정합니다. 신호 대 잡음비가 40dB이 되도록 백색 가우스 잡음을 추가합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다.

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

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

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

처프의 중앙 주파수를 추정합니다. 파워 스펙트럼 밀도(PSD)를 플로팅하고 중앙 주파수에 주석을 표시합니다.

medfreq(x,Fs)

Figure contains an axes object. The axes object with title Median Frequency Estimate: 74.998 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line.

ans = 7.4998e+04

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

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

처프를 결합하여 2채널 신호를 생성합니다. 각 채널의 중앙 주파수를 추정합니다.

y = medfreq([x x2],Fs)
y = 1×2
105 ×

    0.7500    2.4999

두 채널의 PSD를 플로팅하고 중앙 주파수에 주석을 표시합니다.

medfreq([x x2],Fs);

Figure contains an axes object. The axes object with title Median Frequency Estimate, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line.

두 채널을 합해 하나의 새로운 신호를 생성합니다. PSD를 플로팅하고 중앙 주파수에 주석을 표시합니다.

medfreq(x+x2,Fs)

Figure contains an axes object. The axes object with title Median Frequency Estimate: 237.563 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line.

ans = 2.3756e+05

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인 카이저 윈도우를 지정합니다. 신호의 중앙 주파수를 추정하고 PSD 플롯에서 이 주파수에 주석을 표시합니다.

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

medfreq(Pxx,f);

Figure contains an axes object. The axes object with title Median Frequency Estimate: 100.117 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line.

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

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

정현파를 결합하여 2채널 신호를 생성합니다. 각 채널의 PSD를 추정하고 그 결과를 바탕으로 중앙 주파수를 구합니다.

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

y = medfreq(Pyy,f)
y = 1×2
105 ×

    1.0012    2.5731

PSD 플롯에서 두 채널의 중앙 주파수에 주석을 표시합니다.

medfreq(Pyy,f);

Figure contains an axes object. The axes object with title Median Frequency Estimate, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 4 objects of type line.

두 채널을 합해 하나의 새로운 신호를 생성합니다. PSD를 추정하고 중앙 주파수에 주석을 표시합니다.

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

medfreq(Pzz,f);

Figure contains an axes object. The axes object with title Median Frequency Estimate: 256.859 kHz, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line.

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

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

0.3π rad/sample과 0.6π rad/sample 사이에서 신호의 중앙 주파수를 계산합니다. PSD를 플로팅하고 중앙 주파수와 측정 구간에 주석을 표시합니다.

medfreq(d,[],[0.3 0.6]*pi);

Figure contains an axes object. The axes object with title Median Frequency Estimate: blank 0 . 371 blank times blank pi blank rad/sample, xlabel Normalized Frequency ( times pi blank mrad/sample), ylabel Power/frequency (dB/(rad/sample)) contains 4 objects of type line, patch.

중앙 주파수와 측정 구간의 대역 전력을 출력합니다. 샘플 레이트를 2π로 지정하는 것은 샘플 레이트를 설정하지 않는 것과 동일합니다.

[mdf,power] = medfreq(d,2*pi,[0.3 0.6]*pi);

fprintf('Mean = %.3f*pi, power = %.1f%% of total \n', ...
    mdf/pi,power/bandpower(d)*100)
Mean = 0.371*pi, power = 77.4% of total 

정규화된 차단 주파수가 0.5π rad/sample, 0.8π rad/sample이고 진폭이 첫 번째 채널의 1/10인 두 번째 채널을 추가합니다.

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

0.3π rad/sample과 0.9π rad/sample 사이에서 신호의 중앙 주파수를 계산합니다. PSD를 플로팅하고 각 채널의 중앙 주파수와 측정 구간에 주석을 표시합니다.

medfreq(d,[],[0.3 0.9]*pi);

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

각 채널의 중앙 주파수를 출력합니다. π로 나눕니다.

mdf = medfreq(d,[],[0.3 0.9]*pi)/pi
mdf = 1×2

    0.3706    0.6500

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다. x가 벡터이면 단일채널로 처리됩니다. x가 행렬일 경우, medfreq 함수는 x의 각 열에 대한 중앙 주파수를 개별적으로 계산합니다. 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가 행렬일 경우, medfreq 함수는 pxx의 각 열에 대한 중앙 주파수를 개별적으로 계산합니다.

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

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

데이터형: single | double

주파수로, 벡터로 지정됩니다.

데이터형: single | double

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

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

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

데이터형: single | double

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

데이터형: single | double

주파수 범위로, 실수 값으로 구성되고 요소를 2개 가진 벡터입니다. freqrange를 지정하지 않을 경우, medfreq 함수는 입력 신호의 전체 대역폭을 사용합니다.

데이터형: single | double

출력 인수

모두 축소

중앙 주파수로, 스칼라 또는 벡터로 지정됩니다.

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

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

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

참고 문헌

[1] Phinyomark, Angkoon, Sirinee Thongpanja, Huosheng Hu, Pornchai Phukpattaranont, and Chusak Limsakul. "The Usefulness of Mean and Median Frequencies in Electromyography Analysis." In Computational Intelligence in Electromyography Analysis – A Perspective on Current Applications and Future Challenges, edited by Ganesh R. Naik. London: IntechOpen, 2012. https://doi.org/10.5772/50639.

확장 기능

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

버전 내역

R2015a에 개발됨

모두 확장