matlab DTFT DFT函数
- 格式:docx
- 大小:14.70 KB
- 文档页数:1
实验二 用MATLAB 计算傅立叶变换(2课时)一、实验目的1、掌握用MA TLAB 计算DTFT 及系统频率响应的方法。
2、掌握用MA TLAB 计算DFT 和IDFT 的方法。
3、掌握用DFT 计算圆周卷积和线性卷积的方法。
二、实验设备计算机一台,装有MATLAB 软件。
三、实验原理和基本操作1.用MA TLAB 计算DTFT对于序列x (n ),其离散时间傅立叶变换(DTFT )定义为:∑∞-∞=-=n n j e n x j X ωω)()( (1)序列的傅立叶变换(DTFT )在频域是连续的,并且以ω=2π为周期。
因此只需要知道jw X(e )的一个周期,即ω=[0,2π],或[-π,π]。
就可以分析序列的频谱。
用MA TLAB 计算DTFT ,必须在-π≤ω≤π范围内,把ω用很密的、长度很长的向量来近似,该向量中各个值可用下式表示: w=k*dw=k*K π2 (2) 其中:d ω=Kπ2 称为频率分辨率。
它表示把数字频率的范围2π均分成K 份后,每一份的大小,k 是表示频率序数的整数向量,简称为频序向量,它的取值可以有几种方法:通常在DTFT 中,频率取-π≤ω<л的范围,当K 为偶数时,取 k 12,,1,0,1,,12,2--+--=K K K 如果K 为奇数,则取 k 5.02,,1,0,1,,5.02--+-=K K 可以为奇偶两种情况综合出一个共同的确定频序向量k 的公式; k=12K -⎢⎥-⎢⎥⎣⎦ :12K -⎢⎥⎢⎥⎣⎦(3) 上式中⎢⎥⎣⎦表示向下取整。
在MA TLAB 中的向下取整函数为floor ,floor (x )的作用是把x 向下(向-∞方向)取整,所以与(3)式等价的MATLAB 语句为 k ))5.02(:)5.02((-+-=K K floor (4) 给定了输入序列(包括序列x 及其位置向量n ),又设定了频率分辨率d ω及频序向量k ,则DTFT 的计算式(1)可以用一个向量与矩阵相乘的运算来实现。
Matlab在离散傅立叶变换教学中的应用摘要:离散傅立叶变换(DFT)是数字信号处理课程的重点。
DFT中涉及到的基本概念、物理意义、参数改变对DFT的影响是教学难点。
利用matlab工具,精心设计案例,进行对比教学,在课堂实践中收到了良好的教学效果。
关键词:数字信号处理;离散傅立叶变换;Matlab 中图分类号:G434 文献标识码:A 文章编号:1672-7800(2012)001-0180-02?お?1 离散信号的傅立叶变换―DTFT离散傅立叶变换(DFT)的一个重要应用就是和作为原模拟信号的频谱近似。
为说明DFT与原信号频谱的关系,我们设计以下教学实例。
例1:产生一个100秒长的包含两个频率分别为0.05Hz和0.3Hz的连续信号,分析其抽样前后的频谱关系。
步骤如下:(1)计算机上为实现连续信号,可以采取远大于信号最高分量0.3Hz的2倍的采样频率,令Fs=10Hz 来近似实现。
信号波形如图1所示。
图1 连续信号(T=100s)(2)计算连续信号的频谱X(jΩ)。
同理,计算机上可用间隔很小的频域抽样近似。
部分代码如下:N=1000; %频域点数xft=fftshift(fft(x3,N));%取正负频率轴不同时长信号的FT如图2所示。
对于本例中无限长的2分量周期信号,其FT应表现为两根离散谱线(考虑到负频率,为四根谱线)。
由于处理的信号实际为有限长,受到加窗的影响,因此谱线有所展宽,即非周期连续信号的频谱为连续谱。
图2显示,将信号截断为原来的一半,图2(b)谱线展宽较图2(a)明显。
图2 连续信号的FT(a)100s b)50s(3)对原连续信号以满足抽样定理的较低抽样频率抽样,Fs=1Hz,得到长度为51点的离散信号x(n);并计算该离散信号的DTFTX(ejω)。
如图3所示。
比较图3中信号的DTFT和图2中信号的FT,可以发现:时域上抽样,导致频谱发生周期延拓,离散信号的DTFT是以f=fs为周期的周期谱。
演示用Matlab 计算FT 和DTFT 的方法% M020802% 演示用Matlab 计算FT 和DTFT 的方法。
验证采样间隔越小,DTFT 就越逼近FT。
%figure(1)set(gcf,'color','w')% 产生连续时间信号Dt=0.00005; t=-0.005:Dt:0.005; xa=exp(-1000*abs(t));% 显示连续时间信号subplot(221); plot(t*1000,xa); grid;xlabel('t'); ylabel('xa(t)'); title('连续时间信号');% 计算付里叶积分并显示fmax = 2000; Wmax=2*pi*fmax; K=1000; k=-K:1:K; W=k*Wmax/K;% Xa=xa*exp(-j*t'*W)*Dt; % Xa 是行向量(第12行)Xa=exp(-j*W'*t)*xa'*Dt; % Xa 是列向量(第13行)subplot(222); plot(W/(2*pi),Xa); grid; % 以f(Hz) 作为频率轴xlabel('归一化频率'); ylabel('Xa(w)'); title('付里叶积分');% 对连续时间信号采样Ts=0.0002; n=-25:1:25; x = exp(-1000*abs(n*Ts));subplot(223); H = stem(n*Ts*1000,x); set(H,'markersize',2); grid; axis([-5,5,0,1.1]);xlabel('n'); ylabel('x(n)'); title('对连续时间信号采样');% 计算DTFT 并显示fs = 1/Ts; f = 2000; K=1000; k=-K:1:K; N = 200; w=(2*pi*(f/fs)*k/K);X=x*exp(-j*n'*w); % X 是行向量subplot(224); plot(w*fs/(2*pi),X*Ts); grid; % 以f(Hz) 作为频率轴xlabel('归一化频率'); ylabel('X * Ts'); title('离散付里叶变换');% 显示计算误差% a = abs(Xa)-abs(X*Ts); % Xa 和a 都是行向量(第23行)a = abs(Xa')-abs(X * Ts); % a 是列向量(第24行)error_max = max(a)% error_max = -5.2822e-006% 以4个周期显示DTFTfigure(2)set(gcf,'color','w')fs = 1/Ts; f = 2000; K=1000; a = 5; k=-a*K:1:a*K; w=(2*pi*(f/fs)*k/K);X=x*exp(-j*n'*w);subplot(211); plot(w/(2*pi),X); grid; % 以归一化频率f/fs 作为频率轴xlabel('归一化频率'); ylabel('|X|'); title('离散付里叶变换');。
基于Matlab的DFT及FFT频谱分析基于Matlab的DFT及FFT频谱分析一、引言频谱分析是信号处理中的重要任务之一,它可以揭示信号的频率特性和能量分布。
离散傅里叶变换(DFT)及快速傅里叶变换(FFT)是常用的频谱分析工具,广泛应用于许多领域。
本文将介绍通过Matlab进行DFT及FFT频谱分析的方法和步骤,并以实例详细说明。
二、DFT及FFT原理DFT是一种将时域信号转换为频域信号的离散变换方法。
它将信号分解成若干个正弦和余弦函数的叠加,得到频率和幅度信息。
FFT是一种高效的计算DFT的算法,它利用信号的对称性和周期性,将计算复杂度从O(N^2)降低到O(NlogN)。
FFT通过将信号分解成不同长度的子序列,递归地进行计算,最终得到频谱信息。
三、Matlab中的DFT及FFT函数在Matlab中,DFT及FFT可以通过内置函数进行计算。
其中,DFT使用函数fft,FFT使用函数fftshift。
fft函数可直接计算信号的频谱,fftshift函数对频谱进行频移操作,将低频移到频谱中心。
四、Matlab中DFT及FFT频谱分析步骤1. 读取信号数据首先,将待分析的信号数据读入到Matlab中。
可以使用内置函数load读取文本文件中的数据,或通过自定义函数生成模拟信号数据。
2. 时域分析通过plot函数将信号数据在时域进行绘制,以观察信号的波形。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
3. 信号预处理针对不同的信号特点,可以进行预处理操作,例如去除直流分量、滤波等。
这些操作可提高信号的频谱分析效果。
4. 计算DFT/FFT使用fft函数计算信号数据的DFT/FFT,并得到频谱。
将信号数据作为输入参数,设置采样频率和点数,计算得到频谱数据。
5. 频域分析通过plot函数将频谱数据在频域进行绘制,观察信号的频率特性。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
6. 结果解读根据频谱图像,分析信号的频率成分、幅度分布和峰值位置。
实验四 信号的谱分析一、实验目的:1、 掌握DTFT 原理及其程序实现,学习用DTFT 对信号进行谱分析。
2、 掌握DFT 原理及其程序实现,学习用DFT 对信号进行谱分析。
3、 熟悉FFT 算法原理和掌握fft 子程序的应用。
4、 掌握DFT 的性质。
二、实验内容:1、 对于序列x(n)=[3,1,7,2,4],在-π ~ π内取64个频点,利用矩阵操作求其DTFT ,画出它的幅频特性和相频特性。
并把x(n)的位置零点右移一位,再求DTFT ,画出其幅频特性和相频特性,讨论移位对于DTFT 的影响。
2、 利用矩阵操作求1题中序列的DFT ,并画图。
3、 利用Matlab 自带的fft 函数求1题中序列的DFT ,并与1题中求出的DTFT 相比较。
4、 已知序列x(n)=[2,3,4,5]位于主值区间,求其循环左移一位的结果,画出循环移位的中间过程。
提示:左右各拓展一个周期,nx=[-4:7];采用stem 函数画图。
5、 已知序列x(n)=[1,2,3,4,5,6]位于主值区间,循环长度为8,确定并画出循环折叠y(n)=x((-n)8);如果循环长度为6,确定并画出循环折叠y(n)=x((-n)6)。
6、 已知序列x(n)=[2,1,5,3]位于主值区间,h(n)=nR 4(n),计算循环卷积1()()()c y n h n x n =⑥,2()()()c y n h n x n =⑩和线性卷积()()*()y n h n x n =,画出1()c y n 、2()c y n 和()y n 的波形图,观察循环卷积和线性卷积的关系。
三、实验报告要求:1.实验原理:序列x (n)的频谱定义为:nj n en x n x F j X ωω-∞-∞=∑==)())(()( πωπ≤≤-;也称为它的离散时间傅立叶变换。
可以认为,序列中的每一个样本x(n)对频谱产生的贡献为n j e n x ω-)( ,把整个序列中所有样本的频谱分量按向量(即复数)叠加起来,就得到序列的频谱X(j ω)。
傅⾥叶级数(FS)以及FT、DTFT、DFS和DFT 傅⾥叶级数(FS)周期为 T 的函数f(t),ω=2πT. 正交基为{e jnωt},n=0,±1,±2,⋯。
f(t)=∞∑n=−∞C n e−jωnt C n=<f(t),e jnωt><e jnωt,e jnωt>=∫T f(t)e−jnωt dt∫T e jnωt e−jnωt dt=1T∫Tf(t)e−jnωt dt连续时间的傅⾥叶变换(FT)F(ω)=∫∞−∞f(t)e−jωt dtf(t)=12π∫∞−∞F(ω)e jωt dω离散时间序列的傅⾥叶变换(DTFT)它⽤于离散⾮周期序列分析对应频域连续周期(周期为 2π),条件是x(n) 绝对可和或者能量有限,即∑∞n=−∞|x(n)|<∞∑∞n=−∞|x(n)|2<∞。
X(e jω)=∞∑n=−∞x(n)e−jωn(1)x(n)=12π∫π−πX(e jω)e jωn dω(2)式(1)中,ω为数字⾓频率,它是模拟域频率Ω对采样频率f s的归⼀化,即ω=ΩT s=Ω/f s Z变换由z=e jω代⼊上式得X(z)=∞∑n=−∞x(n)z−n周期序列的离散傅⾥叶级数(DFS)x(n) 是周期为 N 的周期序列,可以看做X(k)的傅⾥叶级数频域展开,离散周期 ---> 周期离散,周期都为N。
˜X(k)=N−1∑n=0˜x(n)e−j2πN nk=N−1∑n=0˜x(n)W nk N k∈Z˜x(n)=1NN−1∑k=0˜X(k)e j2πN nk=1NN−1∑k=0˜X(k)W−nkNn∈Z W N=e−j2πN有限长序列的离散傅⾥叶变换(DFT)x(n) 为有限长序列,长度为 N 。
其他值都为 0 。
X(k)=N−1∑n=0x(n)W−nkN0⩽DFT 与 DTFT 、z变换的关系X(k) =X(e^{j\omega})|_{\omega =\frac{2\pi}{N}k} \\ X(k) = X(z)|_{z=W_N^{-k}} Matlab仿真信号的抽样,CFT,DFT 和 FFTts=0.5; %采样时间间隔df=1.0;fs = 1/ts; %采样频率n2 = 50/ts; %time=[0,50]之间采样n1 = fs/df;N = 2^(max(nextpow2(n1),nextpow2(n2))); %nextpow2(N) returns the first P such that 2.^P >= abs(N).%当序列是2的幂次⽅时,FFT⾼效df = fs/N; %设置分辨率t = 0:0.01:50;y = cos(2/5*pi*t);subplot(2,2,1);plot(t,y,'k:'); %绘制余弦信号hold ont2=0:ts:50;y2=cos(2/5*pi*t2);stem(t2,y2,'k'); % 画⽕柴杆图,对余弦信号抽样axis([0 10 -1.2,1.2]);title('抽样信号: \rm x_{s}(t)');xlabel('t');line([0 10],[0 0],'color',[0 0 0]);hold offk=-N:N;w = df*k;Y = 0.01*y*exp(-j*2*pi*t'*w);% 计算CFTY=abs(Y);subplot(2,2,2);plot(w,Y,'k');axis([-fs/2-0.5,fs/2+0.5,0,8*pi+0.5]);title('连续傅⾥叶变换: X(f)');xlabel('f');subplot(2,2,3);Y1=y2*exp(-j*2*pi*t2'*w); % 计算离散傅⾥叶变换Y1=Y1/fs;plot(w,abs(Y1),'k');title('离散傅⾥叶变换 \rm X_{s}(f)');xlabel('f');axis([-fs/2-1,fs/2+1,0,8*pi+0.5]);Y2=fft(y2,N); %使⽤FFT计算离散傅⾥叶变换Y2=Y2/fs;f=[0:df:df*(N-1)]-fs/2; %调整频率坐标subplot(2,2,4);plot(f,fftshift(abs(Y2)),'k');axis([-fs/2-0.5,fs/2+0.5,0,8*pi+0.5]);title('快速傅⾥叶变换:\rm X_{s}(f) ');xlabel('f');由此可见,FFT 可以很好地表现 CFT 的频谱图。
信号与系统分析一、典型信号的matlab 表示表示连续信号,需定义自变量的范围和取样间隔,如t=0:0.01:3 1. 实指数信号 y=k*exp(a*t)2. 正弦信号 k*sin(w*t+phi) k*cos(w*t+phi)3. 复指数信号 y=k*exp((a+i*b)*t)实部real(y) 虚部imag(y) 模abs(y) 相角angle(y) 共轭conj(y) 4. 抽样信号 Sat=sinc(t/pi)5. 矩形脉冲信号 y=rectpuls(t,width)周期方波信号 y=square(2*pi*f*t,duty) %产生频率为fHZ ,占空比为duty%的方波 6. 三角脉冲信号非周期三角波y=tripuls(t,width,skew) %斜度 skew ,最大幅度出现在t=(width/2)*skew 周期三角波 y=sawtooth(t,width)7. 单位阶跃信号 function y=uCT(t) y=(t>=0)阶跃信号符号函数 Heaviside() y=sym(‘Heaviside(t)’) %调用时必须用sym 定义 冲激信号符号函数 Dirac()二、Matlab 的符号运算 1. 定义符号变量syms 变量名 syms xsym(‘变量名’) x=sym(‘x ’) sym(‘表达式’) sym(‘x+1’)2. 化简符号运算结果 simple 或simplify3. 绘制符号表达式图形 ezplot(y,[a,b])三、连续信号的运算微分和积分运算(用符号表达式来表示) 1. 微分运算Diff(function,’variable ’,n) % variable 为求导变量,n 为求导阶数 例:syms a x y y=sin(a*x^2); dy=diff(y ,’x ’) 2. 积分运算int(function, ’variable ’,a,b) %a 为积分下限,b 为积分上限 3. 信号的反折 fliplr(x) 4. 卷积计算1) 符号运算计算卷积(求解积分的方法) 例:)(*)()(t u e t u et y tTt --=syms T t taoxt1=exp(-t); xt2=exp(-t/T);xt_tao=subs(xt1,t,tao)*subs(xt2,t,t-tao);yt=int(xt_tao,tao,0,t); yt=simplify(yt);2) 数值计算法求卷积 conv( )y = dt*conv(e,h)例:求e(t) = u(t)-u(t-1)和h(t) = u(t)-u(t-1)的卷积 t0 = -2; t1 = 4; dt = 0.01; t = t0:dt:t1; e = u(t)-u(t-1); h = u(t)-u(t-1);y = dt*conv(e,h); % Compute the convolution of x(t) and h(t) subplot(221)plot(t,e), grid on, title('Signal e(t)'), axis([t0,t1,-0.2,1.2]) subplot(222)plot(t,h), grid on, title('Signal h(t)'), axis([t0,t1,-0.2,1.2]) subplot(212)t = 2*t0:dt:2*t1; % the time range to the convolution of e and h.plot(t,y), grid on, title('The convolution of x(t) and h(t)'), axis([2*t0,2*t1,-0.1,1.2]), xlabel('Time t sec')四、连续LTI 系统的时域分析1. 系统响应的符号求解 dsolve(‘eq1,eq2,…’,’cond1,cond2,…’); %eqi 表示微分方程,condi 表示初始条件 例:eq=’D3y+2*D2y+Dy=0’;cond=’y(0)=1,Dy(0)=1,D2y(0)=2’; yzi=dsolve(eq,cond); %零输入响应 simplify(yzi);eq1=’D3y+4*D2y+8*Dy=3*Dx+8*x ’; eq2=’x=Heaviside(t)’;cond=’y(-0.01)=0,Dy(-0.01)= 0,D2y(-0.01)=0’; yzs=dsolve(eq1,eq2,cond);simplify(yzs.y); %零状态响应2. 零状态响应的数值求解1)y=lsim(sys,f,t)%sys 表示系统模型,由sys=tf(b,a)生成的系统函数对象 %f 输入信号向量,t 时间抽样点向量例:)()sin()(),()()()('''t u t t f t f t y t y t y π210665==++ ts=0;te=5;dt=0.01; sys=tf([6],[1,5,6]); t=ts:dt:te;f=10*sin(2*pi*t).*UT(t);y=lsim(sys,f,t);plot(t,y),grid on;xlabel(‘time ’),ylabel(‘y(t)’); title(‘零状态响应’); 2)y=conv(f,impul)3. 连续系统冲激响应 y=impulse(sys,t) %sys 表示系统模型4. 连续系统阶跃响应 y=step(sys,t)五、信号的频域分析 1.傅立叶变换 1)符号运算求法 fourier( )和ifourier( )例:)()(t u e t f t 2-=的傅立叶变换ft=sym(‘exp(-2*t)*Heaviside(t)’); fw=fourier(ft)ezplot(abs(fw)); %或者fw_conj=conj(fw);Gw=sqrt(fw*fw_conj); phase=atan(image(fw)/real(fw));%或者angle(fw) ezplot(phase)211Ω+=Ω)(j F 的傅立叶反变换syms tfw=sym(‘1/(1+w^2’); ft=ifourier(fw,t) 2)数值计算求法[][][]Nk k N en f k F k TN M n j TM TN k ≤≤∆=∆∆=-⨯-∆--⨯-⨯02111111,)()()()()()(πωω例:求)(t G 82的傅立叶变换 1)数值计算dt=0.01; t=-4:dt:4;ft=(t+4)/2.*uCT(t+4)-t.*uCT(t)+(t-4)/2.*uCT(t-4); N=2000; k=-N:N;W=pi*k/(N*dt);F=dt*ft*exp(-j*t'*W); F=abs(F); plot(W,F),grid on; axis([-pi pi -1 9]);title('amplitude spectrum'); 2)符号计算ft=sym('(t+4)/2*Heaviside(t+4)-t*Heaviside(t)+(t-4)/2*Heaviside(t-4)'); Fw=simplify(fourier(ft));ezplot(abs(Fw),[-pi pi]);grid on;2. 系统的频率特性1) [H,w] = freqs(b,a):连续系统频率响应的函数2) 波特图:采用对数坐标的幅频特性和相频特性曲线,可显示频响间的微小差异 bode(sys)例:求11+=s s H )(的频率特性w=0:0.01:8*pi; b=[1]; a=[1 1]; H=freqs(b,a,w); subplot(211); plot(w,abs(H)); subplot(212); plot(w,angle(H)); figure(2); sys=tf(b,a); bode(sys);3. 连续时间LTI 系统的频域分析 例:551+Ω=Ω--=j j H t u t u t x )(),()()(,求系统的响应。
matlab 离散转公式
在MATLAB中,离散转换通常指的是将离散时间域的信号转换为频率域表示,这可以通过离散傅里叶变换(DFT)或者快速傅里叶变换(FFT)来实现。
离散傅里叶变换可以通过MATLAB中的fft函数来实现,其语法为Y = fft(X),其中X是输入的离散信号,Y是输出的频率域表示。
需要注意的是,输入信号的长度应当是2的幂次方,如果不是的话,可以使用fft函数的变种fft2、fft3等来处理不同维度的信号。
另外,如果你指的是离散时间信号的Z变换,可以使用MATLAB 中的ztrans函数来进行离散转换。
语法为Z = ztrans(X),其中X 是输入的离散时间信号,Z是输出的Z变换结果。
需要注意的是,Z 变换通常用于分析离散系统的稳定性和传输特性。
总的来说,在MATLAB中进行离散转换通常涉及到离散傅里叶变换和Z变换,你可以根据具体的需求选择合适的函数来实现相应的转换。
希望这些信息能够帮助到你。
数字信号处理实验报告(四)一、实验题目:离散信号的DTFT 和DFT二、实验目的:加深对离散信号的DTFT 和DFT 的及其相互关系的理解。
三、实验原理:序列x[n] 的DTFT 定义:N 点序列x[n] 的DFT 定义:在MATLAB 中,对形式为的DTFT可以用函数H=Freqz(num,den,w)计算;可以用函数U=fft(u,N)和u=ifft(U,N)计算N 点序列的DFT 正、反变换。
四、实验内容:分别计算16 点序列的16 点和32点DFT,绘出幅度谱图形,并绘出该序列的DTFT 图形五、实验要求:讨论DTFT 和DFT 之间的相互关系。
说明实验产生的现象的原因。
六、实验数据:>> N1=16;N2=32;n=0:N1-1;k=0:N2-1;xn=cos(3*pi*n/16)+cos(11*pi*n/16)X1=fft(xn,N1);X2=fft(xn,N2);subplot(2,1,1);stem(n,abs(X1),'.');title('16点的DFT')subplot(2,1,2);stem(k,abs(X2),'.');title('32点的DFT')16点的DFT05101532点的DFTw=[0:1:500]*pi/500;freqz(xn,1 ,w)00.10.20.30.40.50.60.70.80.91-200-100100200Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s )00.10.20.30.40.50.60.70.80.91-40-2020Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )。