重邮+数字信号处理实验七:用 MATLAB 设计 IIR 数字滤波器

一、实验目的

1 、加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。
2 、学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。
3 、了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。
4 、掌握 FIR 滤波器的快速卷积实现原理。
5 、不同滤波器的设计方法具有不同的优缺点,因此要全面、客观看待可能
面对或出现的问题。

二、实验任务

1、阅读并输入实验原理中介绍的例题程序,观察输出的数据和图形,结合基本原理理解每一条语句的含义。

2、选择合适的窗函数设计 FIR 数字低通滤波器

要求:ωp=0.24 ,Rp=0.1dB; ωs=0.3 ,As=60dB。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
任务二结果示意图

3、调用信号产生函数 xtg 产生具有加性噪声的信号 x(t),并显示信号及其频谱。

程序清单如下:

Matlab 复制代码
[xt,t]=xtg(1000);

程序运行结果如下:

4、采用实验内容步骤 2 中设计的 FIR 数字低通滤波器,调用 Matlab 快速卷积函数 fftfilt 实现对 x(t)的滤波,从高频噪声中提取 x(t)中的单频调幅信号。绘图显示滤波器的频率响应特性曲线、滤波器输出信号的幅频特性图和时域波形图。

代码提示略

实验结果如下:

5、选做题,读取音频信号 motherland.wav,得到 xn;(1)对 xn 进行 I=2 的整数倍 0 值内插,得到音频信号 yn1;(2)设计一个镜像低通滤波器(可在实 验内容 2 的代码上进行修改);(3)对 yn1 进行滤波,得到音频信号 yn2。

① 音频播放:依次播放原音频信号 xn 、 yn1 和 yn2 ,体验整数倍 0 值内插后的音质。
参考代码:

Matlab 复制代码
[xn,fs]=audioread('motherland.wav');% 读取音频信号
sound(xn,fs); % 播放音频信号,
pause(length(xn)/fs); % 暂停执行程序 length(xn)/fs 秒,确保音频播放完。
I=2 % 实现I=2的整数倍0值内插
for i=1:length(xn);
 yn1(I*i-1)=xn(i);
 yn1(I*i)= 0;
end
sound(yn1,I*fs); %采样频率变大了,为 I*fs

② 取原音频某段信号,如 n=8000~8199。画出该段信号模拟域幅度谱(横 坐标为 f Hz);画出该段信号 I=2 内插后的模拟域幅度谱;画出该段信号内插 后再经过镜像滤波后的模拟域幅度谱。
参考代码:

Matlab 复制代码
Xn=1/fs*fft(xn(8000:8199),N); % 从xn中取200点做谱分析,N可取2048
plot((0:N/2-1)*fs/N,abs(Xn(1:N/2)));% 模拟域幅度谱
Yn1=1/(I*fs)*fft(yn1(16000:16399),N); % 内插后,200点长变成了400点长
plot((0:N/2-1)*I*fs/N,abs(Yn1(1:N/2)));
yn2=filter(b,1,yn1); % 对yn1进行滤波,b为所设计的镜像滤波器
Yn2=1/(I*fs)*fft(yn2(16000:16399),N); % 内插后,200点长变成了400点长
plot((0:N/2-1)*I*fs/N,abs(Yn2(1:N/2)));

三、思考题

按照如下指标要求设计四种选频数字滤波器,要求画出滤波器的幅频特性、相频特性和幅度衰减曲线,标注相关信息,如横坐标,纵坐标的单位,曲线名称等。(设计方法自己查阅资料完成)

  • (1) 设计数字低通滤波器,指标为:通带截止频率𝜔𝑝 = 0.2𝜋,阻带截止频率𝜔𝑠 = 0.3𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 24𝑑𝐵。
  • (2) 设计数字高通滤波器,指标为:阻带截止频率𝜔𝑠 = 0.4𝜋,通带截止频率𝜔𝑠 = 0.6𝜋,通带衰减𝛼𝑝 = 0.2𝑑𝐵,阻带衰减𝛼𝑠 = 43𝑑𝐵。
  • (3) 设计数字带通滤波器,指标为:通带范围0.2𝜋 ≤ 𝜔 ≤ 0.6𝜋,阻带范围0 ≤𝜔 ≤ 0.15𝜋和0.65𝜋 ≤ 𝜔 ≤ 𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 50𝑑𝐵。
  • (4) 设计数字带阻滤波器,指标为:阻带范围0.2𝜋 ≤ 𝜔 ≤ 0.6𝜋,通带范围0 ≤ 𝜔 ≤ 0.15𝜋和0.65𝜋 ≤ 𝜔 ≤ 𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 45𝑑𝐵。

