频谱各种模式显示原理与draw算法
频谱的趋势图模式:
简介
一般频谱图,如图下图所示:
现有常见的数字频谱绘制方法,横坐标:频率(MHz),纵坐标:功率(dBuV),这种方法只能直观反映当前时刻时域的信号信息,只能反映当前时刻的频谱信息,不能记录一段时间的频谱,即不能直观的观察频谱的变化趋势。
那么频谱的趋势图模式就是为了能直接观察频谱的变化趋势而设计的。
基本原理:
1:设定信号强度值的颜色显示范围,根据每个信号强度值映射出对应的颜色值;下图为本发明一个实施例的频谱趋势显示图:
横坐标:频率(MHz),纵坐标:功率(dBm),信号强度值的范围优选为:55-70 dBuV,设定的颜色显示范围为:蓝色-淡蓝色-绿色-黄色-红色,由此可以对照每个信号强度对应的颜色值。
2:采样出当前时刻的频谱信息,此时,当频率范围为950-2150MHz,在该频率范围内读取当前信号时域的频谱信息,保存该频率范围内每个频率的信号强度值作为参数;
3:根据信号强度值的颜色显示范围映射出每个频率对应的颜色值;例如:蓝色RGB值为:0000ff;淡蓝色RGB值为00ffff,他们对应的信号强度值分别为:55和58.75,两者之间的线性颜色区间为55-58.75,同理,淡蓝色-绿色-黄色-红色的线性颜色区间为58.75-62.5-66.25-70。由此可将55-58.75-62.5-66.25-70dBuV的信号强度值映射为频率对应的RGB颜色值。需要说明的是,颜色显示范围为上述五种颜色,而当信号发生改变时,信号强度值随之改变。
4:根据每个频率对应的颜色值,生成当前帧的频谱图;将映射出来的所有颜色值,从左到右,均匀的生成在一条直线上,作为一帧频谱数据。
5:设定画布宽度,保存一段时间内该频谱图的所有频谱信息后,舍弃超过画布宽度的频谱信息,保存后续进入画布的频谱信息,记录一段时间内的频谱趋势。具体流程如下图:
假设画布宽度设定只能存放50帧频谱数据,那么在画布上面累积画出50帧数据,并且保存。当超过50帧数据之后,舍弃最开始记录的那一帧频谱数据(即队列中第51帧频谱数据),相当于队列,先进先出。
draw算法:
1.计算频谱映射到osd的X轴坐标: X轴坐标 =(频率/带宽)频谱 x OSD宽度。
2.用两个点算出一个标准的一元二次方程(Y=KX+B),算出Y轴的斜率(K)。将X轴两点之间的所有坐标带进去算出所有的频率对应的强度。
3.有四个颜色区间,每个区间对应的信号强度范围,比如ref=60,信号强度0-20dBuV代表的是蓝色到淡蓝色;信号强度大于60就红色。通过RGB三色中的两个颜色值的范围,可以简单的用等比例映射出信号强度对应的具体颜色的RGB值。
4.每次只需要画当前获取的一条实时的频谱趋势图,之前画在画布或者osd上的可以用截取osd的方式将画布中特定区域的osd保存到buffer。
5.具体流程如上图,截取上次画布中第一条到第49条的数据到buffer,将实时频谱趋势图画在第一条,将buffer中的数据从第二条画到第50条。依次往复,就有一条一条往下画的感觉。
频谱的一般线条模式:
简介:
一般频谱图,如图所示,
为现有常见的数字频谱绘制方法,横坐标:频率(MHz),纵坐标:功率(dBuV)。
基本原理:
1.首先采样出当前时刻的频谱信息,假设频率范围为1220-1320MHz,在该频率范围内读取当前信号时域的频谱信息,保存该频率范围内每个频率的信号强度值作为参数;
2.因为每个频率对应的信号强度值,映射到如上图的坐标轴中。假如,1220频率对应的是30dBuV的信号强度,1221频率对应的是28dBuV的信号强度以此类推。这样其实在坐标轴上面只有一些离散的点,每个点的距离相差1M(这个就是分辨率带宽)。
3.算出每个频率的信号强度映射在坐标轴上的坐标之后,依次画出他们相邻点的直线(两点确定一线)。这样离散的点就画出来一条平滑的频谱线图。
这里有几点需要注意的是:
1.当分辨率带宽非常小,点的个数超过了osd的分辨率的时候,这里就需要涉及到舍弃一些点。
2.因为我们的坐标轴跟我们osd的显示坐标轴是相反的,需要转换。
3.由于我们引入菱形小图标作为光标,其精度要求比以前线条高很多,我们在所有的坐标换算一定要用double,保证误差控制在±1。
draw算法:
1.计算频谱映射到osd的X轴坐标: X轴坐标=(频率/带宽)x 频谱OSD宽度
2.计算频谱映射到osd的Y轴坐标: Y轴坐标=(dBuV/REF)x 频谱OSD高度
3.画线:用两个点算出一个标准的一元二次方程(Y=KX+B或者X=AX+C),算出X轴和Y轴的斜率(K和A)。取斜率小的一个方程式,将两点之间的所有坐标带进去算出所有的点,用画点函数一个一个画出来。(这里取斜率小的一方去画非常重要,因为会涉及到精确度的问题)