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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

: \0 r0 C- i( }0 |2 S* n4 @) V先给出离散时间傅里叶变换的简单介绍:. m) K. P+ w. d

( m; u$ I; R* n  R, P& m. I如果 x(n) 是绝对可加的,即
+ t4 M$ i- D$ E6 e  r. A/ L
/ s, M' o% K& q# E; j1 C& ]0 }( E 8 f! c9 N; ]5 j( `2 F
" m0 M4 {2 j6 X, j- y5 g
那么它的离散时间傅里叶变换给出为:
/ K: }4 \) o0 E+ [
0 V6 R' |# n6 f2 x2 o% T; @, T & K0 h1 T0 P" `$ [$ ]* X
! q- \4 z1 k- v: N; U
w 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)
. ~% s) \1 ]- o( J: S; X+ l+ c! i
# ]: b; |  \7 _/ G7 z5 J7 a案例1:
; p% S( b' V  W8 A, r" k' A 的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。; f1 c0 R- X# M* M

* ~  h& r- B: s; W$ ?, H, C+ ?题解:6 b. a' `- f9 l, p8 z

8 y0 O* a! ^7 `. Q2 b1 |由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。
7 ~2 Q  H2 B6 U; [8 T, [& i, [% m" W8 T4 J
9 L: G* e' @1 m4 |$ W0 w

/ z/ j4 `5 U$ D2 O3 X * t: k4 m0 t" x9 \: B
: `0 X) f, c" u% t) r/ S

) f4 U* ?" Q/ R, L. Y4 v脚本:$ Q( y) ~. ^- }# r* G: ^# ~7 h) o

, c' _( b  D6 J; \
  • 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');1 k8 m8 V/ q" d: t1 Y- Y
     7 V% C2 D2 l2 k% ?- |0 `% m& r* V
9 ^+ u7 `9 f* o4 m

% }% |" J: d( p$ o0 k
; [! K1 u0 d) o) w: I案例2:
8 A3 w" a# c; e4 q求下面有限长序列的离散时间傅里叶变换:
- t" y" E8 h3 j# [: x4 I' v+ x2 u) I1 D# \: }
( r& |: z0 l0 ]* q

- _) y  U0 ]" [/ v" F& ~; M) Z4 H在[0,pi]之间的501个等分频率上进行数值求值。* w: ?7 M2 z/ u. T
3 R& U( n3 @( t5 B$ b; ?4 A
题解:
2 E9 p) G0 d" \" c# M, O& ~
' i# {4 P6 w8 P. b, K1 q
5 }' E/ |- R0 w
& ]/ g7 _0 }  r% u5 S我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。
! `( f" Q" w+ \% T* P
7 M) v2 @% {8 P. x3 K我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:
0 f( o4 c5 O0 {0 r
2 w4 K) c3 C0 ~: c9 B% e0 x* [ ; W. g! b% [: k2 H0 D0 c% |( P
8 }1 _7 v' I% d9 K& x
# r, I6 K/ n/ _
用MATLAB实现如下:# n$ n- T# n5 ~6 P
: F" A% E. t7 Y7 [$ l3 @
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
    3 [' h7 \7 l6 P

' E/ N4 a. q* Z6 X  n+ y
, W2 [8 d/ s- |6 A4 F( b7 L给出MATLAB脚本语言如下:" `" o. X0 M1 W
2 `* z* V) v; @4 s
  • 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');  c, E; i7 R: P% x6 ^

5 l1 v# H3 c3 V  M  v3 ?
% D8 p# W1 J* c4 ~+ ?$ r: i      7 Z1 e* }! ?! A8 o
8 A& j2 R/ b$ q3 a; O

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 04:04 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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