Changeset - cd99f9b81da2
[Not reviewed]
gain-offset
0 3 0
Hasan Yavuz Ă–ZDERYA - 7 years ago 2018-07-08 05:50:12
hy@ozderya.net
preliminary implementation of gain and offset
3 files changed with 40 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/channelinfomodel.cpp
Show inline comments
 
@@ -118,6 +118,26 @@ bool ChannelInfoModel::isVisible(unsigne
 
    return infos[i].visibility;
 
}
 

	
 
bool ChannelInfoModel::gainEn (unsigned i) const
 
{
 
    return infos[i].gainEn;
 
}
 

	
 
double ChannelInfoModel::gain (unsigned i) const
 
{
 
    return infos[i].gain;
 
}
 

	
 
bool ChannelInfoModel::offsetEn (unsigned i) const
 
{
 
    return infos[i].offsetEn;
 
}
 

	
 
double ChannelInfoModel::offset (unsigned i) const
 
{
 
    return infos[i].offset;
 
}
 

	
 
QStringList ChannelInfoModel::channelNames() const
 
{
 
    QStringList r;
src/channelinfomodel.h
Show inline comments
 
@@ -46,6 +46,10 @@ public:
 
    QString name     (unsigned i) const;
 
    QColor  color    (unsigned i) const;
 
    bool    isVisible(unsigned i) const;
 
    bool    gainEn   (unsigned i) const;
 
    double  gain     (unsigned i) const;
 
    bool    offsetEn (unsigned i) const;
 
    double  offset   (unsigned i) const;
 
    /// Returns a list of channel names
 
    QStringList channelNames() const;
 

	
src/stream.cpp
Show inline comments
 
@@ -154,11 +154,25 @@ void Stream::feedIn(const SamplePack& da
 
    {
 
        static_cast<RingBuffer*>(xData)->addSamples(data.xData(), ns);
 
    }
 
    for (unsigned i = 0; i < numChannels(); i++)
 
    for (unsigned ci = 0; ci < numChannels(); ci++)
 
    {
 
        static_cast<RingBuffer*>(channels[i]->yData())->addSamples(data.data(i), ns);
 
        // TODO: check for gainEn and offsetEn
 
        // apply gain and offset
 
        auto rdata = data.data(ci);
 
        auto mdata = new double[sizeof(double) * ns];
 
        // TODO: add gain&offset access methods to `StreamChannel`
 
        double gain = channels[ci]->info()->gain(ci);
 
        double offset = channels[ci]->info()->offset(ci);
 
        for (int i = 0; i < ns; i++)
 
        {
 
            mdata[i] = rdata[i] * gain + offset;
 
        }
 

	
 
        static_cast<RingBuffer*>(channels[ci]->yData())->addSamples(mdata, ns);
 
        delete[] mdata;
 
    }
 

	
 
    // TODO: emit modified (gain&offset) data
 
    Sink::feedIn(data);
 

	
 
    emit dataAdded();
0 comments (0 inline, 0 general)