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

MATLAB ------- 用 MATLAB 作图讨论有限长序列的 N 点 DFT(含MATLAB脚本)

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
MATLAB ------- 用 MATLAB 作图讨论有限长序列的 N 点 DFT(含MATLAB脚本), }' z9 n# Q; b/ c
) w+ c6 G3 j1 |4 j% E* c

8 ~6 ^7 W! v: e6 Z% S  O这篇本来是和上篇一起写的:MATLAB ------- 看看离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间是什么关系; o# X; |; d8 F

/ r2 d0 q5 {+ |但是这篇我最初设计的是使用MATLAB脚本和图像来讨论的,而上篇全是公式,因此,还是单独成立了一篇,但是我还是希望看这篇之前还是先看看上篇。
6 c. R" T4 v- j( g* p! c8 [2 Y
( O3 \- D9 Q' X  H% W8 `4 a+ C- y/ r! |这里默认你已经看了上篇。2 e4 ~' n# ?" ^4 }& c( K/ Z, g

2 M! m, C5 G3 D本文的讨论建立在一个案例的基础上:+ W( q3 ^1 K8 p, E3 \

/ n! @/ i5 L6 a设x(n)是4点序列为:" ^- m+ D6 W4 f
! k  `9 j8 `( J0 K4 X! `

; ]3 Y& I5 J0 O" F7 b! m4 F4 X) N4 o7 ]
计算x(n)的4点DFT(N =4),以及(N = 8,N = 16, N = 128)) _# G% R1 a5 X9 |- J' Q

8 [+ [3 J6 K* i! r8 s& x. V
1 |3 v* b8 A- A% O6 K+ a" c. @我们知道DFS是在DTFT上的频域采样,采样间隔为 2*pi / N.8 [4 q8 t# R' n/ b; F3 X9 g' f

+ ]% s2 Y& `, l/ WDFT 是一个周期的DFS,因此DFT也是在DTFT上的频域采样,采样间隔同样为 2 * pi / N.2 ^) d( ^+ O+ G5 {
4 M4 Q* d2 J2 q9 T( i
x(n)的波形图为:; H+ G5 K1 m7 @2 n

: l% q/ C& Z, W. i* D/ ]/ V6 s
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • stem(n,x);
  • title('Discrete sequence');
  • xlabel('n');ylabel('x(n)');
  • xlim([0,5]);ylim([-0.2,1.2]);
    - T! t8 S  t6 f8 r, D! a
  & ?3 q, H- T5 n9 ^9 A. T" u4 |

  l2 u' D9 ^/ l) \/ O; L

" m" J" Z' F" H' w+ h1 {3 g
( e3 g; M% i7 ?' u% R+ I我们先作出 x(n) 的 DTFT,也即是离散时间傅里叶变换,给出脚本和图像:! h. j$ P  v$ X" X/ K

$ n! v7 y5 L" C3 _' i1 T5 O
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • stem(n,x);
  • title('Discrete sequence');
  • xlabel('n');ylabel('x(n)');
  • xlim([0,5]);ylim([-0.2,1.2]);
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • % w = [-fliplr(w),w(2:K+1)];   %plot DTFT in [-pi,pi]
  • % X = [fliplr(X),X(2:K+1)];    %plot DTFT in [-pi,pi]
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • figure
  • subplot(2,1,1);
  • plot(w/pi,magX);
  • title('Discrete-time Fourier Transform in Magnitude Part');
  • xlabel('w in pi units');ylabel('Magnitude of X');
  • subplot(2,1,2);
  • plot(w/pi,angX);
  • title('Discrete-time Fourier Transform in Phase Part');
  • xlabel('w in pi units');ylabel('Phase of X ');/ @$ |" w3 s" l/ {+ a7 a1 n9 k
   
7 |1 S9 S% y% L3 n2 k
+ L2 n( A; Y( @
& t' }  p) u" C# S

; W. k+ @! l6 P3 ?& J2 }  x. o3 B! q7 L$ K
# K6 d3 V- [9 e" Y% w: j
当N = 4时候的DFT,为了显示出DFT和DTFT之间的关系,我们把DTFT图形和DFT画到了同一张图上:3 u) x) Z2 q  Y8 H

* t0 ~# y8 J. T) _  B5 C& E6 s
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • %DFT in N = 4
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 4');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 4');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off9 F7 C9 o5 U+ [, S2 G- ?0 J
            " L! T& ^4 r3 @! \& ?$ u
0 @% s4 d& @0 U1 a
. |) C% g1 ^) B

9 s' m. W5 ?3 t3 N4 j$ ]- i/ o) t* E可见,DFT是DTFT上的等间隔采样点。
9 K: G% @9 ~" t" t3 k2 G0 z' v" q: o2 [' e0 P

: o5 W0 Z5 M! A. l9 M$ {当N = 8时候的DFT,为了显示出DFT和DTFT之间的关系,我们把DTFT图形和DFT画到了同一张图上:
: b5 g. f* v* S3 I  @
2 f% [8 v* T5 @6 l' @+ _* B
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • % Zero padding into N = 8 and extended cycle
  • N = 8;
  • x = [1,1,1,1,zeros(1,4)];
  • %DFT in N = 8
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 8');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 8');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off+ O( Z9 E% _$ ~* P
            
5 G! |  j( y& H5 A
* d# G+ x& ^* Z7 b

* q  M( Q. C5 J* k
( a5 ]- _' L# F  \2 Z3 k9 y2 w- V相比于N =4,N =8采样点数更密集了。3 x( T# j9 [$ @+ ~& V+ V4 w
( o! ~7 C, E' h) [
当N = 16时候的DFT,为了显示出DFT和DTFT之间的关系,我们把DTFT图形和DFT画到了同一张图上:( D0 E- a/ M: F* ?. r7 @

4 S4 J' Y2 w& x' H! v# i
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • % Zero padding into N = 16 and extended cycle
  • N = 16;
  • x = [1,1,1,1,zeros(1,12)];
  • %DFT in N = 16
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 16');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 16');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off
    ( K3 H- i5 I# w$ E3 D2 a
             * K3 v" R" B$ }+ \. N3 ~

2 L8 J1 q& H& l# e  J
+ P# e. c6 O" ?2 x* U/ ^& D" y) l' c
1 l' `9 A0 ?! N  j6 f
N = 128的情况:
1 O$ f9 L2 o6 g. _4 K1 h5 J) ?) u$ i; y- @7 {5 Z3 A
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • % Zero padding into N = 128 and extended cycle
  • N = 128;
  • x = [1,1,1,1,zeros(1,124)];
  • %DFT in N = 128
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 128');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 128');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off

  • - m6 S* {& n: b' W  F+ ~& F+ ~
            
. |/ `1 ]4 Y' O" L1 D6 d: F

) N7 r+ Y* p! Q* K& U) B" s
) q# D$ S1 J! L% u可见,随着周期N 的增大,采样点越密集。
" ?  J1 Y, x1 G" Q0 y2 F4 q8 U
% M1 m% v, ^" S8 `; [7 L7 ?' g) R/ ]
上面的程序都是我在我写的一个大程序中抽取出来的,最后给出所有程序的一个集合,也就是我最初写的一个程序:
: l# g# B1 @- A; w/ {6 a. {
9 e6 O1 w4 Y/ g5 ?! n2 d6 N' m) k
  • clc;clear;close all;
  • % x(n)
  • N = 4;
  • n = 0:N-1;
  • x = [1,1,1,1];
  • stem(n,x);
  • title('Discrete sequence');
  • xlabel('n');ylabel('x(n)');
  • xlim([0,5]);ylim([-0.2,1.2]);
  • %Discrete-time Fourier Transform
  • K = 500;
  • k = 0:1:K;
  • w = 2*pi*k/K; %plot DTFT in [0,2pi];
  • X = x*exp(-j*n'*w);
  • % w = [-fliplr(w),w(2:K+1)];   %plot DTFT in [-pi,pi]
  • % X = [fliplr(X),X(2:K+1)];    %plot DTFT in [-pi,pi]
  • magX = abs(X);
  • angX = angle(X)*180/pi;
  • figure
  • subplot(2,1,1);
  • plot(w/pi,magX);
  • title('Discrete-time Fourier Transform in Magnitude Part');
  • xlabel('w in pi units');ylabel('Magnitude of X');
  • subplot(2,1,2);
  • plot(w/pi,angX);
  • title('Discrete-time Fourier Transform in Phase Part');
  • xlabel('w in pi units');ylabel('Phase of X ');
  • %DFT in N = 4
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 4');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 4');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off
  • % Zero padding into N = 8 and extended cycle
  • N = 8;
  • x = [1,1,1,1,zeros(1,4)];
  • %DFT in N = 8
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 8');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 8');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off
  • % Zero padding into N = 16 and extended cycle
  • N = 16;
  • x = [1,1,1,1,zeros(1,12)];
  • %DFT in N = 16
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 16');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 16');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off
  • % Zero padding into N = 128 and extended cycle
  • N = 128;
  • x = [1,1,1,1,zeros(1,124)];
  • %DFT in N = 128
  • k = 0:N-1;
  • Xk = dft(x,N);
  • magXk = abs(Xk);
  • phaXk = angle(Xk) * 180/pi;   %angle 。
  • k = 2*pi*k/N;          % k in DFT is equal to 2*pi*k/N in DTFT
  • figure
  • subplot(2,1,1);
  • stem(k/pi,magXk);
  • title('DFT Magnitude of x(n) when N = 128');
  • xlabel('k');ylabel('Magnitude Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,magX,'g');
  • hold off
  • subplot(2,1,2);
  • stem(k/pi,phaXk);
  • title('DFT Phase of x(n) when N = 128');
  • xlabel('k');ylabel('Phase Part');
  • % Auxiliary mapping, highlighting the relationship between DFT and DTFT
  • hold on
  • plot(w/pi,angX,'g');
  • hold off3 b7 }, Z$ |, G3 V: J" U
                                
# U& W6 Z( a# U+ g! P& w8 ~& A+ z3 J1 B ; u/ ~: U9 I0 ?$ m, s# b4 T7 p
最后需要说明的是上面通过补零的方式来增大最初给出的有限长序列的周期,这样只会更加DFT在DTFT上的采样间隔,也就是频率分辨率。
9 {' P4 ^1 I0 j$ a" |5 T( w0 O+ g7 j- m$ t8 w, U
补零给出了一种高密度的谱并对画图提供了一种更好的展现形式。2 [1 `# I9 K4 G% q% L( D
% K+ f+ Z- o+ t& C& a; ?; l
但是它并没有给出一个高分辨率的谱,因为没有任何新的信息附加到这个信号上;而仅是在数据中添加了额外的零值。
$ l* A, U( o& x% _
% y/ R% }) Z' c+ Y9 m* L$ S下篇我们继续说明,如何才能得到高分辨率的谱,我们的方法是从实验中或观察中获得更多的数据。
- a4 k$ C) U% j& g5 y
. R2 w" j5 X; k7 G% ~3 W* _4 h 8 \3 L# }% R+ f: }' f! x, f

* u5 c5 _7 Z7 D/ H+ L

该用户从未签到

2#
发表于 2019-12-6 17:54 | 只看该作者
小弟要好好像大哥学习呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 18:43 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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