使用内插函数恢复模拟信号
时域信号的离散会导致频域的周期延拓,只有满足不低于信号最高频率两倍的采样率采样,才不会导致频域周期延拓后的混叠,才有可能不失真地恢复源信号。
在频域上看,恢复信号就是用一个理想低通滤波器与时域信号的频谱相乘,以得到频域的第一个周期,而频域的理想低通滤波器,也就是频域矩形窗,经过傅里叶逆变化后在时域是无限长的内插函数,是非因果的
非因果系统
:系统的当前输出只与当前或者之前的输入有关,而与之后的输入无关
一个时域时域无限长的响应,系统在t = 0输入,但系统在t<0时就开始有响应了,所以这个系统是非因果的,是物理不可实现的。
用matlab仿真采样信号的恢复,连续模拟信号可看做采样率无穷大的离散数字信号,因此,离散信号的恢复可看做一个插值的过程
前面提到恢复信号可以在频域低通滤波,频域相乘对应着时域卷积,因此过采样可以在时域用内插函数与源信号卷积实现,卷积公式如下
y
(
t
)
=
∑
−
∞
m
=
+
∞
x
a
(
m
∗
T
s
)
s
i
n
[
π
(
t
−
m
∗
T
s
)
/
T
s
]
π
(
t
−
m
∗
T
s
)
/
T
s
其中t的时间间隔就是过采样后的采样间隔,用matlab仿真如下
clear all;
close all;
N = 15; %采样数量
f = 1; %信号频率1Hz
Fs = 10; %采样频率 10Hz
Ts = 0.1; %采样间隔
T = N*Ts; %采样时长
n = 0:N-1; %时域采样序列(N个采样)
NP = floor( (1/f)/(Ts) ); %1个周期采样点数
%为了清楚显示波形,只画1个周期
nTs = n*Ts; %时域采样时间序列
ts = 0:Ts:Ts*N;
x = sin(2*pi*f*ts); %时域采样,
subplot(311);
stem(ts,x);
title(['采样信号,Ts=' num2str(Ts)]);
%下面是为了更好地显示出待采样信号的波形
Ts1 = 0.001;
NP1 = floor( (1/f)/(Ts1) );
t1 = [0:T/Ts1-1]*Ts1;
f1 = sin(2*pi*t1);
hold on;
plot(t1,f1,'r-');
hold off;
%下面开始用内插法重建信号
%采样信号: x(n)=f
%采样间隔: T=Ts
%原理(内插法): y(t)=Σx(n)sinc((t-nTs)/Ts)
t1 = 0; %开始时间
t2 = 1/f; %结束时间(取信号的1个周期)
interpfac = 10;
fs_sinc = interpfac*Fs;%内插函数的采样率,即源信号过采样的采样率,默认10倍过采样
Dt = Ts/interpfac;
t=t1:Dt:t2;
delay = Dt*0;
ta=t1:Dt:Ts*N;
fa = zeros(length(ta),1);
% figure,
for t = 0:length(ta)-1 %求过采样后的每个值
for m = 0:length(nTs)-1 %累加sinc与原函数对应点的积
fa(t+1) = fa(t+1) + x(m+1)*sinc((t*Dt - delay - m*Ts)/Ts) ;
% stem(ta,sinc((ta - delay - m*Ts)/Ts)),
% hold on,stem(ts,x,'r'),
% hold on,plot(ta,fa,'x'),
% hold off
end
end
%fa = f * sinc( Fs*(ones(length(nTs),1)*t - nTs'*ones(1,length(t))) );
subplot(312);
% plot(t,fa);
stem(ta,fa)
title('重建信号(内插法)');
%figure,stem(ta,sinc((ta - delay - n*Ts)/Ts)),hold on,stem(ta*4,f(1:41),'r')
%得到小数时延信号
Delayed_f = fa(mod(1:length(fa),interpfac)==1);%按源信号的采样间隔取值
% Delayed_f = [fa(1),Delayed_f']';
subplot(313),stem(ts,Delayed_f);
% fa = f * sinc( Fs*(ones(length(nTs),1)*t - nTs'*ones(1,length(t))) );
% subplot(212);
% % plot(t,fa);
% stem(t,fa)
% title('重建信号(内插法)');
卷积计算如代码中的循环部分,循环中注释部分可以看到移位计算的过程,另外,插值计算可以引出分数时延滤波器,代码改变delay的值可以实现简单的分数时延
版权声明:本文为u010592995原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。