gpt4 book ai didi

c++ - 在 C++ 中连接数组中的数据

转载 作者:行者123 更新时间:2023-11-28 06:26:47 33 4
gpt4 key购买 nike

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

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

想法是有一个全局缓冲区,用于存储最后记录的 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 个样本的 vector ,此外还释放了一些位置,因此需要一些处理时间。选择的另一种方法是使用 * 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];
}
}

确实失败了。我认为最好的方法是使用动态内存。通过指针实现这个过程。谁能告诉我如何实现它?

最佳答案

听起来您正在寻找的是一个循环缓冲区。

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

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

希望对您有所帮助。

关于c++ - 在 C++ 中连接数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28386976/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com