数字信号处理实验指导书
WNnk=WN.^(-nk); xn=(Xk*WNnk)/N;
% (3) 实序列的分解
% 实序列可分解为共扼对称分量xec?(1/2)*[x(n)?x((-n))N] % 和共扼反对称分量xoc?(1/2)*[x(n)-x((-n))N] function [xec,xoc]=circevod(x) N=length(x); n=0:(N-1);
xec=0.5*(x+x(mod(-n,N)+1)); %根据上面的公式计算,mod函数为取余 xoc=0.5*(x-x(mod(-n,N)+1));
% (4) 序列的循环移位 y(n)?x((n?m))N function y=cirshftt(x,m,N) if length(x)>N
error('N mustbe >= the length of x') %要求移位周期大于信号长度 end
x=[x zeros(1,N-length(x))]; n=[0:1:N-1]; n=mod(n-m,N); y=x(n+1);
%例1 本例检验实序列的性质DFT[xec(n)]=Re[X(k)]DFT[xoc(n)]=Im[X(k)] %设 x(n)=10*(0.8).^n 0<=n<=10 将x(n)分解为共扼对称及共扼反对称部分
%实验报告要求:(1)将实验结果画出 (2)实验结果说明什么
n=0:10; x=10*(0.8).^n; [xec,xoc]=circevod(x);
subplot(2,1,1);stem(n,xec); %画出序列的共扼对称分量 title('Circular -even component')
xlabel('n');ylabel('xec(n)');axis([-0.5,10.5,-1,11]) subplot(2,1,2);stem(n,xoc); %画出序列的共扼反对称分量 title('Circular -odd component')
xlabel('n');ylabel('xoc(n)');axis([-0.5,10.5,-4,4]) figure(2)
X=dft(x,11); %求出序列的DFT
Xec=dft(xec,11); %求序列的共扼对称分量的DFT Xoc=dft(xoc,11); %求序列的共扼反对称分量的DFT
数字信号处理实验指导书
subplot(2,2,1);stem(n,real(X));axis([-0.5,10.5,-5,50]) title('Real{DFT[x(n)]}');xlabel('k'); %画出序列DFT的实部 subplot(2,2,2);stem(n,imag(X));axis([-0.5,10.5,-20,20]) title('Imag{DFT[x(n)]}');xlabel('k'); %画出序列DFT的虚部 subplot(2,2,3);stem(n,Xec);axis([-0.5,10.5,-5,50]) title('DFT[xec(n)]');xlabel('k');
subplot(2,2,4);stem(n,imag(Xoc));axis([-0.5,10.5,-20,20]) title('DFT[xoc(n)]');xlabel('k');
% 例2 本例为计算序列的圆周卷积程序 % 运行之前应在命令窗口输入 x1,x2,N 的值
%实验报告要求:自己选择2个序列进行计算,将实验结果写出。
if length(x1)>N
error('N mustbe >= the length of x1') end
if length(x2)>N
error('N mustbe >= the length of x2') end
x1=[x1 zeros(1,N-length(x1))]; %将x1,x2补0成为N长序列 x2=[x2 zeros(1,N-length(x2))]; m=[0:1:N-1];
x2=x2(mod(-m,N)+1); %该语句的功能是将序列翻褶,延拓,取主值序列 H=zeros(N,N);
for n=1:1:N %该for循环的功能是得到x2序列的循环移位矩阵 H(n,:)=cirshftt(x2,n-1,N); %和我们手工计算圆周卷积得到的表是一致的 end
y=x1*H' %用矩阵相乘的方法得到结果
% 例3 本例验证采样定理
%令xa(t)?e?1000|t|,绘制其傅立叶变换Xa(j?)。用不同频率对其进行采样,分别画出离散时间傅立叶变换X(e)。已给出采样频率为fs?5kHz时的的程序
%实验报告要求:(1)请写出fs?1kHz时的程序 (2)将实验结果画出 (3)实验结果说明什么(采样频率不同结果有何不同)。
Dt=0.00005; %步长为0.00005s t=-0.005:Dt:0.005;
xa=exp(-1000*abs(t)); %取时间从-0.005s到0.005s这段模拟信号
j?数字信号处理实验指导书
Wmax=2*pi*2000; %信号最高频率为2?*2000 K=500; %频域正半轴取500个点进行计算 k=0:1:K;
W=k*Wmax/K; %??k*Wmax 求模拟角频率
KXa=xa*exp(-j*t'*W)*Dt; %计算连续时间傅立叶变换(利用矩阵运算实现) Xa=real(Xa); %取实部
W=[-fliplr(W),W(2:501)]; %将角频率范围扩展为从-到+ Xa=[fliplr(Xa),Xa(2:501)];%A = [1 3 5 7 9 ]则fliplr(A)= [9 7 5 3 1 ] subplot(2,2,1);
plot(t*1000,xa); %画出模拟信号,横坐标为时间(毫秒),纵坐标为幅度 xlabel('time(millisecond)');ylabel('xa(t)'); title('anolog signal'); subplot(2,2,2);
plot(W/(2*pi*1000),Xa*1000);%画出连续时间傅立叶变换 xlabel('frequency(kHZ)'); %横坐标为频率(kHz) ylabel('xa(jw)'); %纵坐标为幅度 title('FT');
%下面为采样频率5kHz时的程序 Ts=0.0002; %采样间隔为1n=-25:1:25;
x=exp(-1000*abs(n*Ts)); %离散时间信号 K=500;k=0:1:K;w=pi*k/K; %w为数字频率
X=x*exp(-j*n'*w); %计算离散时间傅立叶变换(序列的傅立叶变换) X=real(X);
w=[-fliplr(w),w(2:K+1)]; X=[fliplr(X),X(2:K+1)]; subplot(2,2,3);
stem(n*Ts*1000,x); %画出采样信号(离散时间信号) xlabel('time(millisecond)');
gtext('Ts=0.2ms'); %该语句可以将引号中的内容放置在figure中的任何地方,只需 %将十字的中心放在想放置内容的地方,然后按鼠标即可。 ylabel('x1(n)');
title('discrete signal'); subplot(2,2,4);
plot(w/pi,X); %画出离散时间傅立叶变换 xlabel('frequency(radian)'); %横坐标为弧度 ylabel('x1(jw)');title('DTFT');
fs?0.0002s
数字信号处理实验指导书
%例4 本例说明补零序列的离散傅立叶变换
%序列x(n)?R5(n),已给出序列的傅立叶变换程序和将原序列补零到10长序列的DFT %实验报告要求: (1)编写将序列补零到20长后计算DFT的程序 (2)给出实验结果 (3)实验结果说明什么(即序列补零后进行DFT,频谱有何变化)
n=0:4;
x=[ones(1,5)]; %产生矩形序列 k=0:999;w=(pi/500)*k;
X=x*(exp(-j*pi/500)).^(n'*k); %计算离散时间傅立叶变换 Xe=abs(X); %取模
subplot(3,2,1);stem(n,x);ylabel('x(n)'); %画出矩形序列
subplot(3,2,2);plot(w/pi,Xe);ylabel('|X(ejw)|'); %画出离散时间傅立叶变换 N=10;x=[ones(1,5),zeros(1,N-5)]; %将原序列补零为10长序列 n=0:1:N-1;
X=dft(x,N); %进行DFT magX=abs(X);
k=(0:length(magX)'-1)*N/length(magX);
subplot(3,2,3);stem(n,x);ylabel('x(n)'); %画出补零序列 subplot(3,2,4);stem(k,magX); %画出DFT结果 axis([0,10,0,5]);ylabel('|X(k)|');
%例5 本题说明高密度谱和高分辨率谱之间的区别,高密度谱是信号补零后得到的,虽然谱线相当密,但是因为信号有效长度不变,所以其分辨率也不变,因此还是很难看出信号的频谱成分。高分辨率谱是将信号有效长度加长,因此分辨率提高,可以看出信号的成分。 %有一个序列为x(n)?2cos(0.35?n)?cos(0.5?n) (该序列周期计算可得40) %(1)下面给出有10个有效采样点序列的DFT程序
%(2)请写出将第一问中的10长序列补零到40长,计算其DFT %(3)采样n=0:39,计算有40个有效采样点的序列的DFT
%实验报告要求: (1)请编写将有10个有效采样点的序列补零到40长后计算DFT的程序 (2) 请编写计算有40个有效采样点的序列的DFT的程序 (3) 将实验结果画出并分析实验结果说明什么
M=10; n=0:M-1;
x=2*cos(0.35*pi*n)+cos(0.5*pi*n);
subplot(2,1,1);stem(n,x);title('没有足够采样点的信号'); Y=dft(x,M);
k1=0:M-1;w1=2*pi/M*k1;
subplot(2,1,2);stem(w1/pi,abs(Y));title('信号的频谱');
M=10; n=0:M-1;

