【问题标题】:How to generate a square waveform for qwt oscillocope example?如何为 qwt 示波器示例生成方波?
【发布时间】:2014-05-07 17:13:58
【问题描述】:

qwt oscillocope 的示例生成一个正弦波形,对于我的项目,我想生成一个方波或余弦波。 我试图找出产生正弦波的位置,但没有找到。 任何帮助将不胜感激 谢谢

【问题讨论】:

  • 你问的是如何产生方波?或者你的代码在哪里这样做?
  • 我现在在问如何生成方波或三角信号。当我尝试 x=sgn(sin(x/period *2*M_Pi) 时,它不起作用
  • 我会发布一个关于方波的答案。

标签: c++ qt waveform qwt


【解决方案1】:

要生成“数学方波”,意思是非带限方波,请使用以下代码:

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

这是我用于“数学”非带限锯波的代码。 让我知道你是否需要我解释一下。

【讨论】:

  • 谢谢 Alex,代码帮助了我,也许你也知道生成“数学三角波”的代码?而且我还想修改代码以获得两个香奈儿,以便在香奈儿1中我有正弦波和香奈儿2方波,最后我现在的意图也是实时分析。我用 Qtaudio 从我的电脑麦克风捕获信号,并在示波器上显示信号。你能给我一些建议吗?谢谢
  • @user2932518 我实际上不知道如何正确地做三角波,但如果你愿意,我可以给你一个数学锯齿波?
  • @user2932518 在我的回答中添加了锯
  • @user2932518 如果我的回答对您有帮助,您可以点击“接受”按钮。(如果您不知道,请勾选)
【解决方案2】:

在示波器目录中搜索字符串“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;
}

【讨论】:

  • 非常感谢,我现在问如何生成方波或三角信号。当我尝试 x=sgn(sin(x/period *2*M_Pi) 时,它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多