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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

/ u& k0 l, _2 S! R8 a4 {# N! n先给出离散时间傅里叶变换的简单介绍:$ c5 `& z' W2 I  ^: z5 M
' \" s) i2 r- R/ c' J2 `7 J( `
如果 x(n) 是绝对可加的,即
: x* `, Z1 t+ X3 ~7 z8 _
1 x; s5 u6 H' ?3 }' U / ^% J2 X3 V8 W6 Y) S

3 M: w/ M# ~" K% F) G0 G7 x那么它的离散时间傅里叶变换给出为:
! p$ M2 d+ F5 W8 h
. j6 {* y7 K, w/ D" j. t 2 A4 Q$ }; P; V2 j
* E& i2 n+ b$ i
w 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)0 j$ V- O, O# T" m0 ?5 E& J/ h
- k0 M3 `3 ~- R4 ?/ l; m! w: o
案例1:
7 s! e6 V) U0 Q! e( c. P 的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。
; v2 K' A! a- U( i2 O
$ M! z9 h9 {: k4 V% O$ x题解:
' z2 J+ r* |6 S6 g7 r
2 q5 ?/ w% q. N" @7 t由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。, ?: }! r! k5 @' M4 n' [
6 {5 r/ q0 b$ ?2 _; g
1 w1 \0 w3 p& a1 J& w& f% a' W
8 {6 [2 I0 f) R' _5 \& X- ^
, o, h, r) z% E, w' y

, a7 ~. S! \. a
' g( F  V. ]7 y脚本:
8 U0 w4 g+ }0 x9 y$ ]1 r) V# R
4 i- E$ P0 }4 |+ `" z# d
  • 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');
    ' w" \, U5 x8 M7 z$ l: o8 [* m4 @
     
( S; O7 X, l' C. ]0 U  N; Q+ n ! W1 C% L7 w. N8 W4 d
& E* G3 A/ N5 G- L9 W+ D/ i4 I

9 p# R6 J/ Q" O案例2:
4 ~8 d, s# w2 h) L& e" l求下面有限长序列的离散时间傅里叶变换:
. s  _7 P: S4 u" e# v( q( q: n* a2 g9 j2 C2 m5 t  u# p2 V
9 w8 g7 u% a5 `$ S

5 E9 i' ]8 F7 w; B: b在[0,pi]之间的501个等分频率上进行数值求值。5 d2 t  W  T' @4 W: {4 V$ k' I3 f. ]

8 m3 d* ]1 `# T& m/ Q" O. X7 E2 }题解:  O0 F' ^9 `, q! V* C! W

) n8 S7 C  I' @
2 g# ~: t/ }8 b; W6 g/ H% y9 q$ |5 |2 w
我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。
$ t/ X% J# \+ z# D# m3 t/ C! H; W4 {/ o$ N/ s6 e9 {
我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:
' i  u" L$ f. q/ w' D( b- ^9 V
" W" u2 x4 d3 u# O 0 D! H) W; H5 V# @  d1 D

% K1 Z6 e0 }/ F4 u, y9 R  Q4 k( e4 Y1 f; i# s. T$ s; X
用MATLAB实现如下:& g# V0 [1 K. e" J

! p9 t- z8 o( X. c1 ]/ _
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
    ' j0 A! j6 T% B) [* }

9 c) N" R2 f% C8 {- V9 P3 N1 Z& e4 z: J# ]3 r9 n# l# y& q
给出MATLAB脚本语言如下:
2 [( N$ ^- e5 J# D
- D- e. l# P7 [2 q& }0 L3 d
  • 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');
    % n3 }6 R7 @0 w4 }5 ~
. v0 l# n- p+ E& m2 D
" d' ]- x2 e" T- F% J( n- ]
      
- E/ b2 C! P) M/ M( ?7 [8 j$ @* W+ x" x! M: ~: \; K

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 03:31 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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