【问题标题】:mbed generate chirp singalmbed 生成啁啾信号
【发布时间】:2018-03-23 15:44:39
【问题描述】:

我正在使用 LPCXpresso1549 生成频率在 35000 Hz 和 45000 Hz 之间的啁啾信号。首先,我在 matlab 上生成 DAC chirp 样本,并将它们存储在 const uint16_t chirpData[] 中。采样频率为 96000 Hz,因此有 96001 个采样。然后,我将计时器设置为每 (1/96000) 秒一个接一个地发送样本。但是,我得到的信号频率在 3200 Hz 到 44000 Hz 之间。是因为定时器慢吗?

enter code here
const uint16_t chirpData[NUM_SAMPLES] = { 2048, ...., 1728, 2048} //96001 sampels

 #include "mbed.h"
 #include "chirp.h"

 Serial pc(USBTX, USBRX);
 Timer t;
 AnalogOut aout(P0_12); 

 int main()
 {   
     int i = 0;

     while(true) {
         // Write the sample to the analog

         t.start(); //start timer
         if(t.read() >= 0.00001){ // 1/samplef = 0.00001
              aout.write_u16(chirpData[i]);

              i++;
              t.reset(); // reset timer to zero

              if(i > 96000) {
                  i = 0;
              }
          }
     }
 }

【问题讨论】:

    标签: mbed dac lpcxpresso


    【解决方案1】:

    在这种情况下,我建议您使用执行任务的线程:

    #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
    xTaskHandle taskHandle;
    xTaskCreate(..); //Check Task.h
    

    然后你可以设置你的任务周期

    void your_task() {
      unsigned task_cycle_ms = 1/freq; //Careful, convert to ms.
      portTickType xLastWakeTime = 0;
      portTickType xFrequency = task_cycle_ms/portTICK_RATE_MS;
      for(;;) {
        vTaskDelayUntil( &xLastWakeTime, xFrequency );
        //your code to execute every cycle here
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多