欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内插函数恢复模拟信号

程序员文章站 2022-06-08 18:50:01
...

使用内插函数恢复模拟信号

时域信号的离散会导致频域的周期延拓,只有满足不低于信号最高频率两倍的采样率采样,才不会导致频域周期延拓后的混叠,才有可能不失真地恢复源信号。
在频域上看,恢复信号就是用一个理想低通滤波器与时域信号的频谱相乘,以得到频域的第一个周期,而频域的理想低通滤波器,也就是频域矩形窗,经过傅里叶逆变化后在时域是无限长的内插函数,是非因果的
非因果系统:系统的当前输出只与当前或者之前的输入有关,而与之后的输入无关
一个时域时域无限长的响应,系统在t = 0输入,但系统在t<0时就开始有响应了,所以这个系统是非因果的,是物理不可实现的。

用matlab仿真采样信号的恢复,连续模拟信号可看做采样率无穷大的离散数字信号,因此,离散信号的恢复可看做一个插值的过程

前面提到恢复信号可以在频域低通滤波,频域相乘对应着时域卷积,因此过采样可以在时域用内插函数与源信号卷积实现,卷积公式如下


y(t)=m=+xa(mTs)sin[π(tmTs)/Ts]π(tmTs)/Ts

其中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的值可以实现简单的分数时延

相关标签: 数字信号处理