用C ++连接数组中的数据

时间:2015-02-07 20:26:12

标签: c++ qt

我正在开发使用Qt在C ++中实时处理音频的软件。我需要最小化要求。

定义一个临时缓冲区40ms,以采样频率Fs = 8000Hz启动我们的设备,每320个样本进入一个名为Data Processing()的功能。

我们的想法是拥有一个全局缓冲区,用于存储最后记录的10个样本,80000个样本。 在每次迭代中,此缓冲区消除了最初的320个样本,最后循环了320个新样本。因此,缓冲区被更新,用户可以观察记录信号的实时图形表示。

起初我想过为这个部署使用QVector(相当于std::vector但对Qt而言),因此我们减少了几行代码的过程

int NUM_POINTS=320; 
DatosTemporales.erase(DatosTemporales.begin(),DatosTemporales.begin()+NUM_POINTS); 
DatosTemporales+= (DatosNuevos); // Datos Nuevos con un tamaño de NUM_POINTS

在每次迭代中,除了释放一些位置外,我们还创建了80000个样本的向量,因此需要一些处理时间。选择的另一种方法是使用* double,迭代循环:

 for(int i=0;i<80000;i++){ 
     if(i<80000-NUM_POINTS){ 
         aux=DatosTemporales[i]; 
         DatosTemporales[i+NUM_POINTS]=aux; 
     }else{ 
         DatosTemporales[i]=DatosNuevos[i-NUN_POINTS]; 
     } 
 }

失败。我认为最好的方法是使用动态内存。通过指针实现此过程。谁能让我知道如何实现它?

1 个答案:

答案 0 :(得分:1)

听起来你正在寻找的是循环缓冲区。

https://www.google.com/search?q=qcircularbuffer

https://qt.gitorious.org/qt/qtbase/merge_requests/60

看起来你只需要头文件,你应该好好去。

可在此处找到Qt数据集中已有的类似工具:

http://doc.qt.io/qt-5/qcontiguouscache.html#details

使用这些系统的优势在于它们不需要动态内存,只需要移动头部和尾部指针。

希望有所帮助。