代码:

  1. function [X1k, X2k] = real2dft(x1, x2, N)
  2. %% ---------------------------------------------------------------------
  3. %% DFT of two Real-Valued N-Point sequence x1(n) and x2(n)
  4. %% ---------------------------------------------------------------------
  5. %% [X1, X2] = real2dft(x1, x2, N)
  6. %% X1k = n-point DFT of x1
  7. %% X2k = n-point DFT of x2
  8. %% x1 = sequence of length <= N
  9. %% x2 = sequence of length <= N
  10. %% N = length of DFT
  11.  
  12. % ----------------------------------------
  13. % if length of x1 and x2 < N,
  14. % then padding zeros
  15. % ----------------------------------------
  16. if ( length(x1) < N)
  17. x1 = [x1 zeros(1, N-length(x1))];
  18. end
  19.  
  20. if ( length(x2) < N)
  21. x2 = [x2 zeros(1, N-length(x2))];
  22. end
  23.  
  24. x = x1 + j * x2;
  25.  
  26. N = length(x); k = 0:(N-1);
  27.  
  28. Xk_DFT = dft(x, N);
  29. Xk_DFT_fold = Xk_DFT(mod_1(-k,N)+1);
  30.  
  31. Xk_CCS = 0.5*(Xk_DFT + conj(Xk_DFT_fold));
  32. Xk_CCA = 0.5*(Xk_DFT - conj(Xk_DFT_fold));
  33.  
  34. X1k = Xk_CCS;
  35. X2k = Xk_CCA;

  

  1. %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. %% Output Info about this m-file
  3. fprintf('\n***********************************************************\n');
  4. fprintf(' <DSP using MATLAB> Problem 5.19 \n\n');
  5.  
  6. banner();
  7. %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  8.  
  9. % ---------------------------------------------------------------------------------
  10. % X(k) is N-point DFTs of N-point Complex-valued sequence x(n)
  11. % x(n) = xR(n) + j xI(n)
  12. % xR(n) and xI(n) are real and image parts of x(n);
  13. % DFT[xR]=Xccs(k) DFT[j*xI]=Xcca(k)
  14. %
  15. % Xccs = 0.5*[X(k)+ X*((-k))] Xcca = 0.5*[X(k) - X*((-k))]
  16. %
  17. % ---------------------------------------------------------------------------------
  18. n = [0:39];
  19. x1 = cos(0.1*pi*n); % N=40 real-valued sequence
  20. x2 = sin(0.2*pi*n); % N=40 real-valued sequence
  21.  
  22. x = x1 + j * x2;
  23.  
  24. N = length(x); k = 0:(N-1);
  25.  
  26. Xk_DFT = dft(x, N);
  27. Xk_DFT_fold = Xk_DFT(mod_1(-k,N)+1);
  28.  
  29. magXk_DFT = abs( [ Xk_DFT ] ); % DFT magnitude
  30. angXk_DFT = angle( [Xk_DFT] )/pi; % DFT angle
  31. realXk_DFT = real(Xk_DFT);
  32. imagXk_DFT = imag(Xk_DFT);
  33.  
  34. magXk_DFT_fold = abs( [ Xk_DFT_fold ] ); % DFT magnitude
  35. angXk_DFT_fold = angle( [Xk_DFT_fold] )/pi; % DFT angle
  36. realXk_DFT_fold = real(Xk_DFT_fold);
  37. imagXk_DFT_fold = imag(Xk_DFT_fold);
  38.  
  39. % --------------------------------------------------------
  40. % Calculater one N-point DFT to get
  41. % two N-point DFT
  42. % --------------------------------------------------------
  43. [X1k_DFT, X2k_DFT] = real2dft(x1, x2, N);
  44.  
  45. magX1k_DFT = abs( [ X1k_DFT ] ); % DFT magnitude
  46. angX1k_DFT = angle( [X1k_DFT] )/pi; % DFT angle
  47. realX1k_DFT = real(X1k_DFT);
  48. imagX1k_DFT = imag(X1k_DFT);
  49.  
  50. magX2k_DFT = abs( [ X2k_DFT ] ); % DFT magnitude
  51. angX2k_DFT = angle( [X2k_DFT] )/pi; % DFT angle
  52. realX2k_DFT = real(X2k_DFT);
  53. imagX2k_DFT = imag(X2k_DFT);
  54.  
  55. % -------------------------------------------------------
  56. % Get DFT of xR and xI directorly
  57. % -------------------------------------------------------
  58. XRk_DFT = dft(x1, N);
  59. XIk_DFT = dft(j*x2, N);
  60.  
  61. magXRk_DFT = abs( [ XRk_DFT ] ); % DFT magnitude
  62. angXRk_DFT = angle( [XRk_DFT] )/pi; % DFT angle
  63. realXRk_DFT = real(XRk_DFT);
  64. imagXRk_DFT = imag(XRk_DFT);
  65.  
  66. magXIk_DFT = abs( [ XIk_DFT ] ); % DFT magnitude
  67. angXIk_DFT = angle( [XIk_DFT] )/pi; % DFT angle
  68. realXIk_DFT = real(XIk_DFT);
  69. imagXIk_DFT = imag(XIk_DFT);
  70.  
  71. figure('NumberTitle', 'off', 'Name', 'P5.19 xR(n) and xI(n)')
  72. set(gcf,'Color','white');
  73. subplot(2,1,1); stem(n, x1);
  74. xlabel('n'); ylabel('x1');
  75. title('real part of x(n), cos(0.1\pin), N=40'); grid on;
  76. subplot(2,1,2); stem(n, x2);
  77. xlabel('n'); ylabel('x2');
  78. title('imag part of x(n), sin(0.2\pin), N=40'); grid on;
  79.  
  80. figure('NumberTitle', 'off', 'Name', 'P5.19 X(k), DFT of x(n)')
  81. set(gcf,'Color','white');
  82. subplot(2,2,1); stem(k, magXk_DFT);
  83. xlabel('k'); ylabel('magnitude(k)');
  84. title('magnitude DFT of x(n), N=40'); grid on;
  85. subplot(2,2,3); stem(k, angXk_DFT);
  86. %axis([-N/2, N/2, -0.5, 50.5]);
  87. xlabel('k'); ylabel('angle(k)');
  88. title('angle DFT of x(n), N=40'); grid on;
  89. subplot(2,2,2); stem(k, realXk_DFT);
  90. xlabel('k'); ylabel('real (k)');
  91. title('real DFT of x(n), N=40'); grid on;
  92. subplot(2,2,4); stem(k, imagXk_DFT);
  93. %axis([-N/2, N/2, -0.5, 50.5]);
  94. xlabel('k'); ylabel('imag (k)');
  95. title('imag DFT of x(n), N=40'); grid on;
  96.  
  97. figure('NumberTitle', 'off', 'Name', 'P5.19 X((-k))_N')
  98. set(gcf,'Color','white');
  99. subplot(2,2,1); stem(k, magXk_DFT_fold);
  100. xlabel('k'); ylabel('magnitude(k)');
  101. title('magnitude X((-k)), N=40'); grid on;
  102. subplot(2,2,3); stem(k, angXk_DFT_fold);
  103. %axis([-N/2, N/2, -0.5, 50.5]);
  104. xlabel('k'); ylabel('angle(k)');
  105. title('angle X((-k)), N=40'); grid on;
  106. subplot(2,2,2); stem(k, realXk_DFT_fold);
  107. xlabel('k'); ylabel('real (k)');
  108. title('real X((-k)), N=40'); grid on;
  109. subplot(2,2,4); stem(k, imagXk_DFT_fold);
  110. %axis([-N/2, N/2, -0.5, 50.5]);
  111. xlabel('k'); ylabel('imag (k)');
  112. title('imag X((-k)), N=40'); grid on;
  113.  
  114. figure('NumberTitle', 'off', 'Name', 'P5.19 X1(k) by real2dft')
  115. set(gcf,'Color','white');
  116. subplot(2,2,1); stem(k, magX1k_DFT);
  117. xlabel('k'); ylabel('magnitude(k)');
  118. title('magnitude, N=40'); grid on;
  119. subplot(2,2,3); stem(k, angX1k_DFT);
  120. %axis([-N/2, N/2, -0.5, 50.5]);
  121. xlabel('k'); ylabel('angle(k)');
  122. title('angle, N=40'); grid on;
  123. subplot(2,2,2); stem(k, realX1k_DFT);
  124. xlabel('k'); ylabel('real (k)');
  125. title('real, N=40'); grid on;
  126. subplot(2,2,4); stem(k, imagX1k_DFT);
  127. %axis([-N/2, N/2, -0.5, 50.5]);
  128. xlabel('k'); ylabel('imag (k)');
  129. title('imag, N=40'); grid on;
  130.  
  131. figure('NumberTitle', 'off', 'Name', 'P5.19 X2(k) by real2dft')
  132. set(gcf,'Color','white');
  133. subplot(2,2,1); stem(k, magX2k_DFT);
  134. xlabel('k'); ylabel('magnitude(k)');
  135. title('magnitude, N=40'); grid on;
  136. subplot(2,2,3); stem(k, angX2k_DFT);
  137. %axis([-N/2, N/2, -0.5, 50.5]);
  138. xlabel('k'); ylabel('angle(k)');
  139. title('angle, N=40'); grid on;
  140. subplot(2,2,2); stem(k, realX2k_DFT);
  141. xlabel('k'); ylabel('real (k)');
  142. title('real, N=40'); grid on;
  143. subplot(2,2,4); stem(k, imagX2k_DFT);
  144. %axis([-N/2, N/2, -0.5, 50.5]);
  145. xlabel('k'); ylabel('imag (k)');
  146. title('imag, N=40'); grid on;
  147.  
  148. figure('NumberTitle', 'off', 'Name', 'P5.19 XR(k) by direct')
  149. set(gcf,'Color','white');
  150. subplot(2,2,1); stem(k, magXRk_DFT);
  151. xlabel('k'); ylabel('magnitude(k)');
  152. title('magnitude, N=40'); grid on;
  153. subplot(2,2,3); stem(k, angXRk_DFT);
  154. %axis([-N/2, N/2, -0.5, 50.5]);
  155. xlabel('k'); ylabel('angle(k)');
  156. title('angle, N=40'); grid on;
  157. subplot(2,2,2); stem(k, realXRk_DFT);
  158. xlabel('k'); ylabel('real (k)');
  159. title('real, N=40'); grid on;
  160. subplot(2,2,4); stem(k, imagXRk_DFT);
  161. %axis([-N/2, N/2, -0.5, 50.5]);
  162. xlabel('k'); ylabel('imag (k)');
  163. title('imag, N=40'); grid on;
  164.  
  165. figure('NumberTitle', 'off', 'Name', 'P5.19 XI(k) by direct')
  166. set(gcf,'Color','white');
  167. subplot(2,2,1); stem(k, magXIk_DFT);
  168. xlabel('k'); ylabel('magnitude(k)');
  169. title('magnitude, N=40'); grid on;
  170. subplot(2,2,3); stem(k, angXIk_DFT);
  171. %axis([-N/2, N/2, -0.5, 50.5]);
  172. xlabel('k'); ylabel('angle(k)');
  173. title('angle, N=40'); grid on;
  174. subplot(2,2,2); stem(k, realXIk_DFT);
  175. xlabel('k'); ylabel('real (k)');
  176. title('real, N=40'); grid on;
  177. subplot(2,2,4); stem(k, imagXIk_DFT);
  178. %axis([-N/2, N/2, -0.5, 50.5]);
  179. xlabel('k'); ylabel('imag (k)');
  180. title('imag, N=40'); grid on;

  运行结果:

