mbed 生成线性调频信号
mbed generate chirp singal
我正在使用 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;
}
}
}
}
在这种情况下,我建议您使用执行任务的线程:
#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
}
}
我正在使用 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;
}
}
}
}
在这种情况下,我建议您使用执行任务的线程:
#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
}
}