|
- %% 梯形波信号的频谱及其渐近线 于博士的代码
- clc; clear all;
- %%
- f0 = 10e6; % 10 MHz
- T = 1/f0; % 周期
- D = 0.5; % 占空比
- tol = D*T; % 脉宽
- A = 1; % 幅度
- Tr = 1e-9; % 上升时间1ns
- N = 600;
- %%
- %% 频谱包络
- f = (0.1:0.1:N)/T;
- S_temp =2*(A*tol/T)*abs(sin(pi*f*tol)./(pi*f*tol)).*abs(sin(pi*f*Tr)./(pi*f*Tr));
- fx = [0, f];
- S_env = [2*(A*tol/T), S_temp];
- %% 离散谱线
- n = 1:1:N;
- temp_discrete = 2*(A*tol/T)*abs(sin(n*pi*f0*tol)./(n*pi*f0*tol)).*abs(sin(n*pi*f0*Tr)./(n*pi*f0*Tr));
- %temp_discrete = 频谱包络线[2*D*∣sin(π*f*D)/(π*f*D)∣ ]
- x = [0,n]/T;
- val_discrete = [A*tol/T, temp_discrete];
- %val_discrete的第一个元素是直流分量的值(频率为0时的分量A*D),而后续元素则是 temp_discrete 中的值,它们共同构成了信号的离散频谱。
- % 转化为对数坐标
- f_db = [0, 20*log10((0.1:0.1:N)/T)];
- dB_S_env = [20*log10(2*A*tol/T), 20*log10(S_temp)];
- x_db = 20*log10((1:2:N)/T);
- %20*7=140 20*(7+lg3)=149 20*(7+lg5)=154 渐近线的交叉点频率f=1/(π*τ),交叉点为20lg(2τ/T)
- dB_val_discrete = 20*log10(val_discrete(2:2:end));
- % 渐近线
- f1 = linspace(0.01,1/(pi*tol),1000);
- y1 = 20*log10(2*A*tol/T).*ones(size(f1));
- %********************
- %这行代码首先计算了20*log10(2*A*tol/T),这是梯形波信号频谱在频率趋近于0时的渐近线的对数幅度值。
- %然后,通过.*ones(size(f1)),这个值被扩展成一个与f1相同大小的数组y1。
- %这样做的目的是在绘图时,y1数组中的每个元素都代表渐近线的值,从而可以形成一条水平的渐近线。
- %********************
- %当f<<1/(π*τ),y1=20lg(2τA/T),斜率为0
- f2 = linspace(1/(pi*tol),1/(pi*Tr),1000);
- y2 = 20*log10(2*A*tol/T)+20*log10(abs(1./(pi*f2*tol)));
- %当1/(π*τ)<f<1/(π*Tr),y2=20lg(2τA/T)+20lg(1/(π*f*τ)),斜率-20dB/10倍频程
- %y2与y1的交点是1/(π*τ)
- f3 = linspace(1/(pi*Tr),N*f0,1000);
- y3 = 20*log10(2*A*tol/T)+20*log10(abs(1./(pi*f3*tol)))+20*log10(abs(1./(pi*f3*Tr)));
- %当f>>1/(π*Tr),y2=20lg(2τA/T)+20lg(1/(π^2*f^*τ*Tr)=20lg(2τA/T)+20lg(1/(π*f*τ))+20lg(1/(π*f*Tr),斜率-40dB/10倍频程
- %y3与y2的交点是1/π*Tr
- %% 绘图
- figure
- set(gcf,'Color',[1, 1, 1],'outerposition',get(0,'screensize'));
- plot(f_db, dB_S_env+100, 'r:');
- hold on;
- stem(x_db,dB_val_discrete+100,'MarkerEdgeColor','g','MarkerFaceColor','g','MarkerSize',2);
- plot(20*log10(f1),100+y1,'m', 'LineWidth', 2);
- plot(20*log10(f2),100+y2,'m', 'LineWidth', 2);
- plot(20*log10(f3),100+y3,'m', 'LineWidth', 2);
- axis([100,max(f_db),0,120]);
- hold off;
- xlabel('对数频率'); % X轴标签
- ylabel('对数幅度'); % Y轴标签
复制代码
|
|