如何为qwt oscillocope示例生成方波?

时间:2014-05-07 17:13:58

标签: c++ qt waveform qwt

qwt oscillocope的例子产生一个正弦波形,对于我的项目我想生成一个Square或cosinus波。  我试图找出产生窦波的位置,我确实找不到。  任何帮助将不胜感激 THX

2 个答案:

答案 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;
}