目录
计算x(n)=cos(w1n)+cos(w2n)在抽样频率fs=8kHz下,
x1(n)=cos(0.355*pi*n)+cos(0.375*pi*n)
x2(n)=cos(0.355*pi*n)+cos(0.5*pi*n)
研究
,
之间的关系
计算x(n)=cos(w1n)+cos(w2n)在抽样频率fs=8kHz下,
x1(n)=cos(0.355*pi*n)+cos(0.375*pi*n)
x2(n)=cos(0.355*pi*n)+cos(0.5*pi*n)
(1)64点抽样点的DFT
为了实验的进行,首先我们先求得。
%x1(n),x2(n)频谱,n取值足够的大,频谱泄露非常小,近似为真正的X(e^jw)
xn1=cos(w1*n)+cos(w21*n); %第一组信号抽样序列
xn2=cos(w1*n)+cos(w22*n); %第二组信号抽样序列
Xk1=fftshift(fft(xn1)); Xk2=fftshift(fft(xn2)); %计算两组序列的频谱
magXk1=abs(Xk1); magXk2=abs(Xk2); %计算幅度谱
figure(1) %作连续频谱图
subplot(321) %作x1(n)频谱图的实部
plot(k*2*pi/N,real(Xk1),'linewidth',2);grid
xlabel('\omega(rad)');title('x1(n)的频谱');ylabel('Re[X1(e^j^\omega)]'); axis([0,3.0,0,2300]);
subplot(322) %作x2(n)频谱图
plot(k*2*pi/N,real(Xk2),'linewidth',2);grid
xlabel('\omega(rad)');title('x2(n)的频谱');ylabel('Re[X2(e^j^\omega)]'); axis([0,3.0,0,2300]);
众所周知,在MATLAB中是无法表示的,他是一个奇异函数,所以离散周期序列的DTFT,即
理论上是无法表示的,但这里我们用了一个小技巧,取N=4096的窗函数,使得频谱泄露尽可能小,同时对
进行N=4096的采样,使得结果尽可能精确。但得到的
的横坐标结果是不准确的,需要注意。
接下来我们去求DFT。
是为了得到64抽样点
% k1=floor(-(N1-1)/2:(N1-1)/2); N1=64
Xk11=fftshift(fft(xn11)); Xk21=fftshift(fft(xn21)); %计算两组序列的64点DFT
magXk11=abs(Xk11);magXk21=abs(Xk21);
subplot(423) %作64点频谱图
stem(k1,magXk11*2/N1,'.','linewidth',2);grid
xlabel('k');title('x1(n)的64点抽样值的DFT幅度谱');ylabel('|X11(k)|'); axis([0,31,0,1]);
subplot(424)
stem(k1,magXk21*2/N1,'.','linewidth',2);grid
xlabel('k');title('x2(n)的64点抽样值的DFT幅度谱');ylabel('|X21(k)|'); axis([0,31,0,1.2]);
(2)64点抽样点加64点零点的128点DFT
序列补零对没有任何影响,
.但是补零对于DFT有影响,
,会减小DFT计算的频率间距。
%%
%%N2=128;
xn12=[xn1(1:N1),zeros(1,N1)]; xn22=[xn2(1:N1),zeros(1,N1)]; %取两组序列的64个抽样点并加64个零点
Xk12=fftshift(fft(xn12)); Xk22=fftshift(fft(xn22)); %计算两组序列的64点抽样点加64点零点的128点DFT
magXk12=real(Xk12); magXk22=real(Xk22);
subplot(425) %作64点抽样点加64点零点的128点DFT
stem(k2,magXk12,'.','linewidth',2);grid
xlabel('k');title('x1(n)的64点抽样点加64点零点的幅度谱');ylabel('Re[X12(k)]'); axis([0,63,0,40]);
subplot(426)
stem(k2,magXk22,'.','linewidth',2);grid
xlabel('k');title('x2(n)的64点抽样点加64点零点的12点DFT');ylabel('Re[X22(k)]'); axis([0,63,0,40]);
(3)128点抽样点的DFT
原理基本如上,所有的代码粘贴在下面。
%习题3.37
%计算x(n)=cos(w1n)+cos(w2n)在抽样频率fs=8kHz下的
%(1)64点抽样点的DFT;
%(2)64点抽样点加64点零点的128点DFT;
%(3)128点抽样点的DFT
clc;
clear all;
fs=8000; f1=1420; f21=1500; f22=2000; %抽样频率和各频率分量
w1=2*pi*f1/fs; w21=2*pi*f21/fs; w22=2*pi*f22/fs; %各频率分量对应的数字频率
N=4096; N1=64; N2=128; %DFT点数
n=[0:1:N-1]; n1=[0:1:N1-1]; n2=[0:1:N2-1];
k=floor(-(N-1)/2:(N-1)/2); k1=floor(-(N1-1)/2:(N1-1)/2); k2=floor(-(N2-1)/2:(N2-1)/2);
%%
%(1)64点抽样点的DFT;
%x1(n),x2(n)频谱,n取值足够的大,频谱泄露非常小,近似为真正的X(e^jw)
xn1=cos(w1*n)+cos(w21*n); %第一组信号抽样序列
xn2=cos(w1*n)+cos(w22*n); %第二组信号抽样序列
Xk1=fftshift(fft(xn1)); Xk2=fftshift(fft(xn2)); %计算两组序列的频谱
magXk1=abs(Xk1); magXk2=abs(Xk2); %计算幅度谱
figure(1) %作连续频谱图
subplot(321) %作x1(n)频谱图的实部
plot(k*2*pi/N,real(Xk1),'linewidth',2);grid
xlabel('\omega(rad)');title('x1(n)的频谱');ylabel('Re[X1(e^j^\omega)]'); axis([0,3.0,0,2300]);
subplot(322) %作x2(n)频谱图
plot(k*2*pi/N,real(Xk2),'linewidth',2);grid
xlabel('\omega(rad)');title('x2(n)的频谱');ylabel('Re[X2(e^j^\omega)]'); axis([0,3.0,0,2300]);
%%
% 计算两组序列的64点抽样点加64点零点的频谱
%x1(n),x2(n)的64点抽样点频谱,在抽样频率不变的情况下,只取前64个点
xn11=xn1(1:N1); xn21=xn2(1:N1); %取两组序列的64个抽样点,N1=64
X11=fftshift(fft(xn11,N)); X21=fftshift(fft(xn21,N)); %计算两组序列的64点抽样点的频谱
subplot(323) %作x1(n)的64点抽样点频谱图
plot(k*2*pi/N,real(X11),'linewidth',2);grid
xlabel('\omega(rad)');title('x1(n)的64点抽样点频谱');ylabel('Re[X11(e^j^\omega)]'); axis([0,3.0,-10,40]);
subplot(324) %作x2(n)的64点抽样点频谱图
plot(k*2*pi/N,real(X21),'linewidth',2);grid
xlabel('\omega(rad)');title('x2(n)的64点抽样点频谱');ylabel('Re[X21(e^j^\omega)]'); axis([0,3.0,-10,40]);
%%
%N2=128;
xn13=xn1(1:N2); xn23=xn2(1:N2); %取两组序列的128个抽样点
X13=fftshift(fft(xn13,N)); X23=fftshift(fft(xn23,N)); %计算两组序列的128点抽样点的频谱
subplot(325) %作x1(n)的128点抽样点频谱图
plot(k*2*pi/N,real(X13),'linewidth',2);grid
xlabel('\omega(rad)');title('x1(n)的128点抽样点频谱');ylabel('Re[X13(e^j^\omega)]'); axis([0,3.0,-20,80]);
subplot(326) %作x2(n)的128点抽样点频谱图
plot(k*2*pi/N,real(X23),'linewidth',2);grid
xlabel('\omega(rad)');title('x2(n)的128点抽样点频谱');ylabel('Re[X23(e^j^\omega)]'); axis([0,3.0,-20,80]);
%%
magXk11=abs(Xk1); magXk21=abs(Xk2);
figure(2) %作DFT幅度谱
subplot(421) %作x1(n)幅度谱
stem(k,magXk1*2/N,'.','linewidth',2);grid
xlabel('k');title('x1(n)的幅度谱');ylabel('|X1(k)|'); axis([0,2047,0,1.2]);
subplot(422) %作x2(n)幅度谱
stem(k,magXk2*2/N,'.','linewidth',2);grid
xlabel('k');title('x2(n)的幅度谱');ylabel('|X2(k)|'); axis([0,2047,0,1.2]);
%%
% k1=floor(-(N1-1)/2:(N1-1)/2); N1=64
Xk11=fftshift(fft(xn11)); Xk21=fftshift(fft(xn21)); %计算两组序列的64点DFT
magXk11=real(Xk11);magXk21=real(Xk21);
subplot(423) %作64点频谱图
stem(k1,magXk11,'.','linewidth',2);grid
xlabel('k');title('x1(n)的64点抽样值的DFT幅度谱');ylabel('Re[X11(k)]'); axis([0,31,0,40]);
subplot(424)
stem(k1,magXk21,'.','linewidth',2);grid
xlabel('k');title('x2(n)的64点抽样值的DFT幅度谱');ylabel('Re[X21(k)]'); axis([0,31,0,40]);
%%
%%N2=128;
xn12=[xn1(1:N1),zeros(1,N1)]; xn22=[xn2(1:N1),zeros(1,N1)]; %取两组序列的64个抽样点并加64个零点
Xk12=fftshift(fft(xn12)); Xk22=fftshift(fft(xn22)); %计算两组序列的64点抽样点加64点零点的128点DFT
magXk12=real(Xk12); magXk22=real(Xk22);
subplot(425) %作64点抽样点加64点零点的128点DFT
stem(k2,magXk12,'.','linewidth',2);grid
xlabel('k');title('x1(n)的64点抽样点加64点零点的幅度谱');ylabel('Re[X12(k)]'); axis([0,63,0,40]);
subplot(426)
stem(k2,magXk22,'.','linewidth',2);grid
xlabel('k');title('x2(n)的64点抽样点加64点零点的12点DFT');ylabel('Re[X22(k)]'); axis([0,63,0,40]);
%%
%N2=128;
%xn13=xn1(1:N2); xn23=xn2(1:N2); %取两组序列的128个抽样点
Xk13=fftshift(fft(xn13)); Xk23=fftshift(fft(xn23)); %计算两组序列的128点DFT
magXk13=real(Xk13); magXk23=real(Xk23);
subplot(427) %作128点频谱图
stem(k2,magXk13,'.','linewidth',2);grid
xlabel('k');title('x1(n)的128点抽样值的幅度谱');ylabel('Re[X13(k)]'); axis([0,63,0,80]);
subplot(428)
stem(k2,magXk23,'.','linewidth',2);grid
xlabel('k');title('x2(n)的128点取样值的幅度谱');ylabel('Re[X23(k)]'); axis([0,63,0,80]);