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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

+ ~- w2 q6 i# S$ P7 v/ @1 O: e先给出离散时间傅里叶变换的简单介绍:
; {: h8 B5 b4 g9 }6 `2 w2 I9 s+ w' H" f5 |7 C0 o
如果 x(n) 是绝对可加的,即
9 V) X! D) @% }  s/ k# R7 h3 z2 l6 M- A. V1 n, R
9 @1 q+ i" W; U- e: S1 c  U, q$ l

8 V3 x: `6 g& i7 D8 t, [4 {那么它的离散时间傅里叶变换给出为:: S4 X4 N+ h7 m. W2 S
. N0 y% S9 O4 V4 A
# ^6 u/ \5 [* f. X4 b3 R8 P; f

& ?# ], K. Z9 p) Vw 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample), u. [, n% n- ^3 H8 \. ~
7 G% h  u! C/ }' l' B; i6 k
案例1:! I; d6 a2 k5 b0 J
的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。; ?" X5 l( z! p# t
. \% I& w- j. i; S+ t! P
题解:
7 C: o* ~8 ]0 p: C' T
, ~$ ^# W$ z3 p  k( B1 F由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。, A4 g" N9 k8 y! j# H

' n1 ]! I& O, p- |. A2 ] # W. t7 Y, O3 z. {! h

! i* k2 x1 N2 K# g- e, }( ?
, z# }0 V- H5 I% |2 Y7 U! ]; Q; d( c  b0 i  W' K& j

% L, H# H2 F8 z7 l脚本:
4 O% g3 `$ U% C  X- h  E
: ~% B5 Y( s& Y9 t9 S
  • 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 W9 [3 b! K( M1 M3 M2 T: l" L9 Q
     
3 c# Z7 M# {. T " F2 f8 v: W9 [  O1 W( k# R

6 a( b* J: a6 Y% V: ?) j" ]2 R, _' C6 X
案例2:" B! J& j1 {0 V1 F- z. N9 B( ~9 i
求下面有限长序列的离散时间傅里叶变换:
& `, y* H4 x3 q+ C7 F! x% B, n+ G0 x( x# ~+ Z

2 I8 H5 U. v- T# V" l: Q' d6 _
+ @( ?8 ~5 f; P$ a% y! s在[0,pi]之间的501个等分频率上进行数值求值。5 P7 u$ L, k* a, a+ f

- H5 D3 a! u5 K* B题解:
% m7 r$ m, W! [( C4 u/ ]( |
. C) E4 o8 h# o
) y" s5 g: W' `. V* q& B0 p2 Q) I% ~0 m5 H, Z) U6 O% L6 j7 f; Q% ^
我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。- I. a( W& P5 C- C; a
& S0 l: h8 c, V6 `( [
我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:
6 ]. B8 l' T6 h- Q
2 r; ]" \4 d% A+ Q8 _
( }& w% D9 M4 z$ m. t. c2 w7 T* e* f* G" g% f- i0 u1 ^" z) {
9 c. _( L4 C1 A/ h
用MATLAB实现如下:2 g* h: z2 ]% h) e4 N6 f

3 R! p( m/ ~( P( A8 u! ~& W+ D8 \
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
    . f% w; ]( C' _! F+ ?

7 \1 ]$ i3 O' T! H) T
2 o' }& }. F+ i$ S! x6 m* j8 M. ]给出MATLAB脚本语言如下:# _5 `: _. \+ k* i5 Y; ~

  U) T. C' h- q+ M8 Q: Q" `
  • 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');
    ) w9 d" y* z  c3 W' `( q3 e
  n5 `( A1 p4 Y/ b3 X

2 L! k9 b% h( D: H, H) b7 ]      2 Y& D& J( g* x" A2 ]# I$ F
" x$ j7 H# s+ X. {  [

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:44 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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