Пример осциллографа QWT генерирует синусоидальную форму, для моего проекта я хотел бы генерировать прямоугольную или косинусную волну.
Я пытался выяснить, где генерируется синусовая волна, я не нашел.
любая помощь будет оценена
Спасибо
Для генерации «математической прямоугольной волны», означающей прямоугольную волну без ограничения полосы, используйте следующий код:
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 ;
}
Это код, который я использую для «Математической» беззонной ограниченной пильной волны.
Дай мне знать, если я тебе понадоблюсь, чтобы объяснить это
Поиск в каталоге осциллографа строки «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;
}