1

我正在执行一项任务,即在频率为 500Hz 的方波上以 20kHz 的采样频率执行 200 点 DFT,其幅度在 0 和 20 之间交替。

我正在使用 C++,并且我已经想出了如何编写 DFT 方程,我的问题是我无法使用 for 循环在代码中表示方波。

我真正感到困惑的是,在我的 200 点样本中,这个方波有多少个周期。

谢谢

4

4 回答 4

1

方波的周期是20000/500=40点,因此您的 200 点样本中恰好有 5 个方波周期 ( 200/40=5)。

于 2011-10-17T15:50:00.153 回答
0

您可以通过在计算中包含单位来确保您的计算正确。所以周期有时间维度,赫兹有1.0/次的维度,样本是无量纲的。以编程方式,您可以使用boost.units来做到这一点。它会在编译时检查你的单元,如果你犯了错误,就会给你一个错误。

它还将阻止您的用户在您的代码中输入错误的单位。例如,通过输入 20 而不是 20000 作为频率(假设您以 kHz 为单位测量)

您的界面将类似于

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

用户必须以秒为单位输入时间,

set_period(5*si::seconds)
于 2011-10-17T16:03:06.377 回答
0

一个周期的方波需要 1/500 秒。每个样本将是 1/20000 秒。一个简单的除法应该告诉您每个方波将有多少个样本。

另一个部门会告诉您有多少波浪适合您的 200 点窗口。

于 2011-10-17T15:52:15.013 回答
0

如果您的采样频率为 20,000 Hz,并且您有一个频率为 500 Hz 的方波,这基本上意味着您每秒将有 500 个波周期,这意味着每 20,000 个样本将有 500 个周期。这意味着每个波周期需要 40 个样本(或点),因此如果您有 200 个点,则意味着您的 DFT 中应该有 5 个方波周期。

于 2011-10-17T15:52:42.873 回答