(1) 截取x(n)使x(n)成为有限长序列N,(长度N自己选)写程序计算出x(n)的N 点DFT的X(k),并画出时域序列图和相应的幅频图。 (2) 将(1)中x(n)补零加长至M点,长度M自己选,(为了比较补零长短的影响,M可以取两次值,一次取较小的整数,一次取较大的整数),编写程序计算x(n)的M点DFT, 画出时域序列图和两次补零后相应的DFT幅频图。 2. 研究信号频域的物理分辨率与信号频域的分析分辨率,明白两者的区别。(1)采集数据x(n)长度取N=16点,编写程序计算出x(n)的16点DFTX(k),并画出相应的幅频图。 (2) 采集数据x(n)长度N=16点,补零加长至M点(长度M自己选),利用补零DFT计算x(n)的频谱并画出相应的幅频图。 (3) 采集数据x(n)长度取为M点(注意不是补零至M),编写程序计算出M点采集数据x(n)的的频谱并画出相应的幅频图。
时间: 2024-03-14 11:46:09 浏览: 215
以下是针对题目的 MATLAB 代码实现:
1. 截取x(n)使x(n)成为有限长序列N,(长度N自己选)写程序计算出x(n)的N点DFT的X(k),并画出时域序列图和相应的幅频图。
```matlab
% 定义有限长序列x(n)
N = 16;
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
% 计算N点DFT的X(k)
X = fft(x, N);
% 绘制时域序列图
subplot(2, 1, 1);
stem(0:N-1, x);
xlabel('n');
ylabel('x(n)');
title('Time Domain Sequence');
% 绘制幅频图
subplot(2, 1, 2);
stem(0:N-1, abs(X));
xlabel('k');
ylabel('|X(k)|');
title('Magnitude Spectrum');
```
2. 将(1)中x(n)补零加长至M点,长度M自己选,(为了比较补零长短的影响,M可以取两次值,一次取较小的整数,一次取较大的整数),编写程序计算x(n)的M点DFT, 画出时域序列图和两次补零后相应的DFT幅频图。
```matlab
% 定义补零前的x(n)
N = 16;
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
% 定义补零后的长度M(取两次不同的值)
M1 = 32;
M2 = 64;
% 补零至M1点
x1 = [x, zeros(1, M1-N)];
% 补零至M2点
x2 = [x, zeros(1, M2-N)];
% 计算M1点DFT的X1(k)和M2点DFT的X2(k)
X1 = fft(x1, M1);
X2 = fft(x2, M2);
% 绘制时域序列图
subplot(3, 1, 1);
stem(0:M1-1, x1);
xlabel('n');
ylabel('x(n)');
title('Time Domain Sequence (M = 32)');
subplot(3, 1, 2);
stem(0:M2-1, x2);
xlabel('n');
ylabel('x(n)');
title('Time Domain Sequence (M = 64)');
% 绘制幅频图
subplot(3, 1, 3);
hold on
stem(0:M1-1, abs(X1));
stem(0:M2-1, abs(X2));
xlabel('k');
ylabel('|X(k)|');
title('Magnitude Spectrum (M = 32, 64)');
legend('M = 32', 'M = 64');
```
3. 研究信号频域的物理分辨率与信号频域的分析分辨率,明白两者的区别。(1)采集数据x(n)长度取N=16点,编写程序计算出x(n)的16点DFTX(k),并画出相应的幅频图。(2) 采集数据x(n)长度N=16点,补零加长至M点(长度M自己选),利用补零DFT计算x(n)的频谱并画出相应的幅频图。(3) 采集数据x(n)长度取为M点(注意不是补零至M),编写程序计算出M点采集数据x(n)的的频谱并画出相应的幅频图。
```matlab
% 采集长度为N的数据
N = 16;
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
% 计算16点DFT的X(k)
X1 = fft(x, N);
% 补零至M点,计算M点DFT的X2(k)
M = 64;
x2 = [x, zeros(1, M-N)];
X2 = fft(x2, M);
% 采集长度为M的数据,计算M点DFT的X3(k)
x3 = rand(1, M); % 随机生成长度为M的数据
X3 = fft(x3, M);
% 绘制幅频图
subplot(3, 1, 1);
stem(0:N-1, abs(X1));
xlabel('k');
ylabel('|X(k)|');
title('Magnitude Spectrum (N = 16)');
subplot(3, 1, 2);
stem(0:M-1, abs(X2));
xlabel('k');
ylabel('|X(k)|');
title('Magnitude Spectrum (M = 64, zero-padding)');
subplot(3, 1, 3);
stem(0:M-1, abs(X3));
xlabel('k');
ylabel('|X(k)|');
title('Magnitude Spectrum (M = 64, physical resolution)');
```
在这个代码中,我们首先采集了三组数据,分别是长度为 N=16 的数据、补零后长度为 M=64 的数据和长度为 M=64 的实际采集数据。然后,我们使用 fft() 函数计算出这三组数据的 DFT,分别绘制其幅频图。注意,第二组数据是通过补零方式来增加长度的,这种方式会导致幅频图中出现较多的零值,但是不会改变信号的物理分辨率。第三组数据则是通过实际采集方式得到的,其幅频图中不会出现零值,但是信号的物理分辨率与采样率有关。
阅读全文