网站建设公司 深圳信科,上海商业网站建设费用,网站导航作用,网络推广培训策划简介
我们都知道#xff0c;在信号发生器中#xff0c;有一个扫频模式#xff1a;指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出#xff0c;扫频模式支持线性扫频、对数扫频、和步进扫频三种方式。
起始频率和终止频率
起始频率和终止频率是频率扫描的频…简介
我们都知道在信号发生器中有一个扫频模式指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出扫频模式支持线性扫频、对数扫频、和步进扫频三种方式。
起始频率和终止频率
起始频率和终止频率是频率扫描的频率上限和下限。信号发生器总是从起始频率扫频到终止频率然后又回到起始频率。 当起始频率 终止频率信号发生器从低频向高频扫描。 当起始频率 终止频率信号发生器从高频向低频扫描。 当起始频率 终止频率信号发生器以固定频率输出。
修改“起始频率”或“终止频率”后信号发生器将重新从指定的“起始频率”开始扫频输出。
扫频类型
扫频类型分为线性、对数、步进三种扫频类型。默认为线性扫频。
线性扫频
在线性扫频模式下输出信号的频率以线性的方式变化即每秒若干赫兹的方式改变输出频率该变化由起始频率、终止频率和扫描时间控制。
对数扫频
在对数扫频方式下仪器输出信号的频率以对数方式变化即每秒倍频程或每秒十倍的方式改变输出频率该变化由起始频率、终止频率、和扫描时间控制。
启用对数扫频时用户可以设置以下几个参数起始频率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 i0;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 (10)){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 (10)){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 (10)){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;}}
}