声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 matlab 查看内容

Matlab实例:频谱、功率谱和功率谱密度计算

2018-2-7 15:22| 发布者: weixin| 查看: 1091| 评论: 1|原作者: weixin|来自: 声振之家公众号

摘要: 本实例以高斯信号为例,计算幅度谱、相位谱、双边功率谱、双边功率谱密度、单边功率谱、单边功率谱密度。
  本实例以高斯信号为例,计算幅度谱、相位谱、双边功率谱、双边功率谱密度、单边功率谱、单边功率谱密度。高斯信号的半波全宽FWHM=50ps,中心点位于2.5ns处。

  MATLAB程序代码:

%================
%作者:yoyoba
%================
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),
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');

  运行结果:
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png

  本文来源于chinaunix网stuyou的博客。

发表评论

最新评论

引用 ljq519781936 2018-4-21 21:38
学习一下

查看全部评论(1)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-30 09:40 , Processed in 0.276851 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部