Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

medfreq

説明

freq = medfreq(x) は、時間領域信号 x のパワー スペクトルにおける正規化周波数の中央値 freq を推定します。medfreq は、箱型ウィンドウと x の長さに等しい DFT 点の数を持つ関数 periodogram を使用してパワー スペクトルを計算します。

freq = medfreq(x,fs) は、周波数中央値をサンプル レート fs で推定します。

freq = medfreq(pxx,f) は、パワー スペクトル密度 (PSD) 推定 pxx の周波数中央値を返します。周波数 f は、pxx の推定値に対応します。

freq = medfreq(sxx,f,rbw) は、分解能帯域幅 rbw でのパワー スペクトル推定 sxx の周波数中央値を返します。

freq = medfreq(___,freqrange) では、周波数中央値を計算する周波数範囲を指定します。この構文には、2 番目の入力引数が fs または f である限り、前の構文の入力引数を任意に組み合わせて含めることができます。2 番目の入力が空として渡された場合は、medfreq は正規化周波数を想定します。freqrange の既定の値は、入力信号の全帯域幅です。

[freq,power] = medfreq(___) は、スペクトルの帯域パワー power も返します。freqrange を指定した場合、power には freqrange 内の帯域パワーが含まれます。

出力引数なしで medfreq(___) を使用すると、PSD またはパワー スペクトルがプロットされて周波数中央値に注釈が付けられます。

すべて折りたたむ

1024 kHz でサンプリングされたチャープのサンプルを 1024 個生成します。チャープの初期周波数が 50 kHz で、サンプリングの最後には 100 kHz に到達するようにチャープを指定します。S/N 比が 40 dB となるホワイト ガウス ノイズを付加します。再現可能な結果が必要な場合は、乱数発生器をリセットします。

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

別のチャープを生成します。初期周波数 200 kHz、最終周波数 300 kHz および最初の信号の振幅の 2 倍の振幅を指定します。ホワイト ガウス ノイズを付加します。

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

2 つのチャネルの 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.

2 つのチャネルを追加して新しい信号を作成します。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

1024 kHz でサンプリングされた 100.123 kHz の正弦波のサンプルを 1024 個生成します。S/N 比が 40 dB となるホワイト ガウス ノイズを付加します。再現可能な結果が必要な場合は、乱数発生器をリセットします。

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.321 kHz で、振幅は最初の正弦波の 2 倍です。ホワイト ノイズを付加します。

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 のプロット上で 2 つのチャネルの周波数中央値に注釈を付けます。

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.

2 つのチャネルを追加して新しい信号を作成します。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.

正規化されたカットオフ周波数が 0.25π ラジアン/サンプルおよび 0.45π ラジアン/サンプルである 88 次のバンドパス FIR フィルターの周波数応答に類似した PSD をもつ信号を生成します。

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

0.3π ラジアン/サンプルと 0.6π ラジアン/サンプル間の信号の周波数中央値を計算します。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π ラジアン/サンプルと 0.8π ラジアン/サンプルであり、最初のチャネルの 1/10 の振幅をもつ 2 番目のチャネルを追加します。

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

0.3π ラジアン/サンプルと 0.9π ラジアン/サンプル間の信号の周波数中央値を計算します。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 が行列の場合、medfreqx の各列の周波数中央値を個別に計算します。x は有限の値でなければなりません。

例: cos(pi/4*(0:159))+randn(1,160) は単一チャネルの行ベクトル信号です。

例: cos(pi./[4;2]*(0:159))'+randn(160,2) は 2 チャネル信号です。

データ型: single | double

サンプル レート。正の実数スカラーとして指定します。サンプル レートは単位時間あたりのサンプル数です。時間を秒単位で測定している場合、サンプル レートは Hz 単位になります。

データ型: single | double

パワー スペクトル密度 (PSD)。ベクトルまたは行列として指定します。pxx が行列の場合、medfreqpxx の各列の周波数中央値を個別に計算します。

パワー スペクトル密度は、デシベル単位ではなく、線形単位で表さなければなりません。デシベル値をパワー値に変換するには、db2pow を使用します。

例: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) は、2π Hz でサンプリングされたノイズの多い 2 チャネル正弦波のピリオドグラム PSD 推定値とそれについて計算される周波数を指定します。

データ型: single | double

周波数。ベクトルとして指定します。

データ型: single | double

パワー スペクトル推定。ベクトルまたは行列として指定します。sxx が行列の場合、medfreqsxx の各列の周波数中央値を個別に計算します。

パワー スペクトルは、デシベル単位ではなく線形単位で表さなければなりません。デシベル値をパワー値に変換するには、db2pow を使用します。

例: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power") では、ホワイト ガウス ノイズに組み込まれる 2 チャネルの正弦波のピリオドグラム パワー スペクトル推定と、計算に使う正規化周波数を指定します。

データ型: single | double

分解能帯域幅。正のスカラーで指定されます。この分解能帯域幅は、2 つの値、離散フーリエ変換の周波数分解能と PSD の計算に使用されるウィンドウの等価ノイズ帯域幅の積です。

データ型: single | double

周波数範囲。実数値の 2 要素ベクトルとして指定します。freqrange を指定しない場合、medfreq は入力信号の全帯域幅を使用します。

データ型: single | double

出力引数

すべて折りたたむ

周波数中央値。スカラーまたはベクトルとして指定します。

  • サンプル レートを指定した場合、freq の単位は fs の単位と同じになります。

  • サンプル レートを指定しない場合、freq の単位はラジアン/サンプルになります。

帯域パワー。スカラーまたはベクトルで返されます。

参照

[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 で導入

すべて展開する