如何使用STM32F4 DAC生成混频正弦波?

问题描述 投票:0回答:2

我使用的是STM32F4 Discovery 板。我使用 DAC Channel1 生成了 10Hz 正弦波。

根据 STM 的应用说明,正弦波生成应按如下方式完成:

并且可以使用以下公式来产生所需的频率:

这是我的简单函数,可填充 100 个样本。由于我使用 fTimerTRGO = 1kHz,fSinewave 正确地为 1k/100 = 10Hz

Appl_getSineVal();
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)Appl_u16SineValue, 100, DAC_ALIGN_12B_R);
.
.
.
.
void Appl_getSineVal(void)
{
    for (uint8_t i=0; i<100; i+=1){
        Appl_u16SineValue[i] = ((sin(i*2*PI/100) + 1)*(4096/2));
    }
}

现在我想在同一通道上叠加另一个频率为 5Hz 的正弦波,以获得混合频率信号。我需要帮助如何解决这个问题。

我尝试用不同的正弦值填充 Appl_u16SineValue[] 数组,但这些尝试在这里不值得一提。

signal-processing stm32 dac sine-wave
2个回答
0
投票

为了组合两个正弦波,只需将它们相加即可:

sin(...) + sin(...)

由于总和在 [-2...2] 范围内(而不是 [-1...1]),因此需要对其进行缩放。否则会超出 DAC 范围:

0.5 * sin(...) + 0.5 * sin(...)

现在可以像以前一样适应DAC整数范围:

(0.5 * sin(...) + 0.5 * sin(...) + 1) * (4096 / 2)

除了增益 0.5 和 0.5,也可以选择其他增益,例如0.3 和 0.7。他们只需要加起来为 1.0 即可。

更新

对于 10Hz 和 5Hz 正弦波的具体情况,代码如下所示:

for (uint8_t i=0; i < 200; i++) {
    mixed[i] = (0.5 * sin(i * 2*PI / 100) + 0.5 * sin(i * 2*PI / 200) + 1) * (4096 / 2);
}

0
投票

我们如何改变频率?例如我想生成 DTMF 音。对于“1”,我需要 697hz + 1209hz。如何将上述公式应用于这些频率?我还想把采样频率设为8khz。

© www.soinside.com 2019 - 2024. All rights reserved.