信号与系统[实验二–利用DFT分析离散时间信号的频谱]
- 利用FFT分析信号 的频谱;
(1) 确定DFT计算的参数;
(2) 进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。 - 利用FFT分析信号的频谱;
(1) 确定DFT计算的参数;
(2) 进行理论值与计算值比较,讨论信号频谱分析过程中误差
原因及改善方法。 - 有限长脉冲序列, 利用FFT分析其频谱,并绘出其幅度谱与相位谱。
- 某周期序列由3个频率组成:, 利用FFT分析其频谱。如何选取FFT的点数N?此3个频率分别对应FFT计算结果X[m]中的哪些点?若选取的N不合适,FFT计算出的频谱X[m]会出现什么情况?
- 某离散序列,利用FFT分析其频谱。
(1) 对x[k]做64点FFT,绘出信号频谱,能分辨出其中的两个频率吗?
(2) 对x[k]补零到256点后计算FFT,能分辨出其中的两个频率吗?
(3) 选用非矩形窗计算FFT,能够分辨出其中的两个频率吗?
(4) 若不能够很好地分辨出其中的两个频谱,应采取哪些措施?
6.已知序列利用FFT分析下列信号的幅频特性,频率范围为
第一题代码:
% 题1
close all;
clear all;
N = 32;
N1 = 1000;
k = 0:N-1;
x = cos(3*pi/8*k);
X = fft(x);
Y = abs(fftshift(X));
% x信号散点图
figure
stem(k-N/2,x);
xlabel('k');
ylabel('x=cos(3*pi/8*k)')
% 幅度
figure
subplot(211)
w1 = 2*pi/N;
stem((k-N/2)*w1, Y);
xlabel('Frequency(N=32)');
ylabel('Magnitude');
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X)));
xlabel('Frequency(N=32)');
ylabel('Phrase');
%改进----------------------------
figure
X2=fft(x,N1);
Y2=fftshift(X2);
w2=[-N1/2:N1/2-1]*(2*pi/N1);
%幅度
subplot(211);
plot(w2,abs(Y2));
xlabel('Frequency(N=1000)');
ylabel('Magnitude');
%相位
subplot(212)
plot(w2,angle(Y2));
ylabel('Phrase');xlabel('Frequency(N=1000)');
第二题代码:
% 题2
close all;
clear all;
N = 20;
N1 = 1000;
k = 0:N-1;
x = (0.5).^k;
X = fft(x);
Y = abs(fftshift(X));
% x信号散点图
figure
stem(k,x);
xlabel('k');
ylabel('x=(1/2)^k')
% |X(e^j^w)|
figure
subplot(211)
w1 = 2*pi/N;
plot((k-N/2)*w1, Y);
xlabel('Frequency(N=20)');
ylabel('Magnitude');
%相位
subplot(212);
plot((k-N/2)*w1,angle(fftshift(X)));
xlabel('Frequency(N=20)');
ylabel('Phrase');
%改进----------------------------
figure
X2=fft(x,N1);
Y2=fftshift(X2);
w2=[-N1/2:N1/2-1]*(2*pi/N1);
%幅度
subplot(211);
plot(w2,abs(Y2));
xlabel('Frequency(N=1000)');
ylabel('Magnitude');
%相位
subplot(212)
plot(w2,angle(Y2));
ylabel('Phrase');xlabel('Frequency(N=1000)');
第三题代码:
close all;
clear all;
% 题3
N = 6;
N1 = 100;
k = 0:N-1;
x = [2,3,3,1,0,5];
X = fft(x);
Y = abs(fftshift(X));
% x信号散点图
figure
stem(k,x);
xlabel('k');
ylabel('x(k)')
%幅度
figure
subplot(211);
w1 = 2*pi/N;
stem((k-N/2)*w1, Y);
xlabel('Frequency(N=6)');
ylabel('Magnitude');
% 相位
subplot(212);
stem((k-N/2)*w1, angle(fftshift(X)));
xlabel('Frequency(N=6)');
ylabel('Phrase');
%改进----------------------------
figure
X2=fft(x,N1);
Y2=fftshift(X2);
w2=[-N1/2:N1/2-1]*(2*pi/N1);
%幅度
subplot(211);
plot(w2,abs(Y2));
xlabel('Frequency(N=100)');
ylabel('Magnitude');
%相位
subplot(212)
plot(w2,angle(Y2));
xlabel('Frequency(N=100)');
ylabel('Phrase');
第四题代码:
close all;
clear all;
% 题4
N = 32;
N1 = 30;
k = 0:N-1;
x = cos(7*pi/16 * k) + cos(9*pi/16 * k) + cos(pi/2 * k);
X = fft(x);
Y = abs(fftshift(X));
% x信号散点图
figure
stem(k,x);
xlabel('k');
ylabel('x(k)')
% 幅度
figure
subplot(211);
w1 = 2*pi/N;
stem((k-N/2)*w1, Y);
xlabel('Frequency(N=32)');
ylabel('Magnitude');
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X)));
xlabel('Frequency(N=32)');
ylabel('Phrase');
%若N不是32的正整数倍----------------------------
figure
X2=fft(x,N1);
Y2=fftshift(X2);
w2=[-N1/2:N1/2-1]*(2*pi/N1);
%幅度
subplot(211);
stem(w2,abs(Y2));
xlabel('Frequency(N=30)');
ylabel('Magnitude');
%相位
subplot(212)
stem(w2,angle(Y2));
xlabel('Frequency(N=30)');
ylabel('Phrase');
第五题代码:
close all;
clear all;
N = 64;
N1 = 256;
k = 0:N-1;
x = cos(2*pi/15 * k) + 0.75 * cos(2.3*pi/15 * k);
X = fft(x);
Y = abs(fftshift(X));
%问(1)-----------------------------
% x信号散点图
figure
stem(k,x);
xlabel('k');
ylabel('x(k)')
% 幅度
figure
subplot(211);
w1 = 2*pi/N;
stem((k-N/2)*w1, Y);
xlabel('Frequency(N=64)');
ylabel('Magnitude');
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X)));
xlabel('Frequency(N=64)');
ylabel('Phrase');
%问(2)----------------------------
%若N=256
figure
X2=fft(x,N1);
Y2=fftshift(X2);
w2=[-N1/2:N1/2-1]*(2*pi/N1);
%幅度
subplot(211);
stem(w2,abs(Y2));
xlabel('Frequency(N=256)');
ylabel('Magnitude');
%相位
subplot(212)
stem(w2,angle(Y2));
xlabel('Frequency(N=256)');
ylabel('Phrase');
%问(3)------------------------------
%非矩形窗计算FFT
%汉宁窗+++++++++++++++++++
W = 0.5 - 0.5 * cos(2*pi*k/N);
x3 = x .* W;
X3 = fft(x3);
Y3 = abs(fftshift(X3));
% 幅度
figure
subplot(211);
stem((k-N/2)*w1, Y3);
xlabel('Frequency(N=64)');
ylabel('Magnitude');
title('汉宁窗')
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X3)));
xlabel('Frequency(N=64)');
ylabel('Phrase');
%高斯窗++++++++++++++
W1 = exp(-0.5 .* (3 * 2*k./(N-1)).^2);
x31 = x .* W1;
X31 = fft(x31);
Y31 = abs(fftshift(X31));
% 幅度
figure
subplot(211);
stem((k-N/2)*w1, Y31);
xlabel('Frequency(N=64)');
ylabel('Magnitude');
title('高斯窗')
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X31)));
xlabel('Frequency(N=64)');
ylabel('Phrase');
%指数窗+++++++++++++++++++++++
W2 = exp(abs(k-1-N/2)/N);
x32 = x .* W2;
X32 = fft(x32);
Y32 = abs(fftshift(X32));
% 幅度
figure
subplot(211);
stem((k-N/2)*w1, Y32);
xlabel('Frequency(N=64)');
ylabel('Magnitude');
title('指数窗')
%相位
subplot(212);
stem((k-N/2)*w1,angle(fftshift(X32)));
xlabel('Frequency(N=64)');
ylabel('Phrase');
%问(4)----------------------------
%若N=30
N4 = 30;
k4 = 0:N4-1;
x4 = cos(2*pi/15 * k4) + 0.75 * cos(2.3*pi/15 * k4);
figure
X4=fft(x4,N4);
Y4=fftshift(X4);
w4=[-N4/2:N4/2-1]*(2*pi/N4);
%幅度
subplot(211);
stem(w4,abs(Y4));
xlabel('Frequency(N=30)');
ylabel('Magnitude');
%相位
subplot(212)
stem(w4,angle(Y4));
xlabel('Frequency(N=30)');
ylabel('Phrase');
第六题代码:
close all;
clear all;
% 题6
N = 500;
w=(-N/2:N/2-1)*(2*pi/N);
k = -50:50;
%问(1)-----------------------------------------------
% y[k] = x[2k]
n = 2;
x1 = exp(-(0.1*n*k).^2/2);
X1 = fft(x1,N);
Y1 = fftshift(X1);
figure
plot(w,Y1);
xlabel('Frequency');
ylabel('Magnitude');
title('y[k] = x[2k]');
%问(2)--------------------------------------
% g[k] = x[4k]
n = 4;
x2 = exp(-(0.1*n*k).^2/2);
X2 = fft(x2,N);
Y2 = fftshift(X2);
figure
plot(w,Y2);
xlabel('Frequency');
ylabel('Magnitude');
title('g[k] = x[4k]');
%问(3)若将上述x[k]乘以cos(pk/2) ,重做(1)和(2)-------
% y[k] = x[2k]
x3 = exp(-(0.1*n*k).^2/2).*cos(pi*k/2);
X3 = fft(x3,N);
Y3 = fftshift(X3);
figure
plot(w,Y3);
xlabel('Frequency');
ylabel('Magnitude');
title('y[k] = x[2k] (x[k]=x[k]*cos(πk/2))');
% g[k] = x[4k]
x4 = exp(-(0.1*n*k).^2/2).*cos(pi*k/2);
X4 = fft(x4,N);
Y4 = fftshift(X4);
figure
plot(w,Y4);
xlabel('Frequency');
ylabel('Magnitude');
title('g[k] = x[4k](x[k]=x[k]*cos(πk/2))');