このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
zerocrossrate
構文
説明
は、追加の名前と値の引数を指定します。この構文は、前の構文の入力引数のいずれかと一緒に使用します。rate
= zerocrossrate(___,Name,Value
)
出力引数を指定しないで zerocrossrate(___)
を使用すると、rate
が "y" 軸に、対応するウィンドウ番号が "x" 軸にプロットされます。ウィンドウの長さが信号の全長に一致する場合、関数はウィンドウの長さを "x" 軸に、クロッシング率をウィンドウ中央にプロットします。
例
信号のゼロクロッシングのカウント
交互に符号を変える 1 のベクトルについて考えます。データをプロットします。
x = [1 -1 1 -1 1 -1 1 -1 1 -1]; plot(x)
x
のゼロクロッシング率を計算します。
r = zerocrossrate(x)
r = 0.9500
3 番目の出力引数を使用して、クロッシングが発生する位置を求めます。x
とゼロクロッシングの位置をプロットします。この関数は、クロッシングの直後のサンプルのインデックスを返します。これは必ずしも厳密なクロッシング位置ではありません。関数は、x
の初期状態は既定の設定でゼロであると見なすため、最初のサンプルはクロッシング ポイントとしてマークされます。
[~,~,indices] = zerocrossrate(x); plot(x) hold on plot(x(indices),'*') hold off
比較法を使用して、x
のゼロクロッシング率を計算します。このゼロクロッシング率は、差分法を使用して計算される値とは異なります。
rC = zerocrossrate(x,Method="comparison")
rC = 0.9000
差分法を使用して、再度 x
のゼロクロッシング率を計算し、ゼロを正に指定します。このゼロクロッシング率は、比較法を使用して計算される値と等しくなります。
rZ = zerocrossrate(x,ZeroPositive=1)
rZ = 0.9000
次に、x
の初期状態を 1
として指定します。このゼロクロッシング率は前の結果と等しくなります。
rI = zerocrossrate(x,InitialState=1)
rI = 0.9000
温度データのレベル クロッシングのカウント
2011 年 1 月に 1 か月間にわたってボストンのローガン空港で 1 時間間隔で測定された摂氏単位の温度を読み込みます。timetable
を作成し、retime
を使用してデータを日次平均値に集計します。
load bostemp t = hours(1:24*31)'; TT = timetable(t,tempC); rTT = retime(TT,'daily','mean');
温度が月平均をクロッシングした日数をカウントします。データをプロットし、月平均の温度を示す水平線を追加することで、どこでクロッシングが発生しているかを可視化します。
avg = mean(TT.tempC)
avg = -1.3007
[~,count] = zerocrossrate(rTT,Level=avg)
count = 9
plot(hours(rTT.t/24),rTT.tempC) yline(avg) xlabel('Time elapsed since January 1, 2011 (days)') ylabel('Average daily temperature (\circC)') axis tight
ゼロクロッシングによる有声音と無声音の特定
音声には有声と無声という特徴があります。母音などの "有声" の音声は、声帯が振動するときに発せられます。ほとんどの子音など、"無声" の音声は、発声時に声帯が振動しません。ゼロクロッシングを使用することで、オーディオ信号を有声領域と無声領域に分類することができます。
オーディオ信号を MATLAB® ワークスペースに読み込みます。"Oak is strong, and also gives shade" という音声が流れます。
[y,fs] = audioread("oak.m4a"); % To hear, type soundsc(y,fs)
信号は 44.1 kHz でサンプリングされています。比較法を使用して、10 ms のウィンドウのゼロクロッシング率を計算します。
win = fs*0.01;
rate = zerocrossrate(y,WindowLength=win,Method="comparison");
各セグメントのクロッシング率を可視化するには、rate
をプロットします。有声音はクロッシング率が低く、無声音はクロッシング率が高くなることが想定されています。
plot(rate)
しきい値 0.1
を使用して有声セグメントと無声セグメントを区別します。2 つのカテゴリ ("Unvoiced
" と "Voiced
") をもつsignalMask
オブジェクトを作成して、関心領域 (ROI) をプロットします。無声音と有声音の領域を、発声された各単語の位置と比較します。
Audio Toolbox™ の文字起こし機能を使用することで、オーディオ ファイルから単語を抽出することができます。ラベル付き信号セット ls
を SpeechTranscription.mat
からワークスペースに読み込みます。ラベル付き信号セットには、オーディオ信号、ROI 範囲、および発声された各単語のラベルが含まれています。発声された単語をプロットに表示します。オーディオ信号のラベル付けの詳細については、オーディオ信号内の発声された単語のラベル付けを参照してください。
h = 0.1; idu = find(rate > h); idu(1:2) = []; vi = [(idu-1) idu]*win; m = sigroi2binmask(vi,length(y)); mask = signalMask([m ~m],Categories=["Unvoiced" "Voiced"],SampleRate=fs); plotsigroi(mask,y) load SpeechTranscription ln = getLabelNames(ls); v = getLabelValues(ls,1,ln); v.Value = categorical(v.Value,v.Value); RL = v.ROILimits; VL = v.Value; hold on text(mean(RL,2),-0.7*ones(size(VL)),VL,HorizontalAlignment="center", ... FontSize=11,FontWeight="bold") hold off
ストリーミング データのゼロクロッシング率
15 秒間のアコースティック ギター音楽を含むオーディオ ファイルを読み込みます。サンプル レートは 44.1 kHz です。音楽を再生するには、次のコードの最後の行のコメントを解除します。
Fs = 44100; y = audioread("guitartune.wav"); % sound(y,Fs)
オーディオ信号を、オーバーラップするフレーム (各フレームに 4096 サンプルを格納) にバッファリングします。512 サンプルのオーバーラップを使用します。
winLength = 4096;
overlap = 512;
[yB,~] = buffer(y,winLength,overlap,"nodelay");
各フレームのゼロクロッシング率を取得します。初期状態を各フレームの最初のサンプルの前回の値として指定することで、フレームのオーバーラップを考慮します。
init = winLength - overlap; state = 0; zcr = []; for i = 1:size(yB,2) zcr = [zcr;zerocrossrate(yB(:,i),InitialState=state)]; state = yB(init,i); end
オーディオ信号をプロットし、各フレームのゼロクロッシング率を重ね合わせます。
figure yyaxis left x = 0:1/Fs:(numel(y)-1)/Fs; plot(x',y) xlabel("Seconds") ylabel("Amplitude") yyaxis right xx = (1:size(yB,2))*((winLength-overlap)/Fs); plot(xx',zcr) ylabel("Zero-crossing rate")
バッファリングされていない信号のゼロクロッシング率を計算します。バッファリングされた信号のゼロクロッシング率と等価な結果を取得するには、WindowLength
を 4096
に設定し、OverlapLength
を 512
に設定します。2 つの結果が等価であるかを判定します。
zcr_batch = zerocrossrate(y,WindowLength=winLength,OverlapLength=overlap); isequal(zcr_batch,zcr)
ans = logical
1
入力引数
x
— データ
実数値のベクトル | 実数値の行列
データ。実数値のベクトルまたは行列として指定します。x
が行列の場合、この関数は各値がデータ列に対応する行ベクトルとしてゼロクロッシング率を返します。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: zerocrossrate(x,Method="comparison",Level=7,transitionEdge="rising")
は、比較法を使用して x
が 7
で正に遷移するレートを計算します。
InitialState
— 前の状態
0
(既定値) | ベクトル
x
の前の状態。要素数が入力チャネルの数と一致するベクトルとして指定します。
例: zerocrossrate(x,InitialState=[1 0 –1 3])
は 4 チャネル入力信号 x
のクロッシング率を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Method
— ゼロクロッシング率の計算方法
"difference"
(既定値) | "comparison"
ゼロクロッシング率の計算法。"difference"
または "comparison"
として指定します。Method
を指定しない場合、関数は差分法を使用してクロッシング率を計算します。
comparison
— 関数は、クロッシングが完全に完了した位置でindices
を true とマークします。difference
— 関数は、abs(sign(xi)–sign(xi–1)) > 0 の位置でindices
を true とマークします。
例: zerocrossrate(x,Method="comparison")
は比較法を使用して、x
のクロッシング率を計算します。
データ型: char
| string
WindowLength
— ウィンドウの長さ
正の整数
クロッシング率を計算するウィンドウの長さ。正の整数として指定します。既定のウィンドウの長さは信号長です。
例: zerocrossrate(x,WindowLength=20)
は、x
の 20 サンプルのウィンドウのクロッシング率を返します。
例: zerocrossrate(x,WindowLength=fs*0.05)
は、サンプル レート fs
が指定された x
の 50 ms のウィンドウのクロッシング率を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OverlapLength
— オーバーラップするサンプル数
0
(既定値) | 正の整数
隣接するセグメント間でオーバーラップするサンプルの数。正の整数として指定します。オーバーラップはウィンドウの長さよりも小さくなくてはなりません。
例: zerocrossrate(x,OverlapLength=0)
は、オーバーラップのないセグメントのクロッシング率を返します。
例: zerocrossrate(x,WindowLength=20,OverlapLength=5)
は、5 サンプルがオーバーラップするセグメントのクロッシング率を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Level
— 信号レベル
0
(既定値) | 実数スカラー
クロッシング率を計算する信号レベル。実数スカラーとして指定します。関数は信号から Level
の値を減算してゼロクロッシングを求めます。Level
を指定しない場合、関数は 0
の既定値を使用し、ゼロクロッシング率を返します。
例: zerocrossrate(x,Level=1)
は、入力信号 x
が 1
をクロッシングするレートを返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Threshold
— しきい値
0
(既定値) | 実数スカラー
クロッシング率を計算する Level
の値の上下のしきい値。実数スカラーとして指定します。関数は、[–threshold
, threshold
] の範囲の入力のすべての値を 0
に設定してからゼロクロッシングを求めます。
例: zerocrossrate(x,Threshold=0.1)
は、–0.1 ~ 0.1 の許容誤差でクロッシング率を返します。
メモ
Level
と Threshold
の両方を指定した場合、関数は入力からレベルの値を減算してから、結果の [–threshold
, threshold
] の範囲の入力値を 0
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TransitionEdge
— 遷移
"both"
(既定値) | "falling"
| "rising"
ゼロクロッシングをカウントするときに含める遷移。"falling"
、"rising"
、または "both"
として指定します。"falling"
を指定すると、関数は立ち下がり遷移のみカウントします。"rising"
を指定すると、関数は立ち上がり遷移のみカウントします。
例: zerocrossrate(x,TransitionEdge="rising")
は、立ち上がり遷移についてのみ x
のクロッシング率を返します。
データ型: char
| string
ZeroPositive
— 符号の規則
0
または false
(既定値) | 1
または true
符号の規則。logical スカラーとして指定します。ZeroPositive
を true として指定した場合、関数は 0
を正であると見なします。ZeroPositive
を false として指定した場合、関数は関数sign
の規則に従い、0
、-1
、および+1
が別個の符号をもつものと見なします。
例: zerocrossrate(x,ZeroPositive=1)
は 入力信号 x
のクロッシング率を返し、ゼロを正であると見なします。
データ型: logical
出力引数
rate
— ゼロクロッシング率
行ベクトル | 行列
ゼロクロッシング率。行ベクトルまたは行列として返されます。WindowLength
が信号長に等しい場合、rate
は要素数が x
または TT
のチャネルの数と一致する行ベクトルです。WindowLength
が信号長よりも小さい場合、関数は、"i" 行目に "i" 番目のウィンドウのクロッシング率を含み、"j" 列目が "j" 番目の入力チャネルに対応する行列として rate
を返します。
count
— クロッシングの回数
N 行 M 列の行列
クロッシングの回数。N 行 M 列の行列として返されます。ここで、N はウィンドウの数、M は入力チャネルの数です。"i" 行目は "i" 番目のウィンドウのクロッシング回数に対応し、"j" 列目は "j" 番目のチャネルのクロッシング回数に対応します。
indices
— Logical インデックス
N×WindowLength
×M の配列
信号におけるクロッシング発生位置の logical インデックス。N×WindowLength
×M の配列として返されます。ここで、N はウィンドウの数、M は入力チャネルの数です。
メモ
インデックスは必ずしも信号における厳密なクロッシング位置を表しているわけではありません。関数 zerocrossrate
は、クロッシングの直後のサンプルのインデックスを返します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
ウィンドウの長さが指定され、入力が複数のチャネルである場合、コード生成では動的メモリ割り当ての無効化をサポートしません。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)