Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1333731
  • 博文数量: 124
  • 博客积分: 5772
  • 博客等级: 大校
  • 技术积分: 1647
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-27 10:39
文章分类

全部博文(124)

文章存档

2020年(1)

2019年(1)

2018年(5)

2017年(2)

2016年(17)

2015年(3)

2014年(7)

2013年(11)

2012年(13)

2011年(30)

2010年(34)

分类: Windows平台

2014-01-10 00:40:37

对于超宽带(UWB)信号,相对带宽或带宽及中心频率是其中两个重要的参数。如果已经得到UWB信号谱,那么通过信号谱如何来计算带宽及中心频率呢?
一般来说,UWB信号谱可以通过直接测量或者由OptiSystem得到,是离散谱。通过拟合的方法,可以求得其中心频率及带宽。以下是自定义的求中心频率和带宽的函数find_UWB:

  1. %==========================================================================
  2. %Name: function [cw,bw_low,bw_up,val_low,val_up,val_max]=find_UWB(filename)
  3. %Desc: 已知由OptiSystem产生的UWB脉冲的频谱文件(.txt)
  4. % 求其中心频率和-10dB带宽
  5. %Parameter: [in]finename,UWB频谱文件,该频谱文件已经去除了直流
  6. %Return: [out]cw,返回中心频率的值
  7. % [out]bw_low,返回-10dB带宽所对应的低端频率
  8. % [out]bw_up,返回-10dB带宽所对应的高端频率
  9. % [out]val_low,返回bw_low所对应的UWB频谱值(dBm)
  10. % [out]val_up,返回bw_up所对应的UWB频谱值(dBm)
  11. % [out]val_max,返回UWB频谱最大值(dBm)
  12. %Author: yoyoba(stuyou@126.com)
  13. %Date: 2014-1-7
  14. %Modify: 2014-1-10
  15. %=========================================================================
  16. function [cw,bw_low,bw_up,val_low,val_up,val_max]=find_UWB(filename)
  17. uwb=load(filename); %已除去直流分量的UWB频谱
  18. uwb_f=uwb(:,1); %读入频率值
  19. uwb_val=uwb(:,2); %读入频谱值
  20. imax=find(diff(sign(diff(uwb_val)))==-2)+1; %由OptiSystem产生的UWB频谱是离散谱
  21. %有些频点的值为0,为了后续的数据拟合,需要把不为0的点单独提取出来,即寻找极大值
  22. tuwb_val_max=uwb_val(imax); %频谱中的一系列极大值
  23. tuwb_ff_max=uwb_f(imax); %极大值所对应的频率点
  24. uwb_val_max=zeros(size(tuwb_val_max));
  25. uwb_ff_max=zeros(size(tuwb_ff_max));
  26. uwb_val_max(1)=tuwb_val_max(1);
  27. uwb_ff_max(1)=tuwb_ff_max(1);
  28. for i=1:length(tuwb_val_max)-1 %由于UWB频谱存在一些伪最大值点,该循环用来
  29.     %去除这些伪最大值点,原理是两个相邻点差值小于10dB的认为是伪最大值点。
  30.     if tuwb_val_max(i)-tuwb_val_max(i+1)>10
  31.         uwb_val_max(i)=tuwb_val_max(i);
  32.         uwb_ff_max(i)=tuwb_ff_max(i);
  33.     end
  34.     if tuwb_val_max(i)-tuwb_val_max(i+1)<-10
  35.         uwb_val_max(i+1)=tuwb_val_max(i+1);
  36.         uwb_ff_max(i+1)=tuwb_ff_max(i+1);
  37.     end
  38. end
  39. uwb_val_max=uwb_val_max(uwb_val_max<0);
  40. uwb_ff_max=uwb_ff_max(uwb_ff_max>0);
  41. p5_uwb_val_max=polyfit(uwb_ff_max,uwb_val_max,5); %5阶多项式拟合
  42. deltaf=uwb_ff_max(1):1e+6:uwb_ff_max(end); %频率间隔1MHz
  43. p5val=polyval(p5_uwb_val_max,deltaf); %计算频率间隔为1MHz对应的频谱值
  44. [p5max,ip5max]=max(p5val); %频谱最大值及所在位置
  45. p5max_10dB=p5max-10; %最大值-10dB
  46. p5val_10dB=p5val-p5max_10dB; %频谱值-10dB
  47. ibw=find(diff(sign(diff(abs(p5val_10dB))))==2)+1; %寻找频谱值-10dB之后绝对值的最小值的位置
  48. bw_low=deltaf(ibw(1)); %-10dB带宽低端频率
  49. bw_up=deltaf(ibw(2)); %-10dB带宽高端频率
  50. val_low=p5val(ibw(1)); %bw_low所对应的UWB频谱值(dBm)
  51. val_up=p5val(ibw(2)); %bw_up所对应的UWB频谱值(dBm)
  52. val_max=p5max; %UWB频谱最大值(dBm)
  53. cw=bw_low+(bw_up-bw_low)/2; %中心频率

对于使用OS得到的UWB信号谱:posi_1_1_f.txt,调用该函数,计算其中心频率及带宽,如下:

  1. filename='posi_1_1_f.txt';
  2. [cw,bw_low,bw_up,val_low,val_up,val_max]=find_UWB(filename);
  3. uwb=load(filename);
  4. plot(uwb(:,1)*1e-9,uwb(:,2),'k','linewidth',2);
  5. hold on
  6. plot([bwlow,bwup]*1e-9,[val_low,val_up],'r','linewidth',2);
  7. axis([0,15,-100,-75]);
  8. xlabel('Frequency(GHz)');
  9. ylabel('Power (dBm)');
  10. set(get(gca,'XLabel'),'FontSize',14,'FontName','Times New Roman');
  11. set(get(gca,'YLabel'),'FontSize',14,'FontName','Times New Roman');
  12. set(gca,'FontName','Times New Roman','FontSize',14)

结果为:

posi_1_1_f.txt

阅读(1562) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~