为DFT生成方波

时间:2011-10-17 15:44:20

标签: c++ visual-c++ signal-processing dft

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

我正在使用C ++而且我已经想到了如何编写DFT方程,我的问题是我在使用for循环代码方波中遇到问题。

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

由于

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

方波的一个周期将需要1/500秒。每个样品将是1/20000秒。一个简单的除法应该告诉你每个方波的样本数量。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以通过在计算中包含单位来确保正确计算。因此周期具有维数时间,赫兹的维数为1.0 /时,样本无量纲。 以编程方式,您可以使用boost.units执行此操作。它会在编译时检查你的单位,如果你犯了错误就给你一个错误。

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

您的界面将类似于

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

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

set_period(5*si::seconds)