以下是使用 MATLAB 实现生成所需图形的代码:
```matlab
% 原始连续信号
t = -1:0.001:1;
f1 = 5;
f2 = 10;
x = sin(2*pi*f1*t) + 0.5*sin(2*pi*f2*t);
N = length(x);
f = (-N/2:N/2-1) * (1/(max(t)-min(t)));
% 原始连续信号时域图
figure;
subplot(4,4,1);
plot(t, x);
title('原始连续信号时域图');
xlabel('时间 (s)');
ylabel('幅值');
% 原始连续信号频谱
X = fftshift(fft(x));
subplot(4,4,2);
plot(f, abs(X));
title('原始连续信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% 采样频率
fs1 = 50;
fs2 = 30;
fs3 = 20;
% 50Hz 采样
Ts1 = 1/fs1;
t1 = -1:Ts1:1;
x1 = sin(2*pi*f1*t1) + 0.5*sin(2*pi*f2*t1);
N1 = length(x1);
f1_axis = (-N1/2:N1/2-1) * (fs1/N1);
% 50Hz 采样信号时域图
subplot(4,4,3);
stem(t1, x1);
title('50Hz 采样信号时域图');
xlabel('时间 (s)');
ylabel('幅值');
% 50Hz 采样信号频谱
X1 = fftshift(fft(x1));
subplot(4,4,4);
plot(f1_axis, abs(X1));
title('50Hz 采样信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% 30Hz 采样
Ts2 = 1/fs2;
t2 = -1:Ts2:1;
x2 = sin(2*pi*f1*t2) + 0.5*sin(2*pi*f2*t2);
N2 = length(x2);
f2_axis = (-N2/2:N2/2-1) * (fs2/N2);
% 30Hz 采样信号时域图
subplot(4,4,5);
stem(t2, x2);
title('30Hz 采样信号时域图');
xlabel('时间 (s)');
ylabel('幅值');
% 30Hz 采样信号频谱
X2 = fftshift(fft(x2));
subplot(4,4,6);
plot(f2_axis, abs(X2));
title('30Hz 采样信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% 20Hz 采样
Ts3 = 1/fs3;
t3 = -1:Ts3:1;
x3 = sin(2*pi*f1*t3) + 0.5*sin(2*pi*f2*t3);
N3 = length(x3);
f3_axis = (-N3/2:N3/2-1) * (fs3/N3);
% 20Hz 采样信号时域图
subplot(4,4,7);
stem(t3, x3);
title('20Hz 采样信号时域图');
xlabel('时间 (s)');
ylabel('幅值');
% 20Hz 采样信号频谱
X3 = fftshift(fft(x3));
subplot(4,4,8);
plot(f3_axis, abs(X3));
title('20Hz 采样信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% FIR 滤波器设计
fc = 15; % 截止频率
N_fir = 64; % 滤波器阶数
b = fir1(N_fir, fc/(fs1/2));
% FIR 滤波器频率响应
[H_fir, w_fir] = freqz(b, 1, 512, fs1);
subplot(4,4,9);
plot(w_fir, abs(H_fir));
title('FIR 滤波器频率响应');
xlabel('频率 (Hz)');
ylabel('幅值');
% IIR 滤波器设计(巴特沃斯)
[N_iir, Wn] = buttord(fc/(fs1/2), (fc+5)/(fs1/2), 3, 40);
[b_iir, a_iir] = butter(N_iir, Wn);
% IIR 滤波器频率响应
[H_iir, w_iir] = freqz(b_iir, a_iir, 512, fs1);
subplot(4,4,10);
plot(w_iir, abs(H_iir));
title('IIR 滤波器频率响应(巴特沃斯)');
xlabel('频率 (Hz)');
ylabel('幅值');
% 50Hz 采样 FIR 恢复信号
x1_rec = filter(b, 1, x1);
t1_rec = -1:Ts1:1-(length(x1_rec)-length(t1))*Ts1;
subplot(4,4,11);
plot(t1_rec, x1_rec);
title('50Hz 采样 FIR 恢复信号');
xlabel('时间 (s)');
ylabel('幅值');
% 50Hz 恢复信号频谱
X1_rec = fftshift(fft(x1_rec));
N1_rec = length(x1_rec);
f1_rec_axis = (-N1_rec/2:N1_rec/2-1) * (fs1/N1_rec);
subplot(4,4,12);
plot(f1_rec_axis, abs(X1_rec));
title('50Hz 恢复信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% 30Hz 采样 FIR 恢复信号
x2_rec = filter(b, 1, x2);
t2_rec = -1:Ts2:1-(length(x2_rec)-length(t2))*Ts2;
subplot(4,4,13);
plot(t2_rec, x2_rec);
title('30Hz 采样 FIR 恢复信号');
xlabel('时间 (s)');
ylabel('幅值');
% 30Hz 恢复信号频谱
X2_rec = fftshift(fft(x2_rec));
N2_rec = length(x2_rec);
f2_rec_axis = (-N2_rec/2:N2_rec/2-1) * (fs2/N2_rec);
subplot(4,4,14);
plot(f2_rec_axis, abs(X2_rec));
title('30Hz 恢复信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
% 20Hz 采样 FIR 恢复信号
x3_rec = filter(b, 1, x3);
t3_rec = -1:Ts3:1-(length(x3_rec)-length(t3))*Ts3;
subplot(4,4,15);
plot(t3_rec, x3_rec);
title('20Hz 采样 FIR 恢复信号');
xlabel('时间 (s)');
ylabel('幅值');
% 20Hz 恢复信号频谱
X3_rec = fftshift(fft(x3_rec));
N3_rec = length(x3_rec);
f3_rec_axis = (-N3_rec/2:N3_rec/2-1) * (fs3/N3_rec);
subplot(4,4,16);
plot(f3_rec_axis, abs(X3_rec));
title('20Hz 恢复信号频谱');
xlabel('频率 (Hz)');
ylabel('幅值');
```