解答

函数部分

函数一:通过输入wp,ws,n,可以得到b,反复调用,节省时间

Matlab 复制代码
function b=filter_test7(wp,ws,n)%n为窗前的系数
deltaw = ws - wp; % 频率带宽差
N0 = ceil(n * pi / deltaw); % 阶数
N = N0 + mod(N0 + 1, 2); % 确保滤波器阶数为奇数

windows = blackman(N); % 使用窗
wc = (ws + wp) / (2 * pi); % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); 
end

函数二:生成一个xt方便实用

Matlab 复制代码
function [xt,t]=XTG(N)
%xt=xtg产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率是1000Hz 
Fs=1000;%采样频率
T=1/Fs;%采样周期,采样间隔
t=0:T:(N-1)*T;
fc=Fs/10; %载波频率100
f0=fc/10; %基带信号频率10
mt=cos(2*pi*f0*t); %单频基带信号
ct=cos(2*pi*fc*t); %载波信号
xt=mt.*ct; %调制,采样
nt=2*rand(1,N)-1; %产生随机噪声
rp=0.1;As=70; %最大衰减,最小衰减
dev=[10^(-As/20),(10^(rp/20)-1)/(10^(rp/20)+1)]; %衰减系数
[n,fo,mo,w] = firpmord([150 200],[0 1],dev,1000 );
hn = firpm(n,fo,mo,w); 
yt=filter(hn,1,10*nt); %滤除高斯白噪声的低频成分生成高通干扰
xt=xt+yt;

主程序

任务一:

Matlab 复制代码
%例题2------2
N=64;
beta=7.865;
n=1:N;
wbo=boxcar(N);
wtr=triang(N);
whn=hanning(N);
whm=hamming(N);
wbl=blackman(N);
wka=kaiser(N,beta);
plot(n,wbo,'-',n,wtr,'*',n, whn,'+',n, whm,'.',n,wbl,'o',n,wka,'d');
axis([0,N,0,1.1]);
legend('矩形','三角形','汉宁','哈明','布莱克曼','凯塞')

%例题2------3
wp=0.3*pi;
ws=0.45*pi;
deltaw=ws-wp;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2)%为实现 FIR 类型1偶对称滤波器,应确保 N 为奇数
windows=(hamming(N))';
wc=(ws+wp)/2;
hd=ideal_lp(wc,N);
b=hd.*windows;
[H,w]=freqz(b,1,1000,'whole');
H=(H(1:501))';
w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
n=0:N-1;
dw=2*pi/1000;
Rp=-(min(db(1:wp/dw+1)))%检验通带波动
As=-round(max(db(ws/dw+1:501)))%检验最小阻带衰减

figure()
subplot(2,2,1);
stem(n,b);
axis([0,N,1.1*min(b),1.1*max(b)]);
title('实际脉冲响应');
xlabel('n');ylabel('h(n)');

subplot(2,2,2);
stem(n,windows);
axis([0,N,0,1.1]);
title('窗函数特性');
xlabel('n');ylabel('wd(n)');

subplot(2,2,3);
plot(w/pi,db);
axis([0,1,-80,10]);
title('幅度频率响应');
xlabel('频率(单位:\pi)');ylabel('H(e^{jomega})');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1 ]);
set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid;

subplot(2,2,4);
plot(w/pi,pha);
axis([0,1,-4,4]);
title('相位频率响应');
xlabel('频率(单位:\pi)");ylabel("phi(omega)');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);
set(gca,'YTickMode','manual','YTick',[-3.1416,0,3.1416,4]);grid;

wp=0.3*pi;ws=0.45*pi;
deltaw=ws-wp;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2);%为实现 FIR 类型1偶对称滤波器,应确保 N 为奇数
windows=hamming(N);%使用哈明窗,此句可省略
wc=(ws+wp)/2/pi;%截止频率取归一化通阻带频率的平均值
b=fir1(N-1,wc,windows);%用 firl 函数求系统函数系数,windows 可省略
[H,w]=freqz(b,1,1000,'whole');
H=(H(1:501))';w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
n=0:N-1;dw=2*pi/1000;
Rp=-(min(db(1:wp/dw+1)));%检验通带波动
As=-round(max(db(ws/dw+1:501)));%检验最小阻带衰减

