ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

poctave

オクターブ スペクトルの生成

構文

p = poctave(x,fs)
p = poctave(xt)
p = poctave(___,Name,Value)
p = poctave(pxx,fs,f,Name,Value,'psd')
[p,cf] = poctave(___)
poctave(___)

説明

p = poctave(x,fs) は、fs のレートでサンプリングされた信号 x のオクターブ スペクトルを返します。オクターブ スペクトルは、ANSI S1.11 規格[1]で定義されているオクターブ帯域上の平均パワーです。x が行列の場合、この関数は各列のオクターブ スペクトルを個別に推定し、結果を対応する p の列に返します。

p = poctave(xt) は、MATLAB® timetable xt に保存された信号のオクターブ スペクトルを返します。

p = poctave(___,Name,Value) は、名前と値のペアの引数を使用して、上記の任意の構文に追加オプションを指定します。

p = poctave(pxx,fs,f,Name,Value,'psd') では、パワー スペクトル密度、pxx を 1/b オクターブ パワー スペクトルに変換することによってオクターブ平滑化を実行します (b はオクターブ帯域内のサブバンドの数)。f の周波数は、pxx の PSD 推定値に相当します。

[p,cf] = poctave(___) は、オクターブ スペクトルが計算されるオクターブ帯域の中心周波数も返します。

出力引数なしで poctave(___) を使用すると、現在の Figure にオクターブ スペクトルがプロットされます。

すべて折りたたむ

ホワイト ガウス ノイズを サンプルを生成します。零点と極がすべて正の x 軸上にあるフィルターでホワイト ノイズをフィルター処理することによって、擬似ピンク ノイズの信号を作成します。零点と極を可視化します。

N = 1e5;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';

[b,a] = zp2tf(z,p,1);
pn = filter(b,a,wn);

zplane(z,p)

ホワイトおよびピンク ノイズで構成される 2 チャネル信号を作成します。オクターブ スペクトルを計算します。サンプルレートは 44.1 kHz だと仮定します。周波数帯を 30 Hz からナイキスト周波数の範囲に設定します。

sg = [wn pn];

fs = 44100;

poctave(sg,fs,'FrequencyLimits',[30 fs/2])
legend('White noise','Pink noise','Location','SouthEast')

ホワイト ノイズには、周波数と共に増加するオクターブ スペクトルがあります。ピンク ノイズのオクターブ スペクトルは、周波数範囲全体をとおしてほぼ一定です。信号のオクターブ スペクトルは、人間の耳が信号をどのように認識するかを示します。

44.1 kHz でサンプリングされたホワイト ガウス ノイズを サンプル生成します。零点と極がすべて正の x 軸上にあるフィルターでホワイト ノイズをフィルター処理することによって、ピンク ノイズの信号を作成します。

N = 1e5;
fs = 44.1e3;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';
[b,a] = zp2tf(z,p,1);

pn = filter(b,a,wn);

信号のオクターブ スペクトルを計算します。1 オクターブあたり 3 つの帯域を指定して、全体の周波数範囲を 200 Hz ~ 20 kHz に制限します。後で利用するために cell 配列に名前と値のペアを保存します。スペクトルを表示します。

flims = [200 20e3];
bpo = 3;
opts = {'FrequencyLimits',flims,'BandsPerOctave',bpo};

poctave(pn,fs,opts{:});

同じ設定で、ただし C 重み付けを使用して信号のオクターブ スペクトルを計算します。C 重み付けのスペクトルは、6 kHz を超える周波数では低下します。

hold on
poctave(pn,fs,opts{:},'Weighting','C')

今度は A 重み付けを使用して、再度オクターブ スペクトルを計算します。A 重み付けのスペクトルは、約 3 kHz でピークになり、6 kHz を超える場合と周波数帯の下端では低下します。

poctave(pn,fs,opts{:},'Weighting','A')
hold off
legend('Pink noise','C-weighted','A-weighted','Location','SouthWest')

44.1 kHz でサンプリングされたホワイト ガウス ノイズを サンプル生成します。零点と極がすべて正の x 軸上にあるフィルターでホワイト ノイズをフィルター処理することによって、ピンク ノイズの信号を作成します。

N = 1e5;
fs = 44.1e3;
wn = randn(N,1);

z = [0.982231570015379 0.832656605953720 0.107980893771348]';
p = [0.995168968915815 0.943841773712820 0.555945259371364]';
[b,a] = zp2tf(z,p,1);

pn = filter(b,a,wn);

両方の信号についてパワー スペクトル密度のウェルチ推定を計算します。信号を 2048 サンプルのセグメントに分割し、隣接するセグメント間に 50% のオーバーラップを指定し、各セグメントをハミング ウィンドウでウィンドウ処理し、4096 DFT ポイントを使用します。

[pxx,f] = pwelch([wn pn],hamming(2048),1024,4096,fs);

200 Hz からナイキスト周波数までの範囲の周波数帯上のスペクトル密度を表示します。周波数軸に対数スケールを使用します。

pwelch([wn pn],hamming(2048),1024,4096,fs)
ax = gca;
ax.XScale = 'log';
xlim([200 fs/2]/1000)
legend('White','Pink')

信号のオクターブ スペクトルを計算し、表示します。前のプロットと同じ周波数範囲を使用します。1 オクターブあたり 6 帯域を指定し、8 次フィルターを使用してスペクトルを計算します。

