数字信号处理DFT实验三

目录

研究​编辑,​编辑之间的关系

计算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

(2)64点抽样点加64点零点的128点DFT

(3)128点抽样点的DFT


研究X(e^{jw} ),X(K)之间的关系

计算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

为了实验的进行,首先我们先求得X(e^{jw} )

%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]);

 众所周知,\delta (\omega )在MATLAB中是无法表示的,他是一个奇异函数,所以离散周期序列的DTFT,即X(e^{jw} )理论上是无法表示的,但这里我们用了一个小技巧,取N=4096的窗函数,使得频谱泄露尽可能小,同时对X(e^{jw} )进行N=4096的采样,使得结果尽可能精确。但得到的X(e^{jw} )的横坐标结果是不准确的,需要注意。

接下来我们去求DFT。

xn11=xn1(1:N1); xn21=xn2(1:N1);是为了得到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

序列补零对X(e^{jw} )没有任何影响,X(e^{jw} )=\sum_{-\infty}^{+\infty} x(n)e^{-jwn}.但是补零对于DFT有影响,X(K)=\sum_{n=0}^{N-1} x(n)e^{-j\frac{2\pi}{N}nk} =\sum_{n=0}^{N-1} x(n)W_{N}^{nk},会减小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]);

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No_one-_-2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值