标题: 通信原理Matlab求积分和微分 代码 [打印本页]

作者: 败笔    时间: 2025-6-13 00:58
标题: 通信原理Matlab求积分和微分 代码
这是我的答案(虽然我看不懂)
无论是积分和微分,都有符号和数值两种操作,符号操作是计算精确解析式和相应的精确值:
符号:
sysm x t---->定义自变量
int(f,x) ---->求f关于x的不定积分
int(g,t) ---->求g关于t的不定积分
int(f,x,a,b) ---->求f关于x在[a,b]上的定积分
diff(f,x,n) ---->求f关于x的n阶导数

数值方法:
数值微分:
#用函数值的差分除以自变量的差分(只要步长足够小,就足够精确)
diff(y). /diff(x),但是会比原函数的维度少一位
数值积分:
#数值积分可以基于不同的积分准则,如:中点法则、梯形法则、辛普森法则等,因此也有不同的函数
1.    基于自适应 Simpson 积分法计算数值积分(不推荐)
如:计算,可以:
,F为待计算函数句柄(匿名)
2.    基于自适应Gauss-Lobatto方法(不推荐)
和quad一样的用法,把quad换成quadl
3.    基于高斯-勒让德积分方法(和integral的积分方法基本相同)
和quad一样的用法,把quad换成quadgk
4.    基于全局自适应积分法(推荐)
与quad一样的用法,将quad换成integral
5.    基于梯形积分法

  1. %研究各种信号的抗噪声性能(直接引用前几个文件的基础代码)
  2. clear all;
  3. close all;
  4. %tips: biterr函数、randn函数
  5. %-------------------------ASK---------------------------
  6. %----原始信号码元参数----
  7. Tb = 1; %码元长度
  8. fs = 100; %采样频率
  9. dt = 1/fs; %采样时间间隔
  10. N = 1e5; %码元数量,数量大,便于统计,避免较少的码元数带来的偶然性
  11. t = 0:dt:(N*fs-1)*dt; %时域范围

  12. %----载波参数----
  13. Ac = 1; %载波幅度
  14. fc = 30; %载波频率
  15. phi = 0; %初始相位

  16. %----产生原始的二进制码元----
  17. sr = (sign(randn(1,N))+1)/2; %原始信息序列
  18. sr_conv = zeropad(sr,fs);
  19. nrz = ones(1,fs); %单个NRZ波形
  20. data = conv(sr_conv,nrz);
  21. data = data(1:length(t));

  22. %----产生ASK信号----
  23. carrier = cos(2*pi*fc*t);
  24. ask = data.*carrier;
  25.    
  26. %----匹配滤波----
  27. r_db = 0:15; %信噪比-dB
  28. Eb = Tb*Ac*Ac/2; %单个比特的信号功率(J/bit)
  29. pe = zeros(1,length(r_db));
  30. pe_ideal = zeros(1,length(r_db));
  31. for i=1:length(r_db)
  32.     r = 10^(r_db(i)/10);
  33.     n0 = Eb/r; %单边噪声功率谱密度
  34.     delta = n0/2*fs; %噪声功率
  35.     n = sqrt(delta)*randn(1,length(ask)); %噪声信号
  36. %     reciv = awgn(ask,r_db(i)); %也可以这样
  37.     reciv = ask+n; %接收信号
  38.    
  39.     %匹配滤波器
  40.     t1 = 0:dt:Tb-dt;
  41.     h = cos(2*pi*fc*t1);
  42.    
  43.     %滤波
  44.     recov_signal = conv(reciv,h)*dt;
  45.    
  46.     %包络检波
  47.     t2 = 0:dt:(length(recov_signal)-1)*dt;
  48.     z = hilbert(recov_signal); %z为解析信号
  49.     z1 = z.*exp(-sqrt(-1)*2*pi*fc*t2); %z1为复包络
  50.     envlp = abs(z1);
  51. %     subplot(2,1,1);
  52. %     plot(t,data);
  53. %     subplot(2,1,2);
  54. %     plot(t2,recov_signal);
  55.    
  56.     %判决
  57.     recov_sym = zeros(1,N);
  58.     Vth = Ac/4; %判决门限,余弦信号卷积之后,高度会下降一半,故用Ac/4
  59.     for j=1:N
  60.         if envlp(j*Tb/dt) > Vth
  61.             recov_sym(j)=1;
  62.         else
  63.             recov_sym(j)=0;
  64.         end
  65.     end
  66.     [err_num,err_pro] = biterr(sr,recov_sym); %计算误码个数和误码率
  67.     pe(i)=err_pro;
  68.     pe_ideal(i) = 0.5*erfc(sqrt(0.25*r));
  69.     %pe_ideal(i) = 0.5*exp(-0.25*r);
  70. end

  71. figure();
  72. semilogy(r_db,pe,'-*');
  73. hold on;
  74. semilogy(r_db,pe_ideal);
  75. legend('实际误码率','理论误码率');
  76. grid on;

复制代码
  1. % 评估二进制单极性和双极性基带系统的抗噪性能
  2. SNR_dB = 0:0.05:10;
  3. scal = 10.^(SNR_dB/10); %信噪比的比例形式

  4. A_over_sigma = sqrt(scal)*sqrt(2);
  5. double = 0.5*erfc(sqrt(scal));
  6. single = 0.5*erfc(0.5*sqrt(scal));

  7. figure('NumberTitle', 'off', 'Name','相同抽样电平下两种数字基带系统的抗噪声能力');
  8. semilogy(A_over_sigma,double);
  9. hold on;
  10. semilogy(A_over_sigma,single);
  11. xlabel('抽样电平/噪声均方值');
  12. ylabel('系统误码率Pe');
  13. grid on;
  14. legend('双极性','单极性');

  15. %tips:数字基带系统的抗噪性能(不考虑码间干扰,受噪声引起的误码率)与信号码元抽样电平的值与噪声均方根值(功率开方,即高斯噪声的方差开方)之比有关
  16. %如果是理想的方波码元,功率为A

  17. %第4-5行其实是验证了两种编码方式:相同的电平值A和噪声均方值下不同的抗噪表现,而不是相同的信噪比条件下,因为如果两个信号的SNR相同,则两个信号的电平值也不同

  18. %----验证相同SNR下不同系统的抗噪性能(此时两种信号的电平值也不同)-----

  19. double_2 = 0.5*erfc(sqrt(scal)/sqrt(2));
  20. single_2 = 0.5*erfc(sqrt(scal)/2);
  21. figure('NumberTitle', 'off', 'Name','相同SNR下两种数字基带系统的抗噪声能力');
  22. semilogy(SNR_dB,double_2);
  23. hold on;
  24. semilogy(SNR_dB,single_2);
  25. xlabel('SNR(Eb/N0)-dB');
  26. ylabel('系统误码率Pe');
  27. grid on;
  28. legend('双极性','单极性');
复制代码

代码下载: Communication-Matlab-main.7z (71.93 KB, 下载次数: 0)





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1