📄 bandwidth.m
字号:
%function bandwidth
%对任意输入信号求带宽
% rect_a输入信号
% dt_a输入信号采样周期
% threshold 带宽门限 单位db
% ss_e输出单边功率谱密度信号
% f_high上限频率
% f_low下限频率
% bw_a输入信号带宽
function [ss_e,f_high,f_low,bw]=bandwidth(signal,dt,threshold)
%step1 evaluation of single sided esd
fs=1/dt; %抽样频率
n=length(signal); %抽样点数,即fft长度
t=n*dt; %时间窗口
df=1/t; %基本频率
x=fft(signal);
x=x/n; %matlab幅度谱转为傅氏谱
ds_e=abs(x).^2/(df^2); %双边功率谱
ss_e=2*ds_e(1:floor(n/2)); %单边功率谱
%step2 evaluation of bandwidth
[epeak,index]=max(ss_e);
f_peak=index*df;
eth=epeak*10^(threshold/10); %门限电平
%选择上下限频率
imax=index;
e0h=ss_e(index);
while (e0h>eth)&(imax<=(n/2))
imax=imax+1;
e0h=ss_e(imax)
end %搜索上限频率
f_high=(imax-1)*df;
imin=index;
e0l=ss_e(index);
while (e0l>eth)&(imin>1)&(index>1)
imin=imin-1;
e0l=ss_e(imin);
end %搜索下限频率
f_low=(min(index,imin)-1)*df;
bw=f_high-f_low; %信号带宽
fprintf('\nFrequency Bandwidth=%f [Hz]\nHigh Frequency=%f [Hz]\nLow frequency=%f [Hz]',bw,f_high,f_low);
%step3 graphical output
figure(2)
frequency=linspace(0,fs/2,length(ss_e));
pf=plot(frequency,ss_e);
set(pf,'linewidth',[2]);
l1=line([f_high f_high],[min(ss_e),max(ss_e)]);
set(l1,'color',[0 0 0],'linestyle',':')
l1=line([f_low f_low],[min(ss_e) max(ss_e)]);
set(l1,'color',[0 0 0],'linestyle',':')
l1=line([f_low f_high],[eth eth]);
set(l1,'linewidth',[2],'color','red','linestyle',':')
axis([0.8*f_low 1.2*f_high -0.1*epeak 1.2*epeak]);
ax=gca;
set(ax,'fontsize',12);
t=title('Frequency domain');
set(t,'fontsize',14);
x=xlabel('Frequency [Hz]');
set(x,'fontsize',14)
y=ylabel('Single_sided ESD [V^2s/Hz]');
set(y,'fontsize',14);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -