自抽样定理的证明与实际应用.docx
《自抽样定理的证明与实际应用.docx》由会员分享,可在线阅读,更多相关《自抽样定理的证明与实际应用.docx(12页珍藏版)》请在冰豆网上搜索。
自抽样定理的证明与实际应用
抽样定理的证明与实际应用
假人14年5月
摘要:
通过实验观测了抽样信号fs(t)的频谱,研究了频谱的特点。
为了能够从抽样信号fs(t)中无失真地重建原信号f(t)而不致于产生混叠现象,采用了提高抽样频率的方法,使得滤波器的输出端只有所需要的信号频谱F(ω),从而进一步验证了著名的“抽样定理”。
关键字:
抽样定理离散频谱有源低通滤波器
一、抽样的概念
所谓抽样。
就是对时间连续的信号隔一定的时间间隔T抽取一个瞬时幅度值(样值),抽样是由抽样门完成的。
在一个频带限制在(0,fh)内的时间连续信号f(t),如果以小于等于1/(2fh)的时间间隔对它进行抽样,那么根据这些抽样值就能完全恢复原信号。
或者说,如果一个连续信号f(t)的频谱中最高频率不超过fh,这种信号必定是个周期性的信号,当抽样频率fs≥2fh时,抽样后的信号就包含原连续信号的全部信息,而不会有信息丢失,当需要时,可以根据这些抽样信号的样本来还原原来的连续信号。
根据这一特性,可以完成信号的模-数转换和数-模转换过程。
二、验证方法
本次设计应用MATLAB验证时域采样定理。
了解MATLAB软件,学习应用MATLAB软件的仿真技术。
它主要侧重于某些理论知识的灵活运用,以及一些关键命令的掌握,理解,分析等。
初步掌握线性系统的设计方法,培养独立工作能力。
加深理解时域采样定理的概念,掌握利用MATLAB分析系统频率响应的方法和掌握利用MATLAB实现连续信号采样、频谱分析和采样信号恢复的方法。
计算在临界采样、过采样、欠采样三种不同条件下恢复信号的误差,并由此总结采样频率对信号恢复产生误差的影响,从而验证时域采样定理。
MATLAB是一套功能十分强大的工程计算及数据分析软件,广泛应用于各行各业。
MATLAB是矩阵实验室之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C语言和FORTRAN等语言完全相同的事情简捷得多.在新的版本中也加入了对C,c++,FORTRAN,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用。
三、验证实验的基本原理
(1)时域采样定理
1、对连续信号进行等间隔采样形成采样信号,采样信号的频谱是原连续信号的频谱以采样频率为周期进行周期性的延拓形成的。
2、设连续信号的的最高频率为maxF,如果采样频率max2FFs,那么采样信号可以唯一的恢复出原连续信号,否则max2FFs会造成采样信号中的频谱混叠现象,不可能无失真地恢复原连续信号。
(2)设计原理图
四、实验步骤
1、画出连续时间信号的时域波形及其幅频特性曲线,信号为
f(x)= sin(2*pi*60*t)+cos(2*pi*25*t)+cos(2*pi*30*t);
2、 对信号进行采样,得到采样序列 ,画出采样频率分别为80Hz,120 Hz,150 Hz时的采样序列波形;
3、对不同采样频率下的采样序列进行频谱分析,绘制其幅频曲线,对比各频率下采样序列和的幅频曲线有无差别。
4、对信号进行谱分析,观察与3中结果有无差别。
5、由采样序列恢复出连续时间信号 ,画出其时域波形,对比与原连续时间信号的时域波形。
五、MATLAB实现编程
%实现采样频谱分析绘图函数
function fz=caiyang(fy,fs)
%第一个输入变量是原信号函数,信号函数fy以字符串的格式输入
%第二个输入变量是采样频率
fs0=10000; tp=0.1;
t=[-tp:
1/fs0:
tp];
k1=0:
999; k2=-999:
-1;
m1=length(k1); m2=length(k2);
f=[fs0*k2/m2,fs0*k1/m1];
%设置原信号的频率数组
w=[-2*pi*k2/m2,2*pi*k1/m1];
fx1=eval(fy);
FX1=fx1*exp(-j*[1:
length(fx1)]'*w);
%求原信号的离散时间傅里叶变换
Figure
%画原信号波形
subplot(2,1,1),plot(t,fx1,'r') title('原信号'), xlabel('时间t (s)')
axis([min(t),max(t),min(fx1),max(fx1)])
%画原信号幅度频谱
subplot(2,1,2),plot(f,abs(FX1),'r')
title('原信号幅度频谱') , xlabel('频率f (Hz)')
axis([-100,100,0,max(abs(FX1))+5])
% 对信号进行采样 Ts=1/fs;
%采样周期 t1=-tp:
Ts:
tp;
%采样时间序列 f1=[fs*k2/m2,fs*k1/m1];
%设置采样信号的频率数组 t=t1;
%变量替换 fz=eval(fy);
%获取采样序列 FZ=fz*exp(-j*[1:
length(fz)]'*w);
%采样信号的离散时间傅里叶变换
figure
% 画采样序列波形
subplot(2,1,1),stem(t,fz,'.'), title('取样信号') , xlabel('时间t (s)') line([min(t),max(t)],[0,0])
% 画采样信号幅度频谱 subplot(2,1,2),plot(f1,abs(FZ),'m')
title('取样信号幅度频谱') , xlabel('频率f (Hz)')
%信号的恢复及频谱函数 function fh=huifu(fz,fs)
%第一个输入变量是采样序列
%第二个输入变量是得到采样序列所用的采样频率
T=1/fs; dt=T/10; tp=0.1;
t=-tp:
dt:
tp; n=-tp/T:
tp/T;
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
fh=fz*sinc(fs*TMN);
% 由采样信号恢复原信号
k1=0:
999; k2=-999:
-1;
m1=length(k1); m2=length(k2);
w=[-2*pi*k2/m2,2*pi*k1/m1];
FH=fh*exp(-j*[1:
length(fh)]'*w);
% 恢复后的信号的离散时间傅里叶变换
figure
% 画恢复后的信号的波形
subplot(2,1,1),plot(t,fh,'g'), st1=sprintf('由取样频率fs=%d',fs); st2='恢复后的信号';
st=[st1,st2]; title(st) , xlabel('时间t (s)') axis([min(t),max(t),min(fh),max(fh)])
line([min(t),max(t)],[0,0])
% 画重构信号的幅度频谱
f=[10*fs*k2/m2,10*fs*k1/m1];
%设置频率数组
subplot(2,1,2),plot(f,abs(FH),'g') title('恢复后信号的频谱') , xlabel('频率f (Hz)') axis([-100,100,0,max(abs(FH))+2]);
%主函数
f1='sin(2*pi*60*t)+cos(2*pi*25*t)+cos(2*pi*30*t)';
%输入一个信号
fs0=caiyang(f1,80); %频率maxs2ff,即欠采样 fr0=huifu(fs0,80);
fs1=caiyang(f1,120);%频率maxs2ff,临界采样 fr1=huifu(fs1,120);
fs2=caiyang(f1,150);%频率maxs2ff,即过采样 fr2=huifu(fs2,150);
六、实验结果与分析
1、程序分析
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
fh=fz*sinc(fs*TMN);
%由采样信号恢复原信号 plot(t,f)
%绘制fx的波形 stem(t,f)
%绘制一个二维杆图(画离散波形) subpolt(,,)
%在一个窗口画多个波形图 f=[10*fs*k2/m2,10*fs*k1/m1];
%设置频率数组 abs(x)
%求复数x的模 ones
%产生矩阵元素全为1的矩阵
2、原信号的波形及幅度频谱
3、结果分析
(1) 频率sf频谱重叠的现象被称为混叠现象。
欠采样信号的离散波形及频谱见下图2,恢复后信号见下图3。
(2)频率sf=max2f时,为原信号的临界采样信号和恢复,下图4为其采样的离散波形和频谱,从下图5恢复后信号和原信号先对比可知,只恢复了低频信号,高频信号未能恢复。
(3) 频率sf>max2f时,为原信号的过采样信号和恢复,由图6采样信号离散波形和频谱,可以看出采样信号的频谱是原信号频谱进行周期延拓形成的,从图7采样恢复后的波形和频谱,可看出与原信号误差很小了,说明恢复信号的精度已经很高。
七、验证结果分析
一、 在上述的实验当中,我们首先定义信号时采用了该信号的函数表达式的形式。
二、 在MATLAB中求连续信号的频谱,我们应用的是离散傅立叶变换,这样实际运算的仍是对连续信号的采样结果,这里我们给予了足够高的采样频率,把其作为连续信号来考虑。
三、 实际中对模拟信号进行采样,需要根据最高截止频率maxf,按照采样定理的要求选择采样频率的两倍,即maxs2ff。
设计中对三种频率时采样分析总结:
(1) 欠采样:
即maxs2ff时,时域波形恢复过程中已经不能完整的表示
原信号,有了失真,从频谱上也可看出,同的频谱带互相重叠,已经不能体现原信号频谱的特点了,从而无法得到原来的信号。
(2) 临界采样:
即maxs2ff时,时域波形任然不能恢复完整的原信号,
信号只恢复过程中恢复了低频部分,从频谱上便可看出,但任然不可完全恢复原信号。
(3) 过采样:
即maxs2ff时,此时的采样是成功的,它能够恢复原信号,从时域波形可看出,比上面采样所得的冲激脉冲串包含的细节要多,在频域中也没出现频谱的交叠,这样我们可以利用低通滤波器m(t)得到无失真的重建。
综合以上欠采样、临界采样、过采样三种情况的分析,可以看出要使采样信号可以恢复到原信号,采样频率必须满足时域采样定理,从而验证了时域采样定理。
八、实际应用
应用实例:
带通采样与压缩感知 ——论正交匹配追踪算法的压缩传感。
压缩感知是新兴的采样理论通过开发信号的稀疏特性,在远小于Nyquist 采样率的条件下,用随机采样获取信号的离散样本,然后通过非线性重建算法完美的重建信号。
压缩感知理论的核心思想主要包括两点。
第一个是信号的稀疏结构。
传统的Shannon信号表示方法只开发利用了最少的被采样信号的先验信息,即信号的带宽。
但是,现实生活中很多广受关注的信号本身具有一些结构特点。
相对于带宽信息的自由度,这些结构特点是由信号的更小的一部分自由度所决定。
换句话说,在很少的信息损失情况下,这种信号可以用很少的数字编码表示。
所以,在这种意义上,这种信号是稀疏信号(或者近似稀疏信号、可压缩信号)。
另外一点是不相关特性。
稀疏信号的有用信息的获取可以通过一个非自适应的采样方法将信号压缩成较小的样本数据来完成。
理论证明压缩感知的采样方法只是一个简单的将信号与一组确定的波形进行相关的操作。
这些波形要求是与信号所在的稀疏空间不相关的。
压缩感知方法抛弃了当前信号采样中的冗余信息。
它直接从连续时间信号变换得到压缩样本,然后在数字信号处理中采用优化方法处理压缩样本。
这里恢复信号所需的优化算法常常是一个已知信号稀疏的欠定线性逆问题。
而我们将要讨论的正交匹配追踪就是一种快速算法。
算法简介:
正交匹配追踪是对于0-范数的优化问题,实际上是NP问题,就是在多项式时间内难以求解,甚至无法验证解的可靠性。
于是,我们必须将0-范数换一下,变成1-范数,在0点处不可导,因此无论是梯度算法,矩阵求导等等手段都变得相形见绌。
1-范数是一个菱形,四个角都在坐标轴上,因此它和直线的交点以压倒性的概率落在坐标轴上。
这就是我们使用这种范数的原因。
最后,让我们总结一下,压缩传感理论的关键字:
稀疏(Sparsity)、不相关(Incoherence)、随机性(Randomness)、非自适应(Non-Adaptivity)、非线性(Non-Linearity)、不可微(Indifferentiability)。
从这些词语可以看出,压缩传感理论是对传统理论的颠覆。
这种颠覆最令人振奋的表现,就是它突破了香农采样定理的极限,能以随机采样的方式用更少的数据采样点(平均采样间隔低于采样定理的极限),来完美地恢复原始信号。
科学也就是在对传统理论不断地颠覆和修正中才得以进步和发展。
在这种基础下,我们可以利用正交匹配追踪进行一个简单的实验,代码如下:
(MATLAB执行文件位于打包文件夹中,执行后可看到下图波形)
% 1-D信号压缩传感的实现(正交匹配追踪法Orthogonal Matching Pursuit) % 测量数M>=K*log(N/K),K是稀疏度,N信号长度,可以近乎完全重构 % 参考文献:
Joel A. Tropp and Anna C. Gilbert
% Signal Recovery From Random Measurements Via Orthogonal Matching % Pursuit,IEEE TRANSACTIONS ON INFORMATION THEORY, VOL. 53, NO. 12, % DECEMBER 2007.
clc;clear
%% 1. 时域测试信号生成
K=7; % 稀疏度(做FFT可以看出来) N=256; % 信号长度
M=64; % 测量数(M>=K*log(N/K),至少40,但有出错的概率) f1=50; % 信号频率1 f2=100; % 信号频率2 f3=200; % 信号频率3f4=400; % 信号频率4 fs=800; % 采样频率 ts=1/fs; % 采样间隔 Ts=1:
N; % 采样序列
x=0.3*cos(2*pi*f1*Ts*ts)+0.6*cos(2*pi*f2*Ts*ts)+0.1*cos(2*pi*f3*Ts*ts)+0.9*cos(2*pi*f4*Ts*ts); % 完整信号
%% 2. 时域信号压缩传感
Phi=randn(M,N); % 测量矩阵(高斯分布白噪声) s=Phi*x.'; % 获得线性测量
%% 3.正交匹配追踪法重构信号(本质上是L_1范数最优化问题)
m=2*K; % 算法迭代次数(m>=K) Psi=fft(eye(N,N))/sqrt(N); % 傅里叶正变换矩阵
T=Phi*Psi'; % 恢复矩阵(测量矩阵*正交反变换矩阵)
hat_y=zeros(1,N); % 待重构的谱域(变换域)向量 Aug_t=[]; % 增量矩阵(初始值为空矩阵) r_n=s; % 残差值
for times=1:
m; % 迭代次数(有噪声的情况下,该迭代次数为K) for col=1:
N; % 恢复矩阵的所有列向量 product(col)=abs(T(:
col)'*r_n);
% 恢复矩阵的列向量和残差的投影系数(内积值)
end
[val,pos]=max(product); % 最大投影系数对应的位置 Aug_t=[Aug_t,T(:
pos)]; % 矩阵扩充
T(:
pos)=zeros(M,1);
% 选中的列置零(实质上应该去掉,为了简单我把它置零)
aug_y=(Aug_t'*Aug_t)^(-1)*Aug_t'*s;
% 最小二乘,使残差最小
r_n=s-Aug_t*aug_y; % 残差
pos_array(times)=pos; % 纪录最大投影系数的位置 end
hat_y(pos_array)=aug_y; % 重构的谱域向量
hat_x=real(Psi'*hat_y.'); % 做逆傅里叶变换重构得到时域信号
%% 4. 恢复信号和原始信号对比
figure
(1); hold on;
plot(hat_x,'k.-') % 重建信号 plot(x,'r') % 原始信号 legend('Recovery','Original')
norm(hat_x.'-x)/norm(x) % 重构误差
MATLAB模拟结果截图:
其中红色是原信号,黑色是恢复后的信号,可见利用压缩感知的恢复情况非常好。
参考文献
【1】谢平、王娜、林洪彬等编 《数字信号处理》 燕山大学2007年3月
【2】邹鲲、袁俊泉、龚享铱编 《MATLAB6.x信号处理》 清华大学出版社 2002年5月
【3】薛年喜主编 《MATLAB在数字信号处理中的应用》 清华大学出版社 2003[2]