主题中讨论的其他器件: DIR9001
工具/软件:Code Composer Studio
您好,我想通过 PCM1744,生成一个正弦波、但是如何生成一个变频正弦波?您能帮我吗??
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我希望扫描频率从 100Hz 到1000Hz,step 为0.1Hz。 但我不能使这成为事实。我不能相信这是因为样片只有96KHz。
程序生成 fllow 的 sin ROM 数据:
双精度 t=0.0;
double f=200.5;
U16 I=0;
U16 DA_SampleNum=0;
u32 SampleRate=96000;
u32 SIN_BASE_BUF[4096];
da_SampleNum=SampleRate*1.0/f;
I=0;
while (<DA_SampleNum)
{
T=(双倍) I/SampleRate;
Sin_BASE_BUF[i]= 16777215/2.0*(arm_sin_F32 (2.0* pi*f*t)+1.0);
i++;
}
尊敬的 Paul:
我希望扫描频率从 100Hz 到1000Hz,step 为0.1Hz。 但我不能使这成为事实。我不能相信这是因为样片只有96KHz。
程序生成 fllow 的 sin ROM 数据:
双精度 t=0.0;
double f=200.5;
U16 I=0;
U16 DA_SampleNum=0;
u32 SampleRate=96000;
u32 SIN_BASE_BUF[4096];
da_SampleNum=SampleRate*1.0/f;
I=0;
while (<DA_SampleNum)
{
T=(双倍) I/SampleRate;
Sin_BASE_BUF[i]= 16777215/2.0*(arm_sin_F32 (2.0* pi*f*t)+1.0);
i++;
}
您好!
我认为您有两个主要选择:
您可以为其他速率动态创建 SIN_BAS_BUF、
2.您可以创建具有许多点的非常大的 SIN_BAS_BUF、然后使固件以不同的间隔通过阵列递增。 例如、创建一个表示单个正弦波周期的96000点的 BUF。 然后、如果您需要1000kHz 正弦波、速率为96ksps、则以1000代码增量递增该数组。 如果您需要100Hz 正弦波、则以100kHz 的增量递增。
谢谢、
Paul
您好,Paul
我无法理解您的示例。我希望扫描频率从 100Hz 到1000Hz。STEP 为0.1Hz 乘以 PCM1744。PCM1744最大钕率为96ksps。
例如、创建一个 f=100Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 fs/f=96000/100=960点;
创建一个 f=100.1Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 fs/f=96000/100.1=959.04、采用圆数959点;
创建一个 f=100.2Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 FS/f=96000/100.2=958.08、以圆数958个点、以此类推。
但 创建 f=1000Hz 正弦波,在96ksps 速率下,LRCIN 为 fs=96kHz,因此需要 fs/f=96000/1000=96点;
创建一个 f=999.9Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 fs/f=96000/999.9=96.009、以整数表示96个点;
创建一个 f=999.8Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 fs/f=96000/999.8=96.019、以整数为96点;
创建一个 f=998Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 fs/f=96000/998=96.192、以圆数96点;
创建一个 f=990Hz 正弦波、在96ksps 速率下、LRCIN 为 fs=96kHz、因此需要 FS/f=96000/990=96.969、以整数为96点、以此类推。
由于采样率恒定、发送 DA 数据的时间间隔是恒定的。仅通过点数控制正弦波频率。但点数不能这样做。
除非微处理器能够在数据传输时计算正弦值、否则这将是一个难以解决的问题。 如果是这种情况、您可以让它计算每个单独样本的新值。
考虑这一点:为正弦波的1个周期创建一个非常大的输出代码数组、例如96、000点。 (96K 个样本/周期)
假设您以96k 样本/秒的速率使用数组中的每个样本、则每秒有1个周期、即1Hz。
如果跳过数组中的每隔一个代码、那么您有48k 个样本/周期、并以96k 个样本/秒的频率播放、您有2Hz。
如果您每播放100个代码、那么您就有100kHz 的频率。 如果跳过100.1代码、则会有100.1Hz 等
现在、由于阵列内置有限的分辨率、您将会有一些失真、但您可以通过使用更大的阵列9、600、000来降低失真。 您不需要使用96k 的倍数数组、但它确实可以简化数学运算。
谢谢、
Paul