信号发生器扫频模式详解:线性、对数与步进操作

信号发生器扫频模式详解:线性、对数与步进操作

简介

我们都知道,在信号发生器中,有一个扫频模式:指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出,扫频模式支持线性扫频、对数扫频、和步进扫频三种方式。

起始频率和终止频率

起始频率和终止频率是频率扫描的频率上限和下限。信号发生器总是从起始频率扫频到终止频率,然后又回到起始频率。

 当起始频率< 终止频率,信号发生器从低频向高频扫描。

 当起始频率> 终止频率,信号发生器从高频向低频扫描。

 当起始频率= 终止频率,信号发生器以固定频率输出。

修改“起始频率”或“终止频率”后,信号发生器将重新从指定的“起始频率”开始扫频输出。

扫频类型

扫频类型分为线性、对数、步进三种扫频类型。默认为线性扫频。

线性扫频

在线性扫频模式下,输出信号的频率以线性的方式变化,即每秒若干赫兹的方式改变输出频率,该变化由起始频率、终止频率和扫描时间控制。

对数扫频

在对数扫频方式下,仪器输出信号的频率以对数方式变化,即每秒倍频程或每秒十倍的方式改变输出频率,该变化由起始频率、终止频率、和扫描时间控制。

启用对数扫频时,用户可以设置以下几个参数:起始频率Fstart,终止频率Fstop和扫描时间 Tsweep。对数扫频的函数原型为:

Fcuurent 为当前输出的瞬时频率,参数P和T可用以上参数表示如下,

其中,t 为扫频开始所经历的时间,范围在 0 到 Tsweep之间。

步进扫频

在步进扫频方式下,仪器输出信号的频率从“起始频率”到“终止频率”之间以阶梯式“步进”,输出信号在每个频点上停留的时间长短由“扫描时间”和“步进数”控制。

在下图中,我们可以看到一条阶梯波,表明输出频率以阶梯式“步进”变化。

扫描时间

扫描时间默认为1S。范围可以设置1ms 到 500S。修改扫描时间后,信号发生器将重新从指定的“起始频率”开始扫频输出。

这个扫瞄时间与信号本身的频率并不冲突,如起始频率设置为10HZ(100ms),终止频率设置为1KHZ。扫描时间设置100ms。这个时候扫频时间影响的是各个频率点驻留的时间,如果扫瞄时间设置较大,频率变化就较小,如果扫描时间设置较小,频率变化就较大。

算法:

线性扫频

// 假设 扫频率 为: sampleRate 即为总时间内,频率需要变化多少次。

//扫频时间

this->totaltime = this->timeValue; // 时间以秒为单位,直接使用

//需要输出频率变化总数

this->totalsamples = (int) (this->totaltime * this->sampleRate); // 样品总数

//获得差值

double diff = endFreq - startFreq;

//输出频率

double omega;

//每个频率点的频率值

for(double i=0;i <= totalsamples;i++)

{

t = (i / (double) this->totalsamples) * this->totaltime; // 现在的时间

omega = startFreq + (diff * t / this->totaltime);

}

简化后,即为:

omega = startFreq + (diff * i / this->totalsamples);

定时1ms中断服务函数中实现:

//TIMER3中断 1ms一次

void OS_TASK_IRQHandler(void)

{

static uint8_t s_state = 0;

static uint32_t s_outFrequency = 0;

static uint32_t s_timeCnt = 0;

//差值频率

double diff = tMasterBoardData.Flash_StopFreq - tMasterBoardData.Flash_StartFreq;

// u8 i = 0;

if (RESET != TIM_GetITStatus(OS_TASK_TIM,TIM_IT_Update))//检查TIM3更新中断发生与否

{

TIM_ClearITPendingBit(OS_TASK_TIM,TIM_IT_Update);

/* 全局运行时间每1ms增1 */

g_iRunTime++;

if (g_iRunTime == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */

{

g_iRunTime = 0;

}

switch (s_state)

{

/* 递增环节 */

case 0:

//频率改变,占空比不变

if(tMasterBoardData.Flash_SweepMode & (1<<0))

{

if(tMasterBoardData.Flash_RiseTime > g_iRunTime)

{

s_outFrequency = tMasterBoardData.Flash_StartFreq + diff * g_iRunTime / tMasterBoardData.Flash_RiseTime;

tMasterBoardData.ActualFrequenct = s_outFrequency;

Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);

}

else

{

g_iRunTime = 0;

s_state = 1;

}

}

break;

/* 保持环节 */

case 1:

if(tMasterBoardData.Flash_SweepMode & (1<<0))

{

if(tMasterBoardData.Flash_HodeTime > g_iRunTime)

{

s_outFrequency = tMasterBoardData.Flash_StopFreq;

tMasterBoardData.ActualFrequenct = s_outFrequency;

Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);

}

else

{

g_iRunTime = 0;

s_state = 2;

}

}

break;

/* 递减环节 */

case 2:

if(tMasterBoardData.Flash_SweepMode & (1<<0))

{

if(tMasterBoardData.Flash_FallTime > g_iRunTime)

{

s_outFrequency = tMasterBoardData.Flash_StopFreq - diff * g_iRunTime / tMasterBoardData.Flash_FallTime;

tMasterBoardData.ActualFrequenct = s_outFrequency;

Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);

}

else

{

g_iRunTime = 0;

s_state = 0;

}

}

break;

default:

break;

}

}

}

相关推荐

性生活需要「實驗與探索」!盤點6個增加情趣的秘技,給妳此生難忘的愛愛體驗!
公司的PS不能用了?看看这11个Photoshop替代软件!
萨博出场集数全部(请问海贼王萨博所有的出场集数)
365彩票下载1.0.0老版本

萨博出场集数全部(请问海贼王萨博所有的出场集数)

📅 07-04 👁️ 4458