我正在进行一项任务,在频率为500Hz的方波上以20kHz的采样频率执行200点DFT,其幅度在0到20之间交替。
我正在使用C ++而且我已经想到了如何编写DFT方程,我的问题是我在使用for循环代码方波中遇到问题。
我真正感到困惑的是这个方波在我的200点样本中会有多少个周期。
由于
答案 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)