小编use*_*795的帖子

在C++ STL中交织/解交织3个向量

我正在尝试将三个信号波形组合成一个交错的波形.我需要知道在C++ STL中实现它的最佳方法.更好的解决方案将使用尽可能多的C++ STL样式,避免冗余代码等.是否有一些STL"元组"类型类可以为我做这个?我始终需要连续存储以便与其他代码向后兼容(因此,向量).最好的解决方案是正确且易于理解的.空间和速度并不像正确性易于理解那样重要.

输出波形必须按如下顺序排序:来自第一个通道的第一个样本,来自第二个通道的第一个样本,来自第三个通道的第一个样本,然后继续来自每个通道的第二个样本,并对所有样本重复.我知道所有三个输入波形都具有相同数量的样本.

在Matlab中,我会这样做:

function outputWaveform=Interleave3(a, b, c)
outputWaveform=zeros([1 3*length(a)]);
outputWaveform(1:3:end)=a(:);
outputWaveform(2:3:end)=b(:);
outputWaveform(3:3:end)=c(:);

这是我的第一次C++ STL尝试:

typedef vector<double>  dVector;
typedef vector<double>::iterator  dVectorIT;
dVector Interleave3(dVector a, dVector b, dVector c)
{
    dVector result(0, 3*a.size());
    dVectorIT aIT=a.begin(), bIT=b.begin(), cIT=c.begin(), rIT=result.begin();
    for(; aIT != a.end(); ++aIT, ++bIT, ++cIT)
    {
        *rIT++=*aIT;
        *rIT++=*bIT;
        *rIT++=*cIT;
    }
    return  result;
}

它有效,但是有更好的方法吗?我希望有一些聪明的方法可以用transform()在一行中完成它.你可以将b附加到a,然后将c附加到a,然后将临时"a1a2a3 ...- b1b2b3 ...-c1c2c3 ..."向量转换为"a1b1c1a2b2c2a3b3c3 ..."?

额外问题:我还需要逆操作(将3*N个样本的输出波形分成3个N个样本的矢量).Matlab解决方案非常简单:

function [a, b, c]=Deinterleave3(outputWaveform)
a=outputWaveform(1:3:end);
b=outputWaveform(2:3:end);
c=outputWaveform(3:3:end);

C++ STL似乎相当尴尬,我敢打赌,有一个更好的方法来做到这一点:

typedef vector<double …

c++ stl signal-processing

2
推荐指数
1
解决办法
2080
查看次数

标签 统计

c++ ×1

signal-processing ×1

stl ×1