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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 w4 o# G9 Z0 d) ?6 ^0 W2 C先给出离散时间傅里叶变换的简单介绍:3 s1 d( U, u% |$ a7 v5 {0 F

" u+ t/ V9 ^' p' r+ b) p如果 x(n) 是绝对可加的,即- w4 ?# I# n( J3 n6 ]

' `8 N; \; P: {
1 b& P' X  Z" w3 R
# b* f* {+ V  c. U+ p那么它的离散时间傅里叶变换给出为:
4 I  d$ s8 A9 @% G, y7 x0 C* }- c8 W/ v

  u7 M9 W% `+ k6 Y$ D' l( S: L6 Z4 J( s4 k$ ~( P2 d9 M
w 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample)
$ M9 {1 ]. O* @, i0 m' M$ i5 K
2 G9 W/ n5 A. Z. b0 C0 d* W案例1:
3 p- Q  d# ^7 s' m3 a 的离散时间傅里叶变换 ,并用MATLAB将 之间的501个等分点上求值,并画出它的幅度、相位、实部和虚部。
% W% a0 E! W5 O5 T& \  E6 B9 y( b, K) J) O5 @7 X# @
题解:
! M- V0 l" ~) p2 o7 |0 s9 L2 w% V: s0 w( r# m& [6 [
由于x(n)是无限长的序列,所以不能直接用MATLAB直接从x(n)得到 。然而,我们可以用它对表达式 频率点上求值,然后画出它的幅度和相位(实部或虚部)。. I& K  \" ]2 J* O' h3 H
! P8 B6 [" S, ^

9 s$ [5 x1 Y1 E( Z/ ^" b. Z# f6 m1 i6 Z
! \1 K9 {; b7 P. s2 U! s3 P
  e* x1 _+ K- Y6 Z- i2 r- Y
7 b$ \5 ]* u; k; \7 A
脚本:  g7 A, n* h* d( e9 b! B& I
6 H% a0 l/ y1 a+ R  }, V
  • 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');
    5 x0 _+ E5 n1 V- ?+ N4 {2 O9 Z! A
     
: v4 y' x- R1 i9 g   X) R( M  T0 Q* v4 x$ y

1 U! r$ j5 r% A$ ~
& U, R( ?/ P: G3 F& h: B* f8 w案例2:( P: n6 V6 e- t  L8 s* D
求下面有限长序列的离散时间傅里叶变换:
5 A; @0 c  M7 r) Z9 Z4 `* N  C5 S5 j  Q

. Q2 C/ w5 U4 Y/ [+ L5 z
; D# E( f1 ]* d5 J2 j+ {在[0,pi]之间的501个等分频率上进行数值求值。6 F' J/ {$ O. r; c5 e
5 W/ B: e" N$ m3 ~: v7 X, }. }7 M; V
题解:4 G5 A( B% {+ y5 J
  Q8 w  [7 w# K% ]* `+ I

7 X9 x. q+ G$ l4 g( P* r/ h
, u( {% \7 ?; M8 Y% r6 [& X我们可以直接对上式进行MATLAB编程,但是这种方法在有限长序列的DTFT中不是太方便,我们可以直接由 x(n) 来求它的DTFT。0 \5 H7 s1 x3 ?
: m2 M2 E$ G! X# d. W% `
我们使用向量化的编程方法,最后得到一个通用的公式。推导如下:
+ C' x* }9 O) b: s/ w- @1 ]+ N2 D8 h& h! }8 p  `
/ ?$ p# }4 G9 ~, G, W( s2 x( g) F% U
/ k6 x& w8 R( |6 l- V3 p% `! M

2 u5 F9 g3 u" {0 e# r# U# j* H用MATLAB实现如下:9 ?0 ~* d& l' j: {
+ f# n$ A5 d3 r5 t6 ~# L: P7 d
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
    ) }3 r6 n" k4 p5 `/ m# x

' D# p# a% E; Q9 a* u$ C- ^4 F  j* f
给出MATLAB脚本语言如下:1 q. X' b) r' V' {* [9 g! I$ Z3 j3 c
9 j) X( E9 B0 ^0 l" i: ^; g
  • 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');
    8 ]! C) y, E6 w( X

3 S5 _% L% P0 L8 ?/ S/ S0 c( c 6 Q# ]% a7 T5 z+ ]
      ) j1 H8 w3 t  b7 k6 R, U

: O! R) a. i' h

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-5 23:25 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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