qwt oscillocope的例子产生一个正弦波形,对于我的项目我想生成一个Square或cosinus波。 我试图找出产生窦波的位置,我确实找不到。 任何帮助将不胜感激 THX
答案 0 :(得分:1)
要生成'Mathmatical square wave',意味着非带限方波,请使用以下代码:
double value = sin(x / period * 2.0 * M_PI)>=0.0 ? 1.0:-1.0;
这将给你一个理论上是纯模拟方波的波。正如我上面提到的,这个波将是非带限制的,因为它由于混叠而听起来不正确。但是,如果您只是将它用于没有音频输出的示波器,它看起来是正确的。
让我知道这是否有帮助。
编辑: 对于锯...
const double Sample_Rate = 44100.0;
typedef struct Saw_Data{
double _phasor = 0.0;
double _tolerance = 1.0;
}Saw_Data;
double _DSP::Saw_Wave(double* _frequency,_DSP::Saw_Data* _data){
double _val = _data->_phasor;
_data->_phasor += 2.0 * (1.0/(Sample_Rate/ *_frequency));
if (_data->_phasor > _data->_tolerance) {
_data->_phasor-=2.0;
}
return _val ;
}
这是我用于“数学”非带限锯波的代码。 Lemme知道你是否需要我来解释它。
答案 1 :(得分:0)
在示波器目录中搜索字符串" sin"揭示了sin波是在samplingthread.cpp
中生成的。以下是相关方法:
double SamplingThread::value( double timeStamp ) const
{
const double period = 1.0 / d_frequency;
const double x = ::fmod( timeStamp, period );
const double v = d_amplitude * qFastSin( x / period * 2 * M_PI );
return v;
}