Main Content

meanfreq

설명

예제

freq = meanfreq(x)는 시간 영역 신호 x의 파워 스펙트럼에 대해 정규화된 평균 주파수 freq를 추정합니다. meanfreq 함수는 파워 스펙트럼을 계산하기 위해 periodogram 함수를 사용하며 여기에 사각 윈도우 및 x 길이와 동일한 개수의 DFT 점을 사용합니다. x가 행렬일 경우, 이 함수는 x의 각 열에 대한 평균 주파수를 개별적으로 계산합니다.

예제

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

예제

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

freq = meanfreq(sxx,f,rbw)는 분해능 대역폭 rbw를 갖는 파워 스펙트럼 추정값 sxx에 대한 평균 주파수를 반환합니다.

예제

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

예제

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

예제

meanfreq(___)에 출력 인수를 지정하지 않으면 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)를 플로팅하고 평균 주파수에 주석을 표시합니다.

meanfreq(x,Fs)

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

ans = 7.5032e+04

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

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

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

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

    0.7503    2.4999

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

meanfreq([x x2],Fs);

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

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

meanfreq(x+x2,Fs)

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

ans = 2.1496e+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);

meanfreq(Pxx,f);

Figure contains an axes object. The axes object with title Mean Frequency Estimate: 100.134 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 = meanfreq(Pyy,f)
y = 1×2
105 ×

    1.0013    2.5732

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

meanfreq(Pyy,f);

Figure contains an axes object. The axes object with title Mean 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);

meanfreq(Pzz,f);

Figure contains an axes object. The axes object with title Mean Frequency Estimate: 225.775 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를 플로팅하고 평균 주파수와 측정 구간에 주석을 표시합니다.

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

Figure contains an axes object. The axes object with title Mean Frequency Estimate: blank 0 . 373 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π로 지정하는 것은 샘플 레이트를 설정하지 않는 것과 동일합니다.

[mnf,power] = meanfreq(d,2*pi,[0.3 0.6]*pi);

fprintf('Mean = %.3f*pi, power = %.1f%% of total \n', ...
    mnf/pi,power/bandpower(d)*100)
Mean = 0.373*pi, power = 75.6% 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를 플로팅하고 각 채널의 평균 주파수와 측정 구간에 주석을 표시합니다.

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

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

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

mnf = meanfreq(d,[],[0.3 0.9]*pi)/pi
mnf = 1×2

    0.3730    0.6500

입력 인수

모두 축소

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

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

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

데이터형: single | double

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

데이터형: single | double

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

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

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

데이터형: single | double

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

데이터형: single | double

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

데이터형: 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에 개발됨

모두 확장