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
Octave傅里叶级数图像的绘制
最新推荐文章于 2024-07-10 19:29:26 发布