Matlab實例:頻譜、功率譜和功率譜密度計算

本實例以高斯信號為例,計算幅度譜、相位譜、雙邊功率譜、雙邊功率譜密度、單邊功率譜、單邊功率譜密度。高斯信號的半波全寬FWHM=50ps,中心點位于2.5ns處。


MATLAB程序代碼



%================

%作者:yoyoba

%Email:stuyou@126.com

%================

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.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

8.jpg

9.jpg

Source:聲振之家

轉引自chinaunix網stuyou的博客,若侵請告之,即刪。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
3