找回密码
 注册
关于网站域名变更的通知
查看: 869|回复: 1
打印 上一主题 下一主题

用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-1 09:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

# c8 i3 k/ X( L/ H% t先给出离散时间傅里叶变换的简单介绍:! [* k, |; P+ {& q
3 F  Z: d& D' Q( P+ ]! g
如果 x(n) 是绝对可加的,即
/ j  W5 }5 W8 ^
( y4 A; z/ j4 P6 X- F0 f! F, _
& L& x" h- ^7 F5 g+ L  u( I8 }( Z, N7 z
那么它的离散时间傅里叶变换给出为:
, D/ r4 m, M' V9 E6 J
0 J. @' ]  z! L% ] ) `; t4 L7 R; r4 n

" b' f6 v3 `$ z8 N- s. Nw 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)
. p7 |3 g7 K4 H# s8 J" k( Z: d" \& W" b" }/ F- j
案例1:5 e* h) U) v7 s- o5 Y- [: e+ f
的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。
8 z4 a7 S4 {+ G- S/ Y) ^! r3 V
0 t( t( y( z( [8 }! T题解:! L; v5 o5 p6 y) ]4 K4 P; ]

1 r9 o* ~" W! b4 a9 n& z: H+ X由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。
" ^  j) W/ e1 |4 _, j7 ~. y' @/ X
# G! S% c( e+ D" q! D" Z, A
5 m6 G6 N4 s; H" H! ?4 G9 ]( D7 C% _2 K. n
' H" X0 r6 P- N5 u0 ~- D

8 G  y: n8 [( Q8 U' |
& Q6 G* M, e  D9 h脚本:, ]8 P. q8 z" g( V4 r

! V' M8 V  Z; w% R7 y( q( F
  • clc
  • clear
  • close all
  • w = [0:500]*pi/500; %[0,pi] axis divided into 501 points
  • X = exp(j*w)./( exp(j*w) - 0.5*ones(1,501) );
  • magX = abs(X);
  • angX = angle(X);
  • realX = real(X);
  • imagX = imag(X);
  • subplot(2,2,1)
  • plot(w/pi,magX);
  • grid;
  • title('Magnitude Part');
  • xlabel('frequency in pi units');ylabel('Magnitude');
  • subplot(2,2,2)
  • plot(w/pi,angX);
  • grid;
  • title('Angle Part')
  • xlabel('frequency in pi units');ylabel('Radians');
  • subplot(2,2,3)
  • plot(w/pi,realX);
  • grid
  • title('Real Part');
  • xlabel('frequency in pi units');ylabel('Real');
  • subplot(2,2,4);
  • plot(w/pi,imagX);
  • grid;
  • title('Imaginary Part');
  • xlabel('frequency in pi units');ylabel('Imaginary');% T- f% a7 l9 M1 }$ U! V8 }7 b
     . l1 y4 @' T% [# t

# n+ B& {7 q1 W' E$ _- s 3 Y3 c6 z$ i+ z2 K( _% [  C; @2 m
( _; z/ g; ~1 O& f
案例2:$ ?9 z" I2 J) c8 Z+ y% W
求下面有限长序列的离散时间傅里叶变换:0 m. r. |( a& M, ]0 Z2 P

; C$ `* y3 [2 ^2 w4 c6 _( P 6 ~3 t; |' z+ k5 c1 G

& @3 g# [) f7 F: d1 y$ j在[0,pi]之间的501个等分频率上进行数值求值。
6 z3 |. p) J2 Y" o9 c6 K8 C
7 a$ M: J& }. T0 x' ^题解:
0 Z* V! e3 n! |8 g1 A2 v$ C3 C. t% x+ X) l4 c9 ?" N* ]6 s
, f7 O3 a; r8 o7 @
, X0 j  g" a7 W& H
我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。
* U! ?) o, K! h# f  F
; y  I! ?3 ]+ d7 Z我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:- O* Y9 e; b# Y  c
2 a; [! Y+ R" x* ], o7 P; u. k

7 e/ z6 d0 n# Z& f
! S- G# d, j% O; ~  t! v' L" T/ Y/ G' B
用MATLAB实现如下:
  ^3 K) y: ]- x. e8 f( s  C7 |' L/ k3 M; I8 S0 I0 o
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);9 m$ [3 M& X2 P: }

; `7 U' L8 M4 l  {+ _( @3 o) u8 y3 M! S2 Z# s7 r& {; ?4 Y# s
给出MATLAB脚本语言如下:) B. a( ~* `. C' J1 }2 @

/ k7 M& \& ]6 L; y
  • clc
  • clear
  • close all
  • n = -1:3;
  • x = 1:5;
  • k = 0:500;
  • w = (pi/500)*k;
  • X = x * (exp(-j * pi/500)).^(n' * k);
  • magX = abs(X);
  • angX = angle(X);
  • realX = real(X);
  • imagX = imag(X);
  • subplot(2,2,1);
  • plot(w/pi,magX);
  • title('Magnitude Part');
  • xlabel('w/pi');ylabel('Magnitude');
  • subplot(2,2,2);
  • plot(w/pi,angX);
  • title('Angle Part');
  • xlabel('w/pi');ylabel('Radians');
  • subplot(2,2,3);
  • plot(w/pi,realX);
  • title('Real part');
  • xlabel('w/pi');ylabel('Real');
  • subplot(2,2,4);
  • plot(w/pi,imagX);
  • title('Imaginary Part');
  • xlabel('w/pi');ylabel('Imaginary');! {* E8 E; d& O0 F0 F$ Y

( ?# J3 c# i  H0 K6 x0 X 0 t5 H$ }5 U9 @+ O) a  c
      
# N2 o4 R/ C/ y! ~; `" b0 ?3 ~0 p( t' t' P

该用户从未签到

2#
发表于 2021-4-1 10:33 | 只看该作者
用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-30 13:57 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表