MATLAB实现采样,恢复
对Sa(t)函数均匀采样
%信号Sa(t)作为被采样信号,信号带宽B=1,采样频率Ws=2B
%此频率下的采样为Nyquist采样,对采样即恢复过程用MATLAB进行仿真
B=1; %信号带宽
wc=B; %滤波器截止频率
Ts=pi/B; %采样间隔
ws=2*pi/Ts; %采样角频率
N=100; %滤波器时域采样点数
n=-N:N;
nTs=n.*Ts; %采样数据的采样时间
fs=sinc(nTs/pi); %函数的采样点
Dt=0.005; %恢复信号的采样间隔
t=-15:Dt:15; %恢复信号的范围
fa=fs*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
%信号重构
error=abs(fa-sinc(t/pi));%求重构信号与原信号的归一化误差
%画图
figure(1);
subplot(3,1,1);
plot(t,sinc(t/pi),'.');
title("抽样信号sa(t)");
subplot(3,1,2);
plot(t,fa);
title("重构信号");
subplot(3,1,3);
plot(t,error);
title("重构误差");
仿真结果图
代码来源:
https://www.bilibili.com/video/BV16E411E7PA?p=118&vd_source=a5290fe970a5f52ac6dd1f3a63990e4e
一些知识:
B:带宽,频带宽度 B=wc,低通滤波器最高通过频率
奈奎斯特采样定理得知:采样频率(ws)需要大于等于两倍的信号频率,所以该代码设置为ws=2wc。
理想低通滤波器的h(t)=(wc/pi) sa(wct)
f(t)通过冲激序列抽样后得到
所以恢复信号
注意: (ones(length(nTs),1)*t-nTs’*ones(1,length(t)) 由于t
和nTs两个行向量的长度不相等,所以无法之接相减运算,所以这里添加了全为1的行向量和列向量,分别相乘后得到行列数相等的矩阵再进行相减,才可以完成运算。