figure();
subplot(2,2,1);
stem(n,b);
axis([0,N,1.1*min(b),1.1*max(b)]);
title('实际脉冲响应');
xlabel('n');ylabel('h(n)');

subplot(2,2,2);
stem(n,windows);
axis([0,N,0,1.1]);
title('窗函数特性');
xlabel('n');ylabel('wd(n)');

subplot(2,2,3);
plot(w/pi,db);
axis([0,1,-80,10]);
title('幅度频率响应');
xlabel('频率(单位:\pi)');ylabel('H(e^{jomega})');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1 ]);
set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid;

subplot(2,2,4);
plot(w/pi,pha);
axis([0,1,-4,4]);
title('相位频率响应');
xlabel('频率(单位:\pi)");ylabel("phi(omega)');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);
set(gca,'YTickMode','manual','YTick',[-3.1416,0,3.1416,4]);grid;

任务二:

Matlab 复制代码
%% 指标
wp = 0.24 * pi; % 通带截止频率
ws = 0.3 * pi; % 阻带开始频率
deltaw = ws - wp; % 频率带宽差
N0 = ceil(12* pi / deltaw); % 根据公式计算初始滤波器阶数
N = N0 + mod(N0 + 1, 2); % 确保滤波器阶数为奇数

windows = blackman(N); % 使用窗
wc = (ws + wp) / (2 * pi); % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); % 设计FIR滤波器

[H, w] = freqz(b, 1, 1000, 'whole'); % 计算频率响应
H = H(1:501)'; % 只取[0, pi]部分
w = w(1:501)';
mag = abs(H);
db = 20 * log10((mag + eps) / max(mag)); % 幅度转换为分贝
pha = angle(H); % 相位响应
n = 0:N-1; % 脉冲响应时间序列
dw = 2 * pi / 1000; % 频率步长
Rp=-(min(db(1:wp/dw+1)));%检验通带波动
As=-round(max(db(ws/dw+1:501)));%检验最小阻带衰减

%绘制图像
figure();
subplot(2, 2, 1);
stem(n, b); % 脉冲响应
axis([0, N-1, 1.1 * min(b), 1.1 * max(b)]);
title('实际脉冲响应');
xlabel('n'); ylabel('h(n)');

subplot(2, 2, 2);
stem(n, windows); % 窗函数特性
axis([0, N-1, 0, 1.1]);
title('窗函数特性');
xlabel('n'); ylabel('w(n)');

