发 帖  
原厂入驻New
[问答] 如何设置WaveDaBibe?
336 DAC 编码 正弦波
分享
大家好,我正在做一个项目,需要同时产生多个正弦波来驱动高音喇叭。背景是我想把图像转换成声波。每个像素将被设计成具有特定振幅和频率的特定正弦波。如果我想将图像转换为64×64分辨率,则需要生成的正弦波量为4096。
这里有一个问题,我查阅了使用WaveDAC8的波形生成技术文档,但是CouthtimePayStudio实际上是通过使用两个DAC并行地将两个不同的正弦波相加。我知道在PSoC 5 LP中使用数千个DAC不可能增加数千个正弦波。因此,我研究了WaveDACK的局限性,其结果是,我可以同时产生最大的4个波。一个应用工程师建议我设计一个算法,在把这些正弦波加到DMA之前,把这些数千个正弦波相加,然后用DMA通道把最终结果传送到一个WaveDAC8。这是可行的吗?
如果可行的话,有人能帮助我进一步分享我的相关技术文件吗?我不知道如何将这些正弦波添加到编码前的DMA中,然后如何设置WaveDaBibe。我能做的是创建一个振幅表和对应于图像像素的频率表,通过matlab编码。
多谢!
术语
0
2019-10-11 09:29:50   评论 分享淘帖 邀请回答

相关问题

5个回答
当你把同样的问题发布到多个、无关联的论坛时(你的问题既不是一个已知的问题),也不是与“设备编程”有关的问题,它并没有真正的帮助。
答案应在这里处理:HTTP//wwwyCyp.com /FoMU/PSOC-5架构/问题波形生成-PSOC-5-LP
2019-10-11 09:49:00 评论

举报

生成正弦波的阵列的算法很简单。您可以在电子表格中使用公式=Sin(2×PI-(*)*A1/61)* 0.75,其中61表示单个波周期中的样本数,0.75表示振幅。如果你在C中做了很多这些,我想你很快就会看到某些问题。首先,在没有内存不足的情况下,不能有4096个数组,因此在汇总两个数组的值之后,您希望重新使用数组。其次,假设你的数组长度是128个样本。对于在128中没有整数倍的波长的任何波长,当输出回到样本[0 ]时,在样本(127)上不会交叉在零上。因此,你会在这些频率上产生严重的交叉失真。下面是一段代码,它预先生成两个不同频率和振幅的正弦波,并将两个正弦波相加。我不是说这是一个解决办法,事实上,我认为这说明了你可能会遇到什么问题。您可能想在硬件中寻找模拟解决方案。
定义π3.14159265α定义幅值1,0.5,UTIN 8 i,j;浮子SnWaW1[128 ],SnWal2[128 ];浮子SUFFOWAL(128);(i=0;I & lt;128;i++)SUFOFWORD [I]=0;(i=0;I & lt;128;i++){SnWav1=(i*2*π/128)*振幅1;/ /结束点在ZE的包装RO到下一个波形SnWav2=(i*2×π/61)*振幅2;(或)注意在零SUFFWORD中两端将不交叉 += SnWav1 + SnWav2;}输出(SUFFWAVE);/ /一些将输出信号的函数;
2019-10-11 10:05:13 评论

举报

定义π3.14159265
我们学会了窍门。
定义π(4 *AATN(1))//这是在编译时以最佳精度评估的常数。
鲍勃
2019-10-11 10:17:41 评论

举报

卿小知1 发表于 2019-10-11 11:40
生成正弦波的阵列的算法很简单。您可以在电子表格中使用公式=Sin(2×PI-(*)*A1/61)* 0.75,其中61表示单个波周期中的样本数,0.75表示振幅。如果你在C中做了很多这些,我想你很快就会看到某些问题。首先,在没有内存不足的情况下,不能有4096个数组,因此在汇总两个数组的值之后,您希望重新使用数组。其次,假设你的 ...

我试图产生一个正弦波,但我失败了。结果显示我有一个4V直流电压(可能是因为我设置了DAC规模:0~4.08V),请看一下我的代码,看看有什么不对吗?我还尝试了你的方程式正弦波=(i×2×π/800)*振幅;(假设每周期需要800个样本),但结果是相同的。也许我认为完全错了?我在调试中花了很多时间,但没法弄清楚。
我的代码:
项目包括H.& Gt;
*定义表大小1000 / /样本量,定义两个ππ(3.14159×2),定义振幅1,定义Max FRIQ 400,定义FRQQ1 200,定义最大频率800。
It主(){浮点样本[TablaySime];浮点时间增量=(1 /Max FRIQ)/ SamplePerPeriod;int数字结果[TablaySime];浮点T[表大小];/ /每个采样点浮点ADCdP=(2×振幅)/255;int i;vdAc811x启动();(i=0;i;lt;TablySige;I++){t=i *时间增量;样本=幅值*Sin(TooOiπ* FrqY1*t);//样本((i*TooOiπ)/ SamplePerPeriod)*幅度;数字结果[I] =(int)((样本 +振幅)/ADC增量);VDAC811StValk(DigialReal);CyDelayUs(1);//时间intErVar是3.13US }//}返回0;}
多谢!!
当做,
术语
2019-10-11 10:37:13 评论

举报

您可以尝试在第一个循环中创建具有数据的表,然后使用第二个循环将它们发送到DAC。这样,您可以在第一个循环之后放置断点(或者通过UART发送到PC),并检查其中的值确实是正确的。
2019-10-11 10:49:44 评论

举报

只有小组成员才能发言,加入小组>>

417个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表