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.

[参考译文] CCS/PCM1744:音频编解码器生成正弦波

Guru**** 2392505 points
Other Parts Discussed in Thread: PCM1744, DIR9001

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/889965/ccs-pcm1744-audio-codec-generate-sin-waves

器件型号:PCM1744
主题中讨论的其他器件: DIR9001

工具/软件:Code Composer Studio

您好,我想通过 PCM1744,生成一个正弦波、但是如何生成一个变频正弦波?您能帮我吗??  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Chu Zhuo、

    我们的音频 DAC 都没有内置音调发生器、它们都需要在外部应用数字信号。  这意味着您将需要一些可生成正弦波的 I2S 源。  这可以是音频 DSP、S/PDIF 到 I2S 转换器(DIR9001)或 USB 到 I2S 桥接器。  然后、您可以使用具有 USB 或 SPDIF 输出的 PC 来播放提示音。   

    谢谢、

    Paul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我有一个带有 I2S 接口的微处理器,PCM1744通过  I2S 接口连接到微处理器。现在 PCM1744可以通过 ROM 数据生成正弦波。但是、如何更改正弦波的频率?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我希望扫描频率从 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