1

私は、振幅が0と20の間で交互になる周波数500Hzの方形波で、サンプリング周波数20kHzで200ポイントのDFTを実行する割り当てに取り組んでいます。

私はC++を使用しており、DFT方程式をコーディングする方法を理解しました。私の問題は、forループを使用してコードで方形波を表現するのに問題があることです。

私がまだ本当に混乱しているのは、この方形波のサイクルが200ポイントのサンプルにいくつあるかということです。

ありがとう

4

4 に答える 4

1

方形波の周期は20000/500=40ポイントであるため、200ポイントのサンプルには正確に5つの方形波の周期があります(200/40=5)。

于 2011-10-17T15:50:00.153 に答える
0

方形波の1サイクルは1/500秒かかります。各サンプルは1/2000秒になります。単純な除算により、各方形波のサンプル数がわかります。

別の部門では、これらの波のいくつが200ポイントのウィンドウに収まるかを示します。

于 2011-10-17T15:52:15.013 に答える
0

サンプリング周波数が20,000Hzで、周波数が500 Hzの方形波がある場合、これは基本的に1秒あたり500サイクルの波があることを意味します。つまり、20,000サンプルごとに500サイクルになります。これは、各波サイクルに40サンプル(またはポイント)が必要であることを意味します。したがって、200ポイントがある場合、DFT内に5つの方形波サイクルが必要であることを意味します。

于 2011-10-17T15:52:42.873 に答える
0

計算に単位を含めることで、計算が正しく行われるようにすることができます。したがって、期間には次元時間があり、ヘルツには1.0 /時間の次元があり、サンプルには無次元があります。プログラム的には、 boost.unitsを使用してこれを行うことができます。コンパイル時にユニットをチェックし、間違えるとエラーが発生します。

また、ユーザーがコードに間違った単位を入力するのを防ぎます。たとえば、周波数に20000ではなく20を入力することにより(kHzで測定していると考えて)

インターフェースは次のようになります

using namespace boost::units;
set_period(quantity<si::time> period);

ユーザーは秒単位で時間を入力する必要があります、

set_period(5*si::seconds)
于 2011-10-17T16:03:06.377 に答える