Octave傅里叶级数图像的绘制

此篇博客展示了如何从用户输入的调和数列中,通过for循环和数学运算,构建方波并进行傅立叶变换,以揭示不同谐波的贡献。它涉及矩阵操作、频率计算、周期函数表示及傅立叶级数展开,适用于信号处理和频域分析的基础教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

array = input("Please enter the harmonic series:"); 
for i = 1:8,                                   %获取输入字符串并转化为矩阵a_array
  x = 1:8;
  y = floor(array / 10^(8-i));                 %定义y为输入字符串与10的(8-i)次方的整数商
  a_array(i) = y;                              %将该整数商写入矩阵a_array
  array = array - y * (10^(8-i));              %去除字符串最高位
endfor;

T = length(a_array);                           %将数组长度作为周期T
f = 1/T;                                       %用周期表示频率f
t = 1:T;                                       %构建方波横坐标t,间隔为1个单位长度
[ts, as] = stairs(t-1,a_array);                %将数组与时间所构建的方波表示为as对ts的函数
plot(ts,as), grid on;                          %绘制方波
axis([0 T -0.5 1.5]);                          %标注方波的横纵坐标轴范围

n_max = [1 2 4 8 16 32];                       %确定绘制傅立叶图像的谐波数,并形成矩阵n_max
N = length(n_max);                             %通过数组n_max确定循环次数N
for k = 1:N,
  m = 0:0.01:T;                                %确定傅立叶图像的横坐标m
  a = 0;                                       %初始化a
  b = 0;                                       %初始化b
    
  for q = 1:n_max(k),                          %通过谐波数确定表达式中sin函数与cos函数的个数
    n = 1:n_max(k);                            %确定表达式中n的取值范围
    
    p = 1/(n(q)*pi);
    p1 = 0;                                    %初始化p1
    p2 = 0;                                    %初始化p2
    
    for w = 1:8,                               %利用循环求出p1
      v = 1:8;
      p1 = a_array(v(w))*[-cos(2*v(w)*n(q)*pi/8) + cos(2*(v(w)-1)*n(q)*pi/8)] + p1;
    endfor;
    a = p * p1 * sin(2*pi*n(q)*f*m) + a;       %p*p1为sin函数的系数a_n,利用循环求表达式中所有sin函数的和
    
    for w = 1:8,                               %利用循环求出p2
      p2 = a_array(v(w))*[sin(2*v(w)*n(q)*pi/8) - sin(2*(v(w)-1)*n(q)*pi/8)] + p2;
    endfor;
    b = p * p2 * cos(2*pi*n(q)*f*m) + b;       %p*p2为cos函数的系数b_n,利用循环求表达式中所有cos函数的和
  endfor
    
  c = 0;
  for w = 1:8,                                 %利用循环求出c
    c = (1/4)*a_array(w) + c;
  endfor;
  
  g = (1/2)*c + a + b;                         %列出表达式
  figure;                                      %创建新窗口
  plot(ts,as);                                 %绘制方波图像
  hold on;
  plot(m,g);                                   %绘制傅立叶图像
  hold off;
  axis([0 T -0.5 1.5]),grid on;                %确定傅立叶图像横纵坐标范围
  title(['harmonics number = ',num2str(n_max(k))]);
endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值