在matlabr2016a中实现以下功能:1.用MATLAB编程实现对一个正弦连续时间信号的抽样,产生并显示连续正弦信号及其抽样周期比奈奎斯特抽样周期高、相等、低三种情况下的抽样形式; 2.利用上一步中产生的各个抽样周期下的离散时间信号,使其通过一个理想低通滤波器,恢复得到各自等效的连续时间信号
时间: 2024-03-06 07:46:40 浏览: 28
以下是用MATLAB R2016a实现对一个正弦连续时间信号的抽样并显示抽样形式及其恢复的代码:
```matlab
%% 1. 产生正弦连续时间信号
Fs = 1000; % 采样频率
t = 0:1/Fs:1; % 时间序列
f = 50; % 正弦波频率
A = 1; % 正弦波振幅
x = A*sin(2*pi*f*t); % 生成正弦波信号
%% 2. 抽样并显示抽样形式
figure;
subplot(2,2,1); % 绘制原始信号
plot(t, x);
xlabel('时间(秒)');
ylabel('幅值');
title('原始信号');
% 设置抽样周期比奈奎斯特抽样周期高的情况
Fs_high = 2000; % 抽样频率
Ts_high = 1/Fs_high; % 抽样周期
t_high = 0:Ts_high:1; % 抽样时间序列
n_high = round(Fs_high/f); % 抽样点数
xn_high = A*sin(2*pi*f*t_high); % 抽样信号
subplot(2,2,2); % 绘制抽样信号
stem(t_high, xn_high);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样信号(抽样周期为', num2str(Ts_high), '秒)']);
% 设置抽样周期与奈奎斯特抽样周期相等的情况
Fs_eq = 100; % 抽样频率
Ts_eq = 1/Fs_eq; % 抽样周期
t_eq = 0:Ts_eq:1; % 抽样时间序列
n_eq = round(Fs_eq/f); % 抽样点数
xn_eq = A*sin(2*pi*f*t_eq); % 抽样信号
subplot(2,2,3); % 绘制抽样信号
stem(t_eq, xn_eq);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样信号(抽样周期为', num2str(Ts_eq), '秒)']);
% 设置抽样周期比奈奎斯特抽样周期低的情况
Fs_low = 50; % 抽样频率
Ts_low = 1/Fs_low; % 抽样周期
t_low = 0:Ts_low:1; % 抽样时间序列
n_low = round(Fs_low/f); % 抽样点数
xn_low = A*sin(2*pi*f*t_low); % 抽样信号
subplot(2,2,4); % 绘制抽样信号
stem(t_low, xn_low);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样信号(抽样周期为', num2str(Ts_low), '秒)']);
%% 3. 恢复信号
% 理想低通滤波器
fc = f; % 截止频率
wc = 2*pi*fc; % 截止角频率
h = wc/pi*sinc(wc/pi*(0:n_high-1)); % 理想低通滤波器的频率响应
% 恢复信号
x_high = conv(xn_high, h, 'same'); % 抽样周期比奈奎斯特抽样周期高的恢复信号
x_eq = conv(xn_eq, h, 'same'); % 抽样周期与奈奎斯特抽样周期相等的恢复信号
x_low = conv(xn_low, h, 'same'); % 抽样周期比奈奎斯特抽样周期低的恢复信号
% 绘制恢复信号
figure;
subplot(2,2,1); % 绘制原始信号
plot(t, x);
xlabel('时间(秒)');
ylabel('幅值');
title('原始信号');
subplot(2,2,2); % 绘制恢复信号
plot(t_high, x_high);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样周期为', num2str(Ts_high), '秒的恢复信号']);
subplot(2,2,3); % 绘制恢复信号
plot(t_eq, x_eq);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样周期为', num2str(Ts_eq), '秒的恢复信号']);
subplot(2,2,4); % 绘制恢复信号
plot(t_low, x_low);
xlabel('时间(秒)');
ylabel('幅值');
title(['抽样周期为', num2str(Ts_low), '秒的恢复信号']);
```
执行以上代码将会生成两个图像窗口,第一个窗口中包含原始信号及其三种不同抽样周期下的抽样信号,第二个窗口中包含原始信号及其三种不同抽样周期下的恢复信号。