poctave(pxx,fs,f,'BandsPerOctave',6,'FilterOrder',8,'FrequencyLimits',[200 fs/2],'psd')
legend('White','Pink')

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。x がベクトルの場合、poctave では単一チャネルとして取り扱います。x が行列の場合、poctave は各列のオクターブ スペクトルを個別に計算し、結果を対応する p の列に返します。

例: sin(2*pi*(0:127)/16)+randn(1,128)/100 は、ノイズを含む正弦波を指定します。

例: [2 1].*sin(2*pi*(0:127)'./[16 64]) は、2 チャネルの正弦波を指定します。

データ型: single | double

サンプルレート。正のスカラーとして Hz 単位で指定します。サンプルレートは 7 Hz より低くできません。

入力 timetable。xt に増加する有限の等間隔の行時間を含めなければなりません。xt がマルチチャネル信号を表す場合は、行列を含む単一変数か、ベクトルで構成される複数の変数のどちらかをもたなければなりません。

timetable が欠損している場合や時間点が重複している場合、欠損または重複する時間および非等間隔の時間をもつ timetable の整理 (MATLAB)のヒントを使用して修正できます。

例: timetable(seconds(0:4)',randn(5,1)) は 1 Hz で 4 秒間サンプリングされたランダム過程を指定します。

パワー スペクトル密度 (PSD)。実数の非負の要素を含むベクトルまたは行列として指定します。パワー スペクトル密度は、デシベル単位ではなく、線形単位で表さなければなりません。デシベル値をパワー値に変換するには、db2pow を使用します。

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

PSD 周波数。ベクトルとして指定します。f は有限で、厳密に増加し、線形スケールにおいて等間隔でなければなりません。

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

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 ' ' で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前/値のペア引数を、任意の順番で指定できます。

例: 'Weighting','A','FilterOrder',8 は、A 重み付けと 8 次フィルターを使用してオクターブ スペクトルを計算します。

オクターブ帯域におけるサブバンドの数。'BandsPerOctave' と 1、3/2、2、3、6、12、24、48 または 96 で構成されるコンマ区切りのペアとして指定します。このパラメーターは、1/N オクターブ帯域の幅を規定します。このような周波数帯において、上端の周波数は、下端周波数の 21/b 倍です。b はサブバンドの数です。

データ型: single | double

バンドパス フィルターの次数。'FilterOrder' と正の偶数の整数とで構成されるコンマ区切りペアで指定します。

データ型: single | double

周波数帯。'FrequencyLimits' と 2 要素ベクトルから構成されるコンマ区切りのペアとして指定します。指定した値はナイキスト範囲内になければなりません。低い方のベクトル値は、3 Hz 以上でなければなりません。低い方の値に 3 Hz より大きく 3*fs/48e3 より小さい値を指定した場合、関数は低い方の値を 3*fs/48e3 に変更します。下限がナイキスト周波数より大きくなるように値を指定すると、関数はより広い周波数帯を指定するよう要求します。

データ型: single | double

周波数の重み付け。'Weighting' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'none'poctave は入力に対してどのような周波数の重み付けも行いません。

  • 'A'poctave は入力に対して A 重み付けを実行します。ANSI S1.42 規格は、A 重み付け曲線を定義しています。IEC 61672-1 規格は、A 重み付けフィルターの最小および最大減衰範囲を定義しています。ANSI S1.42.2001 規格は、アナログの極および零点を指定することによって重み付け曲線を定義しています。

  • 'C'poctave は入力に対して C 重み付けを実行します。ANSI S1.42 規格は、C 重み付け曲線を定義しています。IEC 61672-1 規格は、C 重み付けフィルターの最小および最大減衰範囲を定義しています。ANSI S1.42.2001 規格は、アナログの極および零点を指定することによって重み付け曲線を定義しています。

  • ベクトル — poctave では、入力を有限インパルス応答 (FIR) フィルターを指定する係数のベクトルとして処理します。

  • 行列 — poctave では、入力を無限インパルス応答 (IIR) フィルターを指定する 2 次セクション型係数の行列として処理します。行列には、少なくとも 2 つの行と厳密に 6 つの列がなくてはなりません。

  • 1 行 2 列 cell 配列 — poctave では、入力を IIR フィルターの伝達関数を指定するその次数の分子と分母の係数として処理します。

  • digitalFilter オブジェクト — poctave は、入力を、designfilt を使用して設計されたフィルターとして処理します。

この引数は、入力が信号の場合にのみサポートされます。オクターブ平滑化は、周波数の重み付けをサポートしていません。

例: 'Weighting',fir1(30,0.5) は、0.5π ラジアン/サンプルの正規化されたカットオフ周波数をもつ 30 次の FIR フィルターを指定します。

例: 'Weighting',[2 4 2 6 0 2;3 3 0 6 0 0] は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

例: 'Weighting',{[1 3 3 1]/6 [3 0 1]/3} は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

例: 'Weighting',designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

データ型: single | double | char | cell

出力引数

すべて折りたたむ

オクターブ スペクトル。ベクトルまたは行列として返されます。

中心周波数。ベクトルとして返されます。cf には、poctave がオクターブ スペクトルを推定したオクターブ帯域の中心周波数のリストが含まれます。cf の単位は Hz です。

参照

[1] Specification for Octave-Band and Fractional-Octave-Band Analog and Digital Filters. ANSI Standard S1.11-2004. Melville, NY: Acoustical Society of America, 2004.

[2] Smith, Julius Orion, III. "Example: Synthesis of 1/F Noise (Pink Noise)." In Spectral Audio Signal Processing. http://ccrma.stanford.edu/~jos/sasp/.

参考

R2018a で導入