为DFT生成方波

Generating a square wave for DFT

本文关键字:方波 DFT      更新时间:2023-10-16

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

我正在使用c++,我已经知道如何编码DFT方程,我的问题是我在使用for循环的代码中表示方波时遇到了麻烦。

我仍然很困惑的是,在我的200点样本中,这个方波会有多少个周期。

谢谢

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

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

另一个划分会告诉你这些波在200点的窗口中可以容纳多少个

如果你的采样频率是20,000 Hz,你有一个频率为500 Hz的方波,这基本上意味着你的波每秒将有500个周期,这意味着你将在每20,000个样本中有500个周期。这意味着每个波周期需要40个样本(或点),所以如果你有200个点,这意味着你的DFT内应该有5个方波周期。

您可以通过在计算中包含单位来确保您的计算正确。周期的维度是时间,赫兹的维度是1.0/时间,样本是无量纲的。在编程上,您可以使用boost.units完成此操作。它会在编译时检查你的单元,如果你犯了错误,它会给你一个错误。

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

你的界面将是类似于

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

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

set_period(5*si::seconds)