时延离散化,matlab
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 03:49:13 初中作文
篇一:离散时间信号与系统实验的matlab实现
离散时间信号与系统
[实验目的]
1.了解信号处理的基本操作
2.熟悉一些常用的序列及其应用
[实验原理]
我们所接触的信号大多为连续信号,为使之便于处理,往往要对其进行采样,对信号抽样并保证其能完全恢复,对抽样频率有一定的限制。
基本的离散序列的定义如下:
1.单位采样序列
2.单位阶跃序列
3.实指数序列
,
4.复数指数序列
5.正余弦序列
,
6.周期序列
,
[实验内容] ; a为实数 ,
1.用MATLAB实现函数impseq(n0,n1,n2),使函数实现函数定义:
function [x,n]=impseq(n0,n1,n2)
if (n1>n2||n0>n2||n0 error('parameter error'); ,。 end; if (n1<=n2) for n=1:n2-n1+1 if (n==n0) x(1,n)=n1-1+n; x(2,n)=1; end; x(1,n)=n1-1+n; x(2,n)=0; end; x(2,n0-n1+1)=1; end; 运行结果: impseq(3,1,9) ans = 6 7 8 9 10 11 12 13 14 0 0 0 0 1 0 0 0 0 注:上面一行为自变量n,下面一行为函数值,以下运行结果为两行的,都与此题同,不在表明。 2.用MATLAB实现函数stepseq(n0,n1,n2),使函数实现u(n-n0) , 函数定义: function [x,n]=stepseq(n0,n1,n2) if (n0>n2||n0 error('parameter error'); end; for n=1:n2-n1+1 if (n+n1-1 x(1,n)=n1+n-1; x(2,n)=0; else x(1,n)=n1+n-1; x(2,n)=1; end; end; 。 运行结果: Stepseq(4,2,10) ans = 2 3 4 5 6 7 8 9 10 0 0 1 1 1 1 1 1 1 注:与上同,上面一行是自变量,下面一行是函数值。 3.用MATLAB实现下列序列 a. b. c. d. 将c中的函数定义: %函数实现序列 function [x,n]=f1() for n=1:9 x(1,n)=n; x(2,n)=(0.9).^(n); end; %实现序列 扩展为,周期数为4 函数 function f2() for k=1:10 x=exp((2+3*j).*k); disp(x); end; %实现序列 的函数 function f3() for k=0:10 x=3*cos(0.1*pi*k+pi/3)+2*sin(0.5*pi*k); disp(x); end; %实现序列d中要求的函数 function f4(n) while (1) n=n-11; if (n<0) break; end; end; n=n+11; disp(n); for k=0:10 x(1,k+1)=3*cos(0.1*pi*k+pi/3)+2*sin(0.5*pi*k); end; n=n+1; disp(x(1,n)); A:产生 运行结果: f1 ans = 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 0.9000 0.8100 0.7290 0.6561 0.5905 0.5314 0.4783 8.0000 9.0000 0.4305 0.3874 B产生 运行结果: f2 -7.3151 + 1.0427i 52.4235 -15.2556i -3.6758e+002 +1.6626e+002i 2.5155e+003 -1.5995e+003i -1.6733e+004 +1.4324e+004i 1.0747e+005 -1.2223e+005i -6.5870e+005 +1.0062e+006i 3.7693e+006 -8.0471e+006i -1.9182e+007 +6.2796e+007i 7.4837e+007 -4.7936e+008i C、产生x(n)=3cos(0.1πn+π/3)+2sin(0.5πn) 0<=n<=10 运行结果: f3 1.5000 2.6237 -0.3136 -3.2202 -2.0074 -0.5981 -2.9344 -4.9836 -2.7406 -0.2294 -1.5000 4.MATLAB中可用算术运算符“+”实现信号相加,但和的长度必 须相等。如果序列长度不等,或者长度虽然相等但采样的位置不同,就不能运用“+”了。试用MATLAB写出任意序列相加的函数sigadd,其定义如下: function [y,n]=sigadd(x1,n1,x2,n2) 篇二:基于MATLAB的离散时间信号的时域分析 基于MATLAB的离散时间信号的时域分析 摘 要 MATLAB目前已发展成为由MATLAB 语言、MATLAB 工作环境、MATLAB 图形处理系统、MATLAB 数学函数库和MATLAB 应用程序接口五大部分组成的集数值计算、图形处理、程序开发为一体的功能强大的系统。本次课程设计则在深入研究离散时间信号的基础上,利用MATLAB强大的图形处理功能、符号运算功能以及数值计算功能,利用MATLAB绘制单位脉冲序列、单位阶跃序列、正弦序列、实指数序列、复指数序列和矩形序列等常见序列的时域波形;利用MATLAB实现序列的常见运算,包括相加、相乘、数乘、时移、翻转、抽取和内插等,并绘制相应的时域波形。 关键词:MATLAB 图形处理 离散时间信号 时域 1 MATLAB简介 1.1 MATLAB语言功能 MATLAB是一个高精度的科学计算语言,它将计算、可视化编程结合在一个容易使用的环境中,在这个环境中,用户可以把提出的问题和解决问题的办法用熟悉的数学符号表示出来,它的典型使用包括: (1)数学和计算; (2)运算法则; (3)建模、仿真; (4)数值分析、研究和可视化; (5)科学的工程图形; (6)应用程序开发,包括创建图形用户接口。 1.2 MATLAB语言特点 MATLAB 是一个交互式系统,他的基本数据单元是数组,这个数组不要求固定的大小,因此可以让用户解决许多技术上的问题,特别是那些包含矩阵和矢量运算的问题。MATLAB的指令表达与数学、工程中常用的习惯形式相似,与C、Fortran、等高级语言相比,它的语法规则更简单、表达更符合工程习惯,正因为如此,人们用MATLAB语言编写程序就犹如在便笺上书写公式和求解,因而MATLAB被称为“便笺式”的科学工程语言。 MATLAB的最重要特征使他拥有解决特定应用问题的程序组,也就是TOOLBOX(工具箱),如信号处理工具箱,控制系统工具箱、神经网络工具箱、模糊逻辑工具箱、通信工具箱和数据采集工具箱等许多专用工具箱,对大多数用户来说,要想灵活、高效地运用这些工具箱,通常都需要学习相应的专业知识。 此外,开放性也许是MATLAB最重要和最受欢迎的特点之一。除内部函数外,所有的MATLAB主要文件和各工具箱文件都是可读的、可改的源文件,因为工具箱实际上是有一组复杂的MATLAB函数组成,用以解决待定的问题,因此用户可以通过对源文件进行修改和加入自己编写的文件去构建新的专用工具箱。 2 常用离散时间信号的时域波形 2.1 单位脉冲序列 单位脉冲序列δ(n) 其特点是仅在n=0处取值为1,n为其他值处均为零。它类似于模拟信号中的单位冲激函数δ(t)。 解:MATLAB程序如下: n=-5:5; x=[zeros(1,5),1,zeros(1,5)]; stem(n,x,'fill'); grid on 调试生成的图形如图3.1: 图2.1单位脉冲序列 2.2 单位阶跃序列 单位阶跃序列u(n)定义为: ?1n?0 u(n)?? 0n?0? 单位阶跃序列的源程序: n=-30:30; un=[zeros(1,30),ones(1,31)]; stem(n,un) 时域波形图如下图: 图2.2 单位阶跃序列 2.3 正弦序列 正弦序列定义为: ???) x(n)?sinn( 其中,ω是正弦序列的数字域频率;Φ 为初相。与连续的正弦信号不同,正弦序列的自变量n必须为整数。可以证明只有当为有理数时,正弦序列才具有周期性。 下面利用MATLAB绘制正弦序列MATLAB源程序为: n=0:39; x=sin(pi/6*n); 的波形图 stem(n,x,'fill'),xlabel('n'),grid on title('正弦序列') axis([0,40,-1.5,1.5]); 图形如下: 图 2.3 正弦序列 2.4 实指数序列 实指数序列定义为制 实指数序列 、 ,其中n为正整数。下面利用MATLAB分别绘 ,源代码及波形图如下: n=0:10; a1=1.2;a2=-1.2; x1=a1.^n;x2=a2.^n; subplot(221); stem(n,x1,'fill'),grid on; subplot(222); stem(n,x2,'fill'),grid on 产生的波形图如下图: 图2.4 实指数序列 篇三:离散信号及离散系统的MATLAB编程实现 课程实验报告 篇四:利用MATLAB编写DTFT,观察群延时 一、实验目的 1.自行编写功能函数实现DTFT的变化,并运用该函数实现之后的功能。 2.利用编写的DTFT函数,观察函数的离散傅里叶变换,并在三维空间中观察函数的频响特性。 3.利用MATLAB设计奇对称系统观察群延时对输入信号的影响。 二、实验条件 PC机,MATLAB7.0 三、实验内容 1)编写功能函数mydtft。 根据公式H(?)?? n????h[n]e?j?n,??2?f,将h[n]用样值向量h和位置向量n描述,fs 则DTFT可以用一个向量和一个矩阵的相乘来实现。函数如下: function H=mydtft(h,omga) L=length(h); n=[0:L-1]'; M=exp(-1i*n*omga); H=h*M; 2)做出DTFT,由于MATLAB无法计算连续变量,只能在某个区间范围内将omga赋值为很密的、长度很长的向量来近似为连续变量。由H(?)??h[t]e?j?t,??2?f可??? 知,当fs够高时,h[n]可近似于h(t)。 fs=50;T=2;A=5; P=2*pi/fs/40;omga=-pi/8:P:pi/8; s=[zeros(1,fs),A*ones(1,floor(T*fs)+1)];%构造门函数 S=mydtft(s,omga); plot(omga,abs(S));grid on;figure plot3(omga,real(S),imag(S));grid on;figure P=2*pi/fs/40;omga=-0.2*pi:P:pi*2.2; S=mydtft(s,omga); plot(omga,abs(S));figure sd=[s,s,s]; S=mydtft(sd,omga); stem(omga,abs(S));grid on;figure 利用mydtft构造出门函数的离散傅里叶变换,由上图可知为Sa函数。 扩大omga的范围,画出两个周期的离散傅里叶变换。 通过三维空间将幅频特性和相频特性同时放在实轴和虚轴上观察其变化。 XY轴的图像——实部频谱函数图 XZ轴图像——虚部频谱函数图 降低fs,用stem可看出h[n]的离散傅里叶变化。 3) N=2000;P=2*pi/N; omga=0:P:pi/3; phi1=-10*omga; phi2=-60*(omga+pi/3); phi3=-30*(omga+pi*2/3); phi=[phi1,phi2,phi3]; mag=[ones(1,length(phi)*2/3),zeros(1,length(phi)/3)];%幅度 H=mag.*exp(1i*phi);%传递函数 h=real(ifft([H,fliplr(conj(H))]));%将函数做共轭然后翻转变成奇对称 n=0:100; x=[cos(pi/2*n),cos(pi/4*n)]; y=filter(h,1,x); subplot(211);plot(x); subplot(212),plot(y); 通过图像可以看出信号延迟了60个单位,并且在中央的波形是因为两信号混叠所产生的。由图也可以看出,有用信号通过滤波器后,允许有一定的延时,但不希望波形失真。为了得到无失真传输,确保相位失真的唯一办法是使不同频率的信号通过滤波器时有相同的延迟。 篇五:MATLAB离散信号的产生和频谱分析实验报告 实验一离散信号的产生和频谱分析 一、实验目的 仿真掌握采样定理。 学会用FFT进行数字谱分析。 掌握FFT进行数字谱分析的计算机编程实现方法。 培养学生综合分析、解决问题的能力,加深对课堂内容的理解。 二、实验要求 掌握采样定理和数字谱分析方法;编制FFT程序;完成正弦信号、线性调频信号等模拟水声信号的数字谱分析; 三、实验内容 tt单频脉冲(CWP)为s(t)?rect()exp(j2?f0t)。式中,rect()是矩形包络,T是脉冲TT 持续时间,f0是中心频率。 12式中,MMt)]。2 是线性调频指数。瞬时频率f0?Mt是时间的线性函数,频率调制宽度为B?MT。 矩形包络线性调频脉冲信号(LFM)为s(t)?rect()exp[j2?(f0t?设参数为f0?20kHz,T?50ms,B?10kHz,采样频率fs?100kHz。 1.编程产生单频脉冲、矩形包络线性调频脉冲。 2.编程实现这些信号的谱分析。 3.编程实现快速傅立叶变换的逆变换。 tT 四、实验原理 1、采样定理 所谓抽样,就是对连续信号隔一段时间T抽取一个瞬时幅度值。在进行模拟/数字信号的转换过程中,当采样频率fs大于信号中最高频率f的2倍时(fs>=2f),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。 2、离散傅里叶变换(FFT) 长度为N的序列x(n)的离散傅立叶变换X(k)为: nkX(k)??x(n)WN,k?0,....,N?1 n?0N?1 N点的DFT可以分解为两个N/2点的DFT,每个N/2点的DFT又可以分解为两个 N/4点的DFT。依此类推,当N为2的整数次幂时(N?2),由于每分解一次降低一阶幂次,所以通过M次的分解,最后全部成为一系列2点DFT运算。以上就是按时间抽取的快速傅立叶变换(FFT)算法。当需要进行变换的序列的长度不是2的整数次方的时候,为了使用以2为基的FFT,可以用末尾补零的方法,使其长度延长至2的整数次方。 3、离散傅里叶反变换 序列X(k)的离散傅立叶反变换为 M 1N?1?nkx(n)??X(k)WN,Nk?0n?0,....,N?1 五、实验步骤 1.编程产生单频脉冲、矩形包络线性调频脉冲。 2.应用快速傅立叶变换(FFT)求这两种信号的频谱,分析离散谱位置、归一化频率、实际频率的关系。 调用函数Y=fft(x) or Y=fft(x,N) or Y=fft(x,N,dim)。 3.对于步骤2的结果,应用快速傅立叶变换的逆变换(IFFT)求两种信号的时域波形,并与已给的单频脉冲、矩形包络线性调频脉冲和伪随机脉冲信号波形进行对照。 调用函数x=ifft(Y) or x=ifft(Y,N) or x=ifft(Y,N,dim)。 4.对于步骤2的结果,进行频谱移位调整。将FFT变换的结果Y(频谱数据)进行移位调整,使其符合频谱常观表示方法,调整后,频谱的直流成分(即频率为0处的值)移到频谱的中间位置。分析离散谱位置、归一化频率、实际频率的关系。 移位调整调用函数Z=fftshift(Y)。频率间隔为Fs/N,频率范围为Fs/N*[-N/2:N/2-1]。 六、实验结果及分析 图1 CW信号及LFM信号时域波形图 如图1,为产生的单频脉冲、矩形包络线性调频脉冲信号的抽样信号。 图2 CW信号及LFM信号频谱图 如图2,为两信号的傅里叶变换波形,为使运算简单,取采样点数为2的整数次方,本体中总点数为5000,故采样点数可去4096个;在频谱移位调整之前,FFT所得的频谱图并不能够反映真实信号的频率。如CW信号真实频率为20KHZ,而图形中显示的为30KHZ。 图3 频谱移位前后CW信号及LFM信号频谱图对比 如图3,为两信号的FFT频谱移位调整后频谱图,由图可知,调整后频谱为真实信号的频谱。 图4 傅里叶反变换前后CW信号及LFM信号时域波形对比 如图4,IFFT后的图形与原信号一致,当改变FFT取样点数时(比如取样点过少),傅里叶反变换后的图形与原图形就会发生变化。 图5 归一化后CW信号及LFM信号频谱图 六、讨论、思考题 1.回忆课堂上所讲的DFT、FFT的概念和数字谱分析方法。 设x(n)是一个长度为M的有限长序列,则定义x(n)的N点离散傅里叶变换 ????1为X(k)=DFT[x(n)]= ?????=0??(??)???? k=0,1,…,N-1。然而直接计算DFT的计 算量与变换区间长度N的平方成正比,当N较大时,计算量太大,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。而FFT算法是将N电DFT分解为几个较短的DFT,可使乘法次数大大减少。常用的FFT算法是DIT-FFT和DIF-FFT。 而所谓的数字信号谱分析,就是计算信号的离散傅里叶变换,就是对连续信号和系统,可以通过时域采样,应用DFT进行近似谱分析。 2.总结用MATLAB工具箱函数实现谱分析的方法。 (1)在MATLAB中使用工具箱函数y=fft(x)得出连续信号的离散谱。 (2)使用y=fftshift(y)进行频谱搬移。 3.分析离散谱位置、归一化频率、实际频率的关系。 在经过fftshift进行频谱搬移将所分析信号的频谱放在正常频谱位置上后,离散谱位置等于实际频率。 4.分析数据补零的长短对谱分析结果的影响。 进行数据补零的结果就是增加采样点数N ,在保持采样频率不变的情况下,