/// <summary> /// コンストラクタ /// 帯域構造体を使用したバージョンです。 /// </summary> /// <param name="numberOfpartitions">帯域分割数</param> /// <param name="band">検査対象領域</param> /// <param name="timespan">検査時間 時間窓をずらしながら検査するので、応答速度や計算精度に影響します。</param> /// <param name="samplingPeriod">サンプリング周期</param> public SignalBasic(int numberOfPartitions, Signal_Process.FFTresult.Band band, TimeSpan timespan, TimeSpan samplingPeriod) { long maxFrequency = band.Max; long minFrequency = band.Min; this.Init(numberOfPartitions, maxFrequency, minFrequency, timespan, samplingPeriod); // 丸投げ }
/// <summary> /// 本クラスが内部に保持している帯域のリストを返す /// </summary> /// <returns>帯域のリスト</returns> public Signal_Process.FFTresult.Band[] GetBands() { Signal_Process.FFTresult.Band[] bands = new Signal_Process.FFTresult.Band[this.band.Length]; for (int i = 0; i < this.band.Length; i++) // クローンを作って返す(Bandを構造体で設計しているのでこれでもよい) { bands[i] = this.band[i]; } return(bands); }
/// <summary> /// 強制的に、指定帯域で発声があることを認識させる /// 2011/11/18 呼び出し先が未実装・・・ /// </summary> /// <param name="band">指定帯域</param> public void RecognizeSignal(Signal_Process.FFTresult.Band band) { for (int i = 0; i < this.band.Length; i++) // 本クラス内に用意されている検査器を全てチェック { if (this.band[i].CenterFrequency > band.Min && this.band[i].CenterFrequency > band.Max) { this.sensor[i].RecognizeSignal(); // 検査器に発声を認識させる } } return; }
/// <summary> /// 任意の帯域において発声が検出されているかどうかを返す /// 検査対象外の帯域だったり、検出されていなければfalseが返ります。 /// </summary> /// <param name="band">指定帯域</param> /// <returns>検出されていればtrue</returns> public Boolean CheckDetection(Signal_Process.FFTresult.Band band) { Boolean ans = false; for (int i = 0; i < this.band.Length; i++) // 本クラス内に用意されている検査器を全てチェック { if (this.band[i].CenterFrequency > band.Min && this.band[i].CenterFrequency > band.Max && this.sensor[i].FrontDetection == true) { ans = true; break; } } return(ans); }
/// <summary> /// 検出された帯域情報を返す /// </summary> /// <returns>帯域情報</returns> public Signal_Process.FFTresult.Band[] GetDetectedBands() { int i = 0; for (int k = 0; k < this.sensor.Length; k++) { if (this.sensor[k].FrontDetection == true) { i++; // 信号が検出された帯域数をカウント } } Signal_Process.FFTresult.Band[] bands = new Signal_Process.FFTresult.Band[i]; // 信号が検出された数だけ帯域を示すクラスを生成 i = 0; for (int k = 0; k < this.sensor.Length; k++) { if (this.sensor[k].FrontDetection == true) { bands[i] = this.band[k]; i++; } } return(bands); }