复数序列的实部和虚部

复数序列的DFT,X(k)

X((-k))

直接计算实部和虚部的DFT,XR(k)和XI(k)

利用函数real2dft计算实部和虚部对应的DFT,Xccs(k)和Xcca(k)

结论:

如果X(k)是N点复数序列x(n)的N点DFT,x(n)=xR(n)+jxI(n),那么有

DFT[xR]=Xccs(k)   DFT[j*xI]=Xcca(k)

实部序列的DFT是复数序列的DFT的共轭圆周对称分量

虚部序列的DFT是复数序列的DFT的共轭圆周反对称分量。

《DSP using MATLAB》Problem 5.19的更多相关文章

  1. 《DSP using MATLAB》 Problem 3.19

    先求模拟信号经过采样后,对应的数字角频率: 明显看出,第3种采样出现假频了.DTFT是以2π为周期的,所以假频出现在10π-2kπ=0处. 代码: %% ----------------------- ...

  2. 《DSP using MATLAB》Problem 2.19

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  3. 《DSP using MATLAB》Problem 8.19

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  4. 《DSP using MATLAB》Problem 7.16

    使用一种固定窗函数法设计带通滤波器. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  5. 《DSP using MATLAB》Problem 5.18

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% O ...

  6. 《DSP using MATLAB》Problem 5.5

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  7. 《DSP using MATLAB》Problem 5.4

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  8. 《DSP using MATLAB》Problem 5.3

    这段时间爬山去了,山中林密荆棘多,沟谷纵横,体力增强不少. 代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  9. 《DSP using MATLAB》Problem 4.23

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

