Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35|回复: 7

梯形波信号的频谱及其渐近线

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
  1. %% 梯形波信号的频谱及其渐近线 于博士的代码
  2. clc;  clear all;
  3. %%
  4. f0 = 10e6; % 10 MHz
  5. T = 1/f0;  % 周期
  6. D = 0.5;   % 占空比
  7. tol = D*T; % 脉宽
  8. A = 1;     % 幅度
  9. Tr = 1e-9; % 上升时间1ns
  10. N = 600;
  11. %%
  12. %% 频谱包络
  13. f = (0.1:0.1:N)/T;
  14. S_temp =2*(A*tol/T)*abs(sin(pi*f*tol)./(pi*f*tol)).*abs(sin(pi*f*Tr)./(pi*f*Tr));
  15. fx = [0, f];
  16. S_env = [2*(A*tol/T), S_temp];


  17. %% 离散谱线
  18. n = 1:1:N;
  19. 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));
  20. %temp_discrete = 频谱包络线[2*D*∣sin(π*f*D)/(π*f*D)∣ ]
  21. x = [0,n]/T;
  22. val_discrete = [A*tol/T, temp_discrete];
  23. %val_discrete的第一个元素是直流分量的值(频率为0时的分量A*D),而后续元素则是 temp_discrete 中的值,它们共同构成了信号的离散频谱。

  24. % 转化为对数坐标
  25. f_db = [0, 20*log10((0.1:0.1:N)/T)];
  26. dB_S_env = [20*log10(2*A*tol/T), 20*log10(S_temp)];
  27. x_db = 20*log10((1:2:N)/T);
  28. %20*7=140 20*(7+lg3)=149 20*(7+lg5)=154  渐近线的交叉点频率f=1/(π*τ),交叉点为20lg(2τ/T)
  29. dB_val_discrete = 20*log10(val_discrete(2:2:end));
  30. % 渐近线
  31. f1 = linspace(0.01,1/(pi*tol),1000);
  32. y1 = 20*log10(2*A*tol/T).*ones(size(f1));
  33. %********************
  34. %这行代码首先计算了20*log10(2*A*tol/T),这是梯形波信号频谱在频率趋近于0时的渐近线的对数幅度值。
  35. %然后,通过.*ones(size(f1)),这个值被扩展成一个与f1相同大小的数组y1。
  36. %这样做的目的是在绘图时,y1数组中的每个元素都代表渐近线的值,从而可以形成一条水平的渐近线。
  37. %********************
  38. %当f<<1/(π*τ),y1=20lg(2τA/T),斜率为0

  39. f2 = linspace(1/(pi*tol),1/(pi*Tr),1000);
  40. y2 = 20*log10(2*A*tol/T)+20*log10(abs(1./(pi*f2*tol)));
  41. %当1/(π*τ)<f<1/(π*Tr),y2=20lg(2τA/T)+20lg(1/(π*f*τ)),斜率-20dB/10倍频程
  42. %y2与y1的交点是1/(π*τ)

  43. f3 = linspace(1/(pi*Tr),N*f0,1000);
  44. y3 = 20*log10(2*A*tol/T)+20*log10(abs(1./(pi*f3*tol)))+20*log10(abs(1./(pi*f3*Tr)));
  45. %当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倍频程
  46. %y3与y2的交点是1/π*Tr

  47. %% 绘图
  48. figure
  49. set(gcf,'Color',[1, 1, 1],'outerposition',get(0,'screensize'));
  50. plot(f_db, dB_S_env+100, 'r:');
  51. hold on;
  52. stem(x_db,dB_val_discrete+100,'MarkerEdgeColor','g','MarkerFaceColor','g','MarkerSize',2);
  53. plot(20*log10(f1),100+y1,'m', 'LineWidth', 2);
  54. plot(20*log10(f2),100+y2,'m', 'LineWidth', 2);
  55. plot(20*log10(f3),100+y3,'m', 'LineWidth', 2);
  56. axis([100,max(f_db),0,120]);
  57. hold off;
  58. xlabel('对数频率');  % X轴标签
  59. ylabel('对数幅度');  % Y轴标签
复制代码


 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 xieeyawen 于 2025-6-6 10:48 编辑

https://matlab.mathworks.com/在线仿真太方便了

 楼主| 发表于 3 天前 | 显示全部楼层
https://x9nahn.smartapps.baidu.com/ matlab的类似deepseek的学习网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2025-6-9 19:46 , Processed in 0.131389 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表