现在的位置: 首页 > 综合 > 正文

数字信号处理作业一(参考答案)

2012年10月03日 ⁄ 综合 ⁄ 共 6491字 ⁄ 字号 评论关闭

第一章:

P12:复习思考题(1.4);习题(1.31.5

   

1-3. 一组电压值为x=[0:0.5:4],经过一个把-55伏正电压转换为12位(包括符号位)二进制的 A/D转换器,求输出的量化电压的二进制代码,并求经D/A转换后的量化电压值。

解:

x=[0:0.5:4]; % 输入量数组

y=bqtize(x,11,5) % 量化后输出

deltax=5*2^-11 % 量化步长值

yc=round(y/deltax) % 此输出对应的量化单位数(十进制)

yb=dec2bin(yc,12) % 此输出对应的量化单位数(12位二进制)

 

注:bqtize.m文件在subrtdsp文件夹下

function y=bqtize(x,N,V)

%《数字信号处理教程——MATLAB释义与实现》

% 绝对量化子程序

% 电子工业出版社出版 陈怀琛编著 2004年9月

%

% function y=bqtize(x,N,V)

% -------------------------------------------

% 将x数组按最大幅度V量化为N位二进制的步长进行量化

% x--任意实数

% N--量化为二进制的位数(不计符号位)

% V--规定的最大幅度,缺省值是V=max(abs(x))

%

if nargin<3 V=max(abs(x));end

ax=abs(x); % 去掉符号

deltax=V/(2^N-1); % 求量化步长

% 将x用deltax四舍五入量化为整数

xint=fix(ax./deltax+0.5);    

y=sign(x).*xint.*deltax; % 再将此整数缩小2^-(N-m),恢复量化后的原值

 

题1-5,

% chapter1, exercise1.5

% define the constant

ns = 10^(-9);

ms = 10^(-3);

sample_interval = 0.1 * ms;

process_interval = (10 * ns) * 4 + (0.5 * ns) * 2;

channals = floor(sample_interval / process_interval)

 

第二章:

P37-P39:复习思考题(2.12.102.11);习题(2.32.62.11(b)2.132.142.17

   

2-3. x(n) = [1,-2,4,6,-5,8,10]. 产生并画出下列序列的样本.

x1(n)=3x(n+2)+x(n-4)-2x(n)

解:解题的程序为:

x = [1,-2,4,6,-5,8,10]; nx=[1:7]

[y1,ny1]=seqshift(x,nx,-2) % y1(n)=x(n+2)

[y2,ny2]=seqshift(x,nx,4) % y2(n)=x(n-4)

[y3,ny3]=seqadd(3*y1,ny1,y2,ny2) % y3(n)=3x(n-2)+x(n-4)

[x1,nx1]=seqadd(y3,ny3,-2*x,nx) % x1(n)=y3(n)-2x(n)

stem(nx1,x1)

答案 x1= 3 -6 10 22 -23 12 41 -18 -16 6 -5 8 10 nx1= [-1:11]

题2-6 一个特定的线性和时不变系统,描述它的差分方程如下:

y(n)+0.1y(n-1)-0.06y(n-2) = x(n)-2x(n-1)

求系统脉冲响应的前10个样本。

解:程序为

a=[1,0.1,0.06]; b=[1,-2];

x=impseq(0,0,10);

h=filter(b,a,x),stem(h)

h1=impz(b,a)

程序运行的结果为:h = 1.0000 -2.1000 0.1500 0.1110 -0.0201 -0.0046 0.0017 0.0001 -0.0001 0.0000 0.0000

h1' = 1.0000 -2.1000 0.1500 0.1110 -0.0201 -0.0046 0.0017

可见impz函数自动甩掉了数值很小的脉冲响应尾部数据,只取了8个样本。

 

题2-11(b)

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第二章 习题(参考解答)

% P38 2.11

% 浙江大学生仪学院 陈玮

% 题目条件:

n1 = -10 : 20;

x1 = n1;

n2 = 0 : 30;

x2 = cos(0.1*pi*n2);

n3 = -5 : 10;

x3 = 1.2 .^ n3;

% 验证交换律

[y12, n12] = convwthn(x1, n1, x2, n2);

[y21, n21] = convwthn(x2, n2, x1, n1);

err1 = sum(y12 - y21)

errn1 = sum(n12 - n21)

%验证结合律

[y23, n23] = convwthn(x2, n2, x3, n3);

[y12_3, n12_3] = convwthn(y12, n12, x3, n3);

[y1_23, n1_23] = convwthn(x1, n1, y23, n23);

err2 = sum(y12_3 - y1_23)

errn2 = sum(n12_3 - n1_23)

 

习题2-13

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第二章 习题(参考解答)

% P38 2.13

% 浙江大学生仪学院 陈玮

% 题目条件:

x = [5, 3, -2, 0, -3];

h = [4, -3, 2, 1];

C = [h(1), zeros(1, length(x) - 1)];

R = [h, zeros(1, length(x) - 1)];

H = toeplitz(C, R);

y = x*H % 用向量-矩阵乘法

y2 = conv(x,h)%用conv函数

y3 = H' * x'%用矩阵-向量乘法

y3 = y3'

 

习题2-14

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第二章 习题(参考解答)

% P38 2.14

% 浙江大学生仪学院 陈玮

% 题目条件:

h = [4, 3, 2 -1];

y = [20, -5, 7, -18, 2, -9, 3];

lengthx = length(y) - length(h) + 1

C = [h(1), zeros(1, lengthx - 1)];

R = [h, zeros(1, lengthx - 1)];

H = toeplitz(C, R);

% H' * x' = y'; x' = H' / y'

x = H' / y';

x = x'

x2 = deconv(y,h);

习题2-17

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第二章 习题(参考解答)

% P38 2.17

% 浙江大学生仪学院 陈玮

% 题目条件:

a = [1, 0.1, -0.06];

b = [1, -2];

h = impz(b, a);

stem(h')

 

第三章:

P84-P85:复习思考题(3.13.23.33.103.113.13);习题(3.13.23.43.53.103.153.263.27(a)(b)

题3-1

根据本书P40(式3.1.5)得出,模拟正弦信号的频率f0与采样频率Fs之比为两个整数之比。注意,此处k为模拟信号的同期数,N为序列每个周期的长度。

则有:

(a)f0 = 2.5/2*pi,无法满足k/N,k与N均为整数的条件,故此序列非周期序列

(b)f0 = 4.8*pi/2*pi = 2.4, 若取k/N = 12/5*Fs,则N的最小值在k=12时取得,N=5

(c)f0 = 2.8*pi/2*pi=1.4, 若取k/N = 7/5*Fs,则N的最小值在k=7时取得,N=5

(d)f0 = (7*pi/17)/2*pi=7/34; 若取k/N = 7/34*Fs,则N的最小值在k=7时取得,N=34

(e)如果一个函数由几部分组成,这个函数的周期是每个函数的最小周期的分子的最小公倍数除以分母的最大公约数。

f1=1.2*pi=6*pi/5,f2=0.8*pi=4*pi/5,则f0=最小公倍数(6,4)/最大公约数(5,5)=12/5

若取k/N = 12/5*Fs,则N的最小值在k=12时取得,N=5

用matlab画图如下:

绘图程序:

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第二章 习题(参考解答)

% P86 3.1

% 浙江大学生仪学院 陈玮

% 题目条件:

clf;

 

na = 0:20;

ta = 0:0.1:20;

xta = sin(2.5*ta);

xa = sin(2.5*na);

subplot(5,1,1);stem(na,xa);hold on;plot(ta, xta, 'r');ylabel('xa');

 

nb = 0:8;

tb = 0:0.005:8;

xb = sin(4.8*pi*nb);

xtb = sin(4.8*pi*tb);

subplot(5,1,2);stem(nb,xb);hold on;plot(tb, xtb,'r');ylabel('xb');

 

nc = 0:8;

tc = 0:0.01:8;

xc = exp(j*2.8*pi*nc);

xtc = exp(j*2.8*pi*tc);

subplot(5,1,3);stem(nc,xc);hold on;plot(tc, xtc,'r');ylabel('xc');

 

nd = 0:44;

td = 0:0.01:44;

xd = cos(7/17*pi*nd);

xtd = cos(7/17*pi*td);

subplot(5,1,4);stem(nd,xd);hold on;plot(td, xtd,'r');ylabel('xd');

 

ne = 0:8;

te = 0:0.01:8;

xe = 3*sin(1.2*pi*ne + 0.65*pi) + 4*sin(0.8*pi*ne) - cos(0.8*pi*ne);

xte = 3*sin(1.2*pi*te + 0.65*pi) + 4*sin(0.8*pi*te) - cos(0.8*pi*te);

subplot(5,1,5);stem(ne,xe);hold on;plot(te, xte,'r');ylabel('xe');

 

题3-2

根据(式3.1.5),f0 = (k/N)*Fs

本题中Fs1 = 2Hz, Fs2 = 1/0.1s=10Hz,因此,求得f01与f02分别为:

(a)f0 = 2.5/2*pi,无法满足k/N,k与N均为整数的条件,故此序列非周期序列

(b)f0 = 4.8*pi/2*pi *Fs= 2.4*Fs, 若取k/N = 12/5*Fs,则N的最小值在k=12时取得,N=5

f01=4.8Hz,f02=24Hz

(c)f0 = 2.8*pi/2*pi=1.4*Fs, 若取k/N = 7/5*Fs,则N的最小值在k=7时取得,N=5

f01=2.8Hz,f02=14Hz

(d)f0 = (7*pi/17)/2*pi=7/34*Fs; 若取k/N = 7/34*Fs,则N的最小值在k=7时取得,N=34

f01=7/17Hz,f02=35/17Hz

(e)如果一个函数由几部分组成,这个函数的周期是每个函数的最小周期的分子的最小公倍数除以分母的最大公约数。

f1=1.2*pi=6*pi/5,f2=0.8*pi=4*pi/5,则f0=最小公倍数(6,4)/最大公约数(5,5)=12/5

若取k/N = 12/5*Fs,则N的最小值在k=12时取得,N=5

f01=24/5Hz,f02=24Hz

 

题3-3(本题暂未经验证,有同学们发现错误,请指正)

解析法求时可利用DTFT的性质及基本函数的DTFT变换表求得:

(a)X(jw) = 5*(1-0.8* exp(-jw))^-1

(b) 利用时移特性,先令n=m+2。

X(jw) = 2*0.95^4*(1-0.95* exp(-jw)) ^-1

(c) 利用频域导数定理有:

X(jw)=0.6*exp(-jw)*(1-0.6*exp(-jw))^-2

(d) 利用频域卷积定理有:

5*pi*((1+0.8* exp(-j(w-0.1*pi-2*k*pi)))^-1 + (1+0.8* exp(-j(w+0.1*pi-2*k*pi)))

(e)令m=n-2,则有x(n)=(m+3)(-0.8)^m*u(m);

X(jw)=-0.8exp(-jw)*(1+0.8exp(-jw))^-2 + 3*(1+0.8* exp(-jw))^-1

画图大家可以将w域的主值区间[-pi,pi]进行等分后画出,一般100等分总够了。

 

题 3-5

% 第三章 习题(参考解答)

% P86 3.5

% 浙江大学生仪学院 陈玮

% 题目条件:

function [X, w, n] = mydtft(x,w,n)

%计算离散时间傅里叶变换

%———————————

% [X] = mydtft(x,w,n)

% X = 在w频率点上的DTFT向量

% x = 有限长输入序列

% w = 频率点位置向量

% n = 样本位置向量,缺省时取为x的长度

if(nargin < 1)

error('no args! please use: help mydtft');

end

K = 99;

if(nargin < 3)

n = 1:length(x);

if(nargin < 2)

w = -pi : 2*pi/K: pi;

end

end

W = n' * w;

Wnk = exp(-j) .^ W;

X = x*Wnk;

 

Test程序:

x = ones(1,20);

w = linspace(-4,4, 1000);

[X, w, n] = mydtft(x, w);

subplot(3,1,1);plot(w,X);

[X, w, n] = mydtft(x);

subplot(3,1,2);plot(w,X);

X = fftshift(fft(x, 100));

subplot(3,1,3);plot(w,X);

 

题3-15 12点序列x(n)为: x(n)={ -3,-2,3,4,2,-1,-1,2,4,3,-2,-3}

(a). 求出x(n)的DFT X(k),画出它的幅度和相位曲线(使用 stem函数)。

(b).用MATLAB画出x(n)的DTFT X(ejw)的幅度和相位曲线。

(c).验证(a)中的DFT是X(ejw)的采样。采用hold函数把两图放在一幅图里。

(d).有无可能从DFT X(k)重构DTFT X(ejw)?如果可能,给出重构所需要的内插公式;若不可能,说明不能重构的理由。

解:程序为

x=[ -3,-2,3,4,2,-1,-1,2,4,3,-2,-3];

n=0:11;X=fft(x,12);

subplot(2,1,1),stem([0:11]/12*2*pi,abs(X)),hold on

subplot(2,1,2),stem([0:11]/12*2*pi,angle(X)),hold on

k=0:1023;XDT= x*exp(j*2*pi/1024*n'*k);

subplot(2,1,1),

plot([0:1023]/1024*2*pi,abs(XDT),'r'),hold on

subplot(2,1,2),

plot([0:1023]/1024*2*pi,angle(XDT),'r'),hold on

从图中可以进行讨论。

 

题3-26

%《数字信号处理教程——MATLAB释义》:陈怀琛编著

% 第三章 习题(参考解答)

% P86 3.26

% 浙江大学生仪学院 陈玮

% 题目条件:

% 频率循环卷积

% y = circonvf(x1,x2,N)

% Y 长度为N的卷积结果

% x1 长度<=N的输入序列

% x2 长度<=N的输入序列

% N,循环缓冲器的长度

function [y] = circonvf(x1, x2, N)

if(nargin < 3)

if(nargin < 2)

error('at least tow argument, x1, x2');

else

N = max(length(x1), length(x2));

end

end

if(max(length(x1), length(x2)) < N)

x1 = [x1, zeros(1, N-length(x1))];

x2 = [x2, zeros(1, N-length(x1))];

end

X1 = fft(x1, N);

X2 = fft(x2, N);

Y = X1 .* X2;

y = ifft(Y, N);

 

测试命令:

x1 = randn(1, 8);

x2 = randn(1, 8);

y =circonvf(x1,x2,8)

y =circonvf(x1,x2)%N缺省时调用

y =circonvf(x1)%参数不够的情况下调用

y =circonv(x1,x2,8)%调用矩阵-向量乘积写成的循环卷积程序

 

题3-27

本题可通过fft函数直接求得,故不给出详细解答。注意R200(n)表示宽度为1到200的矩形窗,其实即限定了n的取值范围而已。

抱歉!评论已关闭.