Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1219471
  • 博文数量: 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平台

2015-04-28 14:51:01

以高斯信号为例,计算幅度谱、相位谱、双边功率谱、双边功率谱密度、单边功率谱、单边功率谱密度。(转载请注明出处)
MATLAB程序代码:

  1. %==========================================================================
    %Name:      spectrum_analysis.m
    %Desc:      以高斯信号为例,求解其频谱、双边功率谱、单边功率谱、双边功率谱密度、
    %           单边功率谱密度,这里高斯信号的半波全宽FWHM=50ps,中心点位于2.5ns处。
    %Parameter: 
    %Return:    
    %Author:    yoyoba(stuyou@126.com)
    %Date:      2015-4-28
    %Modify:    2015-4-29
    %=========================================================================
    clc;
    clear;
    FWHM=50e-12;            %高斯信号FWHM宽度,为50ps
    time_window=100*FWHM;   %高斯信号的采样窗口宽度,该值决定了傅里叶变换后的频率分辨率
    Ns=2048;                %采样点
    dt=time_window/(Ns-1);  %采样时间间隔
    t=0:dt:time_window;     %采样时间
    gauss_time=exp(-0.5*(2*sqrt(2*log(2))*(t-2.5e-9)/FWHM).^2); %高斯脉冲,中心位于2.5ns处。
    plot(t*1e+9,gauss_time,'linewidth',2.5);
    xlabel('Time/ns');
    ylabel('Amplitude/V');
    title('Gauss pulse');
    %===========以下计算双边谱、双边功率谱、双边功率谱密度=================
    gauss_spec=fftshift(fft(ifftshift(gauss_time)));    %傅里叶变换,并且进行fftshift移位操作。
    gauss_spec=gauss_spec/Ns;   %求实际的幅度值;
    df=1/time_window;               %频率分辨率
    k=floor(-(Ns-1)/2:(Ns-1)/2);    
    % k=0:Ns-1;
    double_f=k*df;   %双边频谱对应的频点


    figure; %幅度谱
    plot(double_f*1e-9,abs(gauss_spec),'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Amplitude/V');
    title('double Amplitude spectrum');


    figure; %相位谱
    plot(double_f*1e-9,angle(gauss_spec),'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Phase/rad');
    title('double Phase spectrum');


    figure; %功率谱
    double_power_spec_W=abs(gauss_spec).^2;                 %双边功率谱,单位W;
    double_power_spec_mW=double_power_spec_W*1e+3;          %双边功率谱,单位mW;
    double_power_spec_dBm=10*log10(double_power_spec_mW);   %双边功率谱,单位dBm;
    plot(double_f*1e-9,double_power_spec_dBm,'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Power/dBm');
    title('double Power spectrum');


    figure; %功率谱密度
    double_power_specD_W=abs(gauss_spec).^2/(df);       %双边功率谱密度,单位W/Hz
    double_power_specD_mW=double_power_specD_W*1e+3;    %双边功率谱密度,单位mW/Hz
    double_power_specD_dBm=10*log10(double_power_specD_mW);%双边功率谱密度,单位dBm/Hz
    plot(double_f*1e-9,double_power_specD_dBm,'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Power/(dBm/Hz)');
    title('double power spectrum Density');


    %==========以下计算单边谱、单边功率谱及单边功率谱密度=========
    gauss_spec=fft(ifftshift(gauss_time));  %计算单边谱无需fftshift
    gauss_spec=gauss_spec/Ns;       %计算真实的幅度值
    single_gauss_spec=gauss_spec(1:floor(Ns/2));
    single_f=(0:floor(Ns/2)-1)*df;


    figure; %幅度谱
    plot(single_f*1e-9,abs(single_gauss_spec),'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Amplitude/V');
    title('single Amplitude spectrum');


    figure; %相位谱
    plot(single_f*1e-9,angle(single_gauss_spec),'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Phase/rad');
    title('single Phase spectrum');


    figure;%功率谱
    double_power_spec_W=abs(gauss_spec).^2;  
    single_power_spec_W=2*double_power_spec_W(1:floor(Ns/2));   %单边功率谱,单位W
    single_power_spec_mW=single_power_spec_W*1e+3;              %单边功率谱,单位mW;
    single_power_spec_dBm=10*log10(single_power_spec_mW);       %双边功率谱,单位dBm;
    plot(single_f*1e-9,single_power_spec_dBm,'linewidth',2.5);  
    xlabel('Frequency/GHz');
    ylabel('Power/dBm');
    title('single Power spectrum');


    figure;%功率谱密度
    double_power_specD_W=abs(gauss_spec).^2/(df);
    single_power_specD_W=2*double_power_specD_W(1:floor(Ns/2));         %单边功率谱密度,单位W/Hz
    single_power_specD_mW=single_power_specD_W*1e+3;                    %单边功率谱密度,单位mW/Hz
    single_power_specD_dBm=10*log10(single_power_specD_mW);             %单边功率谱密度,单位dBm/Hz
    plot(single_f*1e-9,single_power_specD_mW,'linewidth',2.5);
    xlabel('Frequency/GHz');
    ylabel('Power/(dBm/Hz)');
    title('single power spectrum density');



运行结果:


spectrum_analysis.rar
阅读(55733) | 评论(2) | 转发(3) |
给主人留下些什么吧!~~

zhouxu03192015-07-03 19:22:49

这个可以应用与半个周期的正弦信号的处理吗?

laizhianzhi2015-07-02 01:18:20

你这个单边频谱计算是有点问题的