subplot(2, 2, 3);
plot(w / pi, db); % 幅度频率响应
axis([0, 1, -80, 10]);
title('幅度频率响应');
xlabel('频率 (单位: \pi)'); ylabel('|H(e^{j\omega})| (dB)');
set(gca, 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTick', [-60, -40, -20, 0]); grid on;

subplot(2, 2, 4);
plot(w / pi, pha); % 相位频率响应
axis([0, 1, -4, 4]);
title('相位频率响应');
xlabel('频率 (单位: \pi)'); ylabel('\phi(\omega)');
set(gca, 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTick', [-pi, 0, pi]); grid on;

disp(['通带波动 Rp = ', num2str(Rp), ' dB']);
disp(['阻带衰减 As = ', num2str(As), ' dB']);

任务三·:

Matlab 复制代码
% 调用 xtg 函数生成加噪声信号
[xt, t] = XTG(1000); % 采样频率为 1000 Hz

% 计算频谱
N = length(xt); % 信号长度
fs = 1000; % 采样频率
X = fft(xt); % 快速傅里叶变换
X_mag = abs(X)/N; % 幅度归一化
f = (0:N-1)*(fs/N); % 频率轴

% 绘制结果
figure();

% 时域波形
subplot(3, 1, 1);
plot(t, xt);
title('信号加噪声波形');
xlabel('t/s');
ylabel('x(t)');
xlim([0 0.2]); % 修改横坐标范围
grid on;

% 信号加噪声的频谱
subplot(3, 1, 2);
plot(f, X_mag);
title('信号加噪声的频谱');
xlabel('f/Hz');
ylabel('幅度');
xlim([0 fs/2]);
grid on;

% 信号加噪声的频谱 (50-150 Hz)
subplot(3, 1, 3);
plot(f, X_mag);
title('信号加噪声的频谱 (50-150 Hz)');
xlabel('f/Hz');
ylabel('幅度');
xlim([50 150]); % 修改横坐标范围为 50-150
xticks(50:10:150); % 设置刻度间隔为 10
grid on;

任务四:

Matlab 复制代码
% 参数设置 
wp = 0.24 * pi; % 通带截止频率 
ws = 0.3 * pi; % 阻带开始频率 
n = 12; % 用于计算滤波器阶数的系数 
fs = 1000; % 采样频率 

[xt, t] = XTG(fs); % 采样频率为 1000 Hz
b =filter_test7(wp,ws,n);
yt=fftfilt(b,xt);
Hyk=abs(fft(yt));

% 计算滤波器的频率响应 
[H, f] = freqz(b, 1, 1024, 'whole'); % 计算频率响应 
% 绘图 
figure; 

% 1. 绘制滤波器的频率响应特性 
subplot(2, 2, 1); 
plot(f * fs / (2 * pi), 20*log10(abs(H)), 'LineWidth', 2); % dB scale 
title('FIR 滤波器的频率响应特性'); 
xlabel('频率 (Hz)'); 
ylabel('幅度 (dB)'); 
grid on; 

% 时域波形图 
subplot(2, 2, 2); 
plot(t, yt, 'b'); % 滤波后信号 
title('滤波后信号时域波形'); 
xlabel('时间 (秒)'); 
ylabel('幅度'); 
grid on; 

% 幅频特性图 
subplot(2, 2, 3); 
stem(Hyk); 
title('滤波器输出信号的幅频特性'); 
xlabel('频率 (Hz)'); 
ylabel('幅度'); 
axis([80,120,min(Hyk),max(Hyk)]); 
grid on; 

任务五:

Matlab 复制代码
% 读取音频信号
[xn, Fs] = audioread('motherland.wav'); 
sound(xn, Fs); 
%pause(length(xn)/Fs); 


I = 2; % 插值倍数
yn1 = zeros(I * length(xn), 1); % 插值后的信号初始化
for i = 1:length(xn)
yn1(I*i-1)=xn(i);
yn1(I*i)=0;
end
sound(yn1, I * Fs); 
%pause(length(yn1)/(I * Fs)); 

% 对原始信号和插值信号进行频谱分析
N = 2048; 
Xn = 1/Fs*fft(xn(8000:8199), N); 
Yn1 = 1/(I*Fs) * fft(yn1(16000:16399), N); % 插值信号对应频段做频谱分析

% 绘制原始信号和插值信号的频谱
figure;
subplot(3, 1, 1);
plot((0:N/2-1)*(Fs/N), abs(Xn(1:N/2)));
title('原始信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');

subplot(3, 1, 2);
plot((0:N/2-1)*(I*Fs/N), abs(Yn1(1:N/2)));
title('插值信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');

% 设计镜像低通滤波器对插值信号进行滤波
b = filter_test7(0.24*pi,0.3*pi,11);
yn2 =filter(b, 1, yn1); % 滤波后的信号
sound(yn2, I * Fs); % 播放滤波后的信号


% 频谱分析滤波后的信号
Yn2 = abs(1/Fs * fft(yn2(16000:16399), N)); % 滤波后插值信号频谱

% 绘制滤波后插值信号的频谱
subplot(3, 1, 3);
plot((0:N/2-1)*(I*Fs/N), Yn2(1:N/2));
title('滤波后的插值信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');

思考题

Matlab 复制代码
Fs = 1; 

% 低通滤波器设计
%参数
wp = 0.2; % 通带截止频率 (归一化)
ws = 0.3; % 阻带开始频率 (归一化)
dp = 1 - 10^(-1/20); % 通带波动 1dB
ds = 10^(-24/20); % 阻带衰减 24dB
N = firpmord([wp, ws], [1, 0], [dp, ds]); % 估算滤波器阶数
b_lowpass = firpm(N, [0 wp ws 1], [1 1 0 0]); % FIR设计

% 绘制低通滤波器曲线
figure('Name', '低通滤波器特性');
subplot(2, 2, 1);
stem(b_lowpass, 'filled');
title('低通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');

subplot(2, 2, 2);
[H, w] = freqz(b_lowpass, 1, 1024);
plot(w/pi, abs(H));
title('低通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');

subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('低通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');

subplot(2, 2, 4);
plot(w/pi, angle(H));
title('低通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');

%高通滤波器设计
%参数
ws = 0.4; 
wp = 0.6; 
dp = 1 - 10^(-0.2/20); % 0.2dB
ds = 10^(-43/20); % 43dB
N = firpmord([ws, wp], [0, 1], [ds, dp]); % 估算滤波器阶数
b_highpass = firpm(N, [0 ws wp 1], [0 0 1 1]); 

% 绘制高通滤波器曲线
figure('Name', '高通滤波器特性');
subplot(2, 2, 1);
stem(b_highpass, 'filled');
title('高通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');

subplot(2, 2, 2);
[H, w] = freqz(b_highpass, 1, 1024);
plot(w/pi, abs(H));
title('高通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');

subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('高通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');

subplot(2, 2, 4);
plot(w/pi, angle(H));
title('高通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');

%带通滤波器设计
%参数
wp1 = 0.2; wp2 = 0.6;
ws1 = 0.15; ws2 = 0.65; 
dp = 1 - 10^(-1/20); % 1dB
ds = 10^(-50/20); % 50dB
N = firpmord([ws1 wp1 wp2 ws2], [0 1 0], [ds dp ds]); % 估算阶数
b_bandpass = firpm(N, [0 ws1 wp1 wp2 ws2 1], [0 0 1 1 0 0]); 

% 绘制带通滤波器曲线
figure('Name', '带通滤波器特性');
subplot(2, 2, 1);
stem(b_bandpass, 'filled');
title('带通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');

subplot(2, 2, 2);
[H, w] = freqz(b_bandpass, 1, 1024);
plot(w/pi, abs(H));
title('带通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');

subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('带通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');

subplot(2, 2, 4);
plot(w/pi, angle(H));
title('带通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');

%带阻滤波器设计
%参数
ws1 = 0.2; ws2 = 0.6; 
wp1 = 0.15; wp2 = 0.65; 
dp = 1 - 10^(-1/20); % 1dB
ds = 10^(-45/20); % 45dB
N = firpmord([wp1 ws1 ws2 wp2], [1 0 1], [dp ds dp]); % 估算滤波器阶数
b_bandstop = firpm(N, [0 wp1 ws1 ws2 wp2 1], [1 1 0 0 1 1]); 

% 绘制带阻滤波器曲线
figure('Name', '带阻滤波器特性');
subplot(2, 2, 1);
stem(b_bandstop, 'filled');
title('带阻滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');

subplot(2, 2, 2);
[H, w] = freqz(b_bandstop, 1, 1024);
plot(w/pi, abs(H));
title('带阻滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');

subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('带阻滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');

subplot(2, 2, 4);
plot(w/pi, angle(H));
title('带阻滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');
相关推荐
linly121916 分钟前
MATLAB学习笔记目录
笔记·学习·matlab
HyperAI超神经1 小时前
微软与腾讯技术交锋,TRELLIS引领3D生成领域多格式支持新方向
人工智能·深度学习·机器学习·计算机视觉·3d·大模型·数据集
goomind4 小时前
DeepFM模型介绍
深度学习·dnn·推荐系统·deepfm
shichaog4 小时前
第四章 神经网络声码器
人工智能·深度学习·神经网络·语音合成·声码器
KeyPan4 小时前
【Ubuntu与Linux操作系统:一、Ubuntu安装与基本使用】
linux·运维·服务器·人工智能·深度学习·ubuntu·机器学习
m0_678693336 小时前
深度学习笔记11-优化器对比实验(Tensorflow)
笔记·深度学习·tensorflow
亲持红叶6 小时前
Chapter5.1 Evaluating generative text models
人工智能·python·gpt·深度学习·自然语言处理
雾隐隐o6 小时前
基于深度学习的滑块验证破解方法及模型训练过程
人工智能·深度学习
羊小猪~~7 小时前
EDA数据分析结合深度学习---基于EDA数据分析和MLP模型的天气预测(tensorflow实现)
pytorch·python·深度学习·机器学习·数据挖掘·数据分析·tensorflow
Jr.Cui7 小时前
四阶龙格库塔法求解二元二阶常微分方程
matlab