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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

  M4 Q  d: Y3 ?7 y0 C, @/ ~先给出离散时间傅里叶变换的简单介绍:0 F5 z5 Y3 u- [

' y* x4 B- d8 V7 P4 J如果 x(n) 是绝对可加的,即
* P" i7 y1 @# U; \& i, D1 Z! D7 y  E: g

1 m9 I$ V+ Z  l7 o3 \4 l. }8 L- e1 c
那么它的离散时间傅里叶变换给出为:# @5 H1 F, ?5 R9 k& B
1 r% |; c( i7 S$ n4 `1 X" E
) N8 ~( O& |$ z$ O, ~. b! M5 J

- a( Z8 m% [/ a. k6 Zw 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)$ q  n* W* f/ a  a6 C

( d" X: f9 D/ T5 O案例1:, t* R) N$ L+ M& B; }
的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。
3 h. E, A( k5 d( s" m9 O& F& l" n% z  y" w
题解:, i- S1 b3 d: U- z8 {
2 ]; n& b5 \: C% W4 N$ L
由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。
: T& o1 r5 k+ m' t; N6 E2 S$ X  R2 p; R6 t( u3 z9 J& ?- q

- _& \4 p, k1 R/ p
" i4 W. U: V* X! q4 d7 G 9 D+ P0 F+ G3 _) m3 [- ]
( ]8 h: h7 H( w5 H
; [; c0 `0 }1 \" u
脚本:
- V; _6 _* X$ ?
5 L+ Q6 H1 h  |
  • 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');4 I) b5 M4 A& p% F/ a1 U
     
% t5 r3 `! Y* j1 \) P 0 F  R9 N0 `, y. e* ?! V
- C5 a" ?, r, t2 c4 L6 r

8 |: [" a3 M% }# U案例2:! l" f& B2 j3 s& m
求下面有限长序列的离散时间傅里叶变换:. K1 P& H! F9 O2 `: X5 f
& J* P: A$ ~' @

6 j5 y0 @: {+ a. _  H$ }- S2 |( {# T
在[0,pi]之间的501个等分频率上进行数值求值。
: t1 y# X+ T$ k$ l: \  N2 s/ F8 j! @. k8 A( O( V
题解:
, d0 z  D; P+ t( d. O3 Q0 v: E& N, d' ^+ @# n7 ^! g# `; ]0 N
/ T1 E/ q. V0 S) D, c  f% o) H9 _
1 ?8 I, K& r9 `7 s
我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。
) L4 T- p* Z0 R) p. v" ]" e+ s0 T( U. H/ C; |6 d
我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:, ^  i, g% _. c" L/ l8 i- G" F

% o: B1 i1 J6 k0 [( W
5 d& {' k; ?, v9 H$ c8 Z
: o* g4 o2 x  F& l' f
7 j+ y. T/ ?1 Y  L+ u" a5 l用MATLAB实现如下:3 @! h. R# m- o: C. P/ t

5 o$ {% j& e, F0 o2 G# g; m4 V2 |' E
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
    ( z; W# R2 f4 Q1 E$ r- J/ P) w( }

! Q5 Y/ i5 E+ x- q4 ?* j. d2 m4 m; R1 q9 y  u
给出MATLAB脚本语言如下:
- ?& H( I2 K! t2 b1 L$ ^/ n* J4 j. e" G! m2 m- N
  • 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');: S; [  E' j8 O! m6 M  j
+ W$ k7 U3 M  a+ h1 N: n

. H: Y6 w! i6 J( h7 b' n      3 g# [) r9 w: t5 P% N* y
0 C* I. M" E- B- }- C8 [

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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