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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
: g* f1 Z% J! v* _
先给出离散时间傅里叶变换的简单介绍:
! t7 V6 y% e" N9 u; H" {& m
  C; g+ N& U( o+ B& L$ C0 L, y如果 x(n) 是绝对可加的,即& W4 B' v* ]& p8 ]! ?0 U. e- U& H
: s: f) J' K- N% c7 ]9 J
6 Z- V3 Y3 S2 u3 Q. w$ S( J
4 ?6 z" H1 Z2 k( d2 ]
那么它的离散时间傅里叶变换给出为:" k$ ~% e! T) Z2 ^# z6 S
+ X. g1 o0 d) E" S% F% P

$ n5 E. B2 \; w. Q; s
7 d1 B9 n/ o# i( O. \; `. g9 M& zw 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)& s+ G7 h; G3 k

/ n0 _* X+ d" v$ j- }案例1:
: |% I* i* r: y6 W& T 的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。
" N4 b9 M+ `. j
1 K, Q% Z2 ~6 C" x4 m题解:
0 r* P8 Z" `- B. ?9 }: N& ]4 J
: O- h5 t1 f' d, I- R由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。
3 @$ @1 P, ^# n: e8 e6 _, ]
7 @! }! i9 y$ _6 p2 I1 n4 G) M
( E2 m* U& l) t1 c6 a4 o: H: ^" W, Z) h# k- Y
# I6 @: F$ B2 {& H, z3 e/ F) O

) @6 p2 L( d% n9 d# s: i
/ q6 U: K1 F; u$ {% B  r, `" C脚本:/ Y0 f& R8 C" s. K( O  \. d
7 T; }7 y0 P# \& [1 h* 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');4 U; V: ^9 M: ]# o
     4 [3 l' d5 L) q' }) E7 T; X

- E4 q9 I* S! {; i
4 m( N( j/ P9 Y9 M4 l8 u; s- D( ]' Y( B% d2 _; ^6 v2 w
案例2:. o! ?. u8 e$ p* e
求下面有限长序列的离散时间傅里叶变换:* X3 r$ _/ W/ x) \/ ^& E1 x
, o+ W8 }5 ?8 p; [

& s/ G2 p) B) L! v8 P7 e* _
3 l1 Y$ Q  m! D! Z, t" l: }在[0,pi]之间的501个等分频率上进行数值求值。
6 Y, N! Q2 y! G5 c# `$ x: a: p: ?3 D: ~# l
题解:
3 N4 i, k" t) t" I% ^8 I4 I1 E
/ Q. Y/ K8 R9 y3 F/ X6 V% Z8 ~ ; S8 ~4 N2 ~& P  m, a' {& C3 h

6 X. H& l- G' K7 D* s6 T+ D. S我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。0 u9 f" ^% r, C0 h9 R2 q" Y

  ]: c. Z% C  {  U0 g我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:
# D* \8 P) M- [) f/ `. V
0 G* w! O6 n! f+ D" ^9 F3 c
1 f+ [# |$ |+ B1 w  [* B
0 n% ^9 I' D% `
( `2 i1 a; e0 z9 r$ I用MATLAB实现如下:5 T. T, x7 ~8 B# @* o: ^
1 T  F3 D, o2 X
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);0 A$ @$ c4 c! @2 [  M4 }
1 K: @4 v: m! v9 q: Z% x" |

0 h* j. }3 ]$ F) K& g& D给出MATLAB脚本语言如下:( c- h$ J# t* y2 G

. j7 W. E6 i) {9 n$ E9 G+ Z
  • 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; R( L' M' |6 ]# ~6 N. H* a

8 m' [6 d0 X. h( G. q, X1 l* h: b
. U6 C" p& R4 h' D% n+ M      % s4 A" ^8 m+ _4 f9 c1 s. z  P
3 u7 Y" m2 Y3 r8 X5 Y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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