随机推荐

  1. shell 通配符

    Bash中的通配符 '?' 匹配一个任意字符 '*' 匹配0个或任意多个字符,也就是可以匹配任何内容 '[]' 匹配括号中任意一个字符.例如[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c ...

  2. python-第一类对象,闭包,迭代器

    # def fn(): # print("我叫fn") # fn() # print(fn) # <function fn at 0x0000000001D12E18> ...

  3. sqlalchemy(二)简单的连接示例

    # -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.d ...

  4. [Leetcode 739]*还有几天会升温 Daily Temperatures

    [题目] Given a list of daily temperatures T, return a list such that, for each day in the input, tells ...

  5. Android system :灯光系统_HAL_lights

    一.android灯光系统框架: Java: frameworks/base/services/core/java/com/android/server/lights/LightsService.ja ...

  6. Java集合(续)

    java学习笔记 --- 集合 1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别?   A:长度区别  数组的长度固定    集合长度可变         B:内容不同  数组存储的是同一 ...

  7. shell中环境变量

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...

  8. elasticsearch学习笔记——安装,初步使用

    前言 久仰elasticsearch大名,近年来,fackbook,baidu等大型网站的搜索功能均开始采用elasticsearch,足见其在处理大数据和高并发搜索中的卓越性能.不少其他网站也开始将 ...

  9. FCC JS基础算法题(7):Chunky Monkey(分割数组)

    题目描述: 把一个数组arr按照指定的数组大小size分割成若干个数组块. 例如:chunk([1,2,3,4],2)=[[1,2],[3,4]]; chunk([1,2,3,4,5],2)=[[1, ...

  10. 3--Python入门--Python数据集合类型--元组

    在基础数据类型的基础上,Python有6中数据集合的类型: 列表list,最常用的数据类型,以[]为标识 元组tuple,和list很相似,但是不能二次赋值,用()标识 集合set,和list类似,但 ...