当前位置:文档之家› 数字信号处理MATLAB仿真(DOC)

数字信号处理MATLAB仿真(DOC)

数字信号处理MATLAB仿真(DOC)
数字信号处理MATLAB仿真(DOC)

实验一 数字信号处理的Matlab 仿真

一、实验目的

1、掌握连续信号及其MATLAB 实现方法;

2、掌握离散信号及其MA TLAB 实现方法

3、掌握离散信号的基本运算方法,以及MATLAB 实现

4、了解离散傅里叶变换的MA TLAB 实现

5、了解IIR 数字滤波器设计

6、了解FIR 数字滤波器设计1

二、实验设备

计算机,Matlab 软件

三、实验内容

(一)、 连续信号及其MATLAB 实现

1、 单位冲击信号

()0,0()1,0t t t dt εεδδε-?=≠??=?>???

例1.1:t=1/A=50时,单位脉冲序列的MATLAB 实现程序如下:

clear all;

t1=-0.5:0.001:0;

A=50;

A1=1/A;

n1=length(t1);

u1=zeros(1,n1);

t2=0:0.001:A1;

t0=0;

u2=A*stepfun(t2,t0);

t3=A1:0.001:1;

n3=length(t3);

u3=zeros(1,n3);

t=[t1 t2 t3];

u=[u1 u2 u3];

plot(t,u)

axis([-0.5 1 0 A+2])

2、 任意函数

()()()f t f t d τδττ+∞

-∞=-?

例1.2:用MA TLAB 画出如下表达式的脉冲序列

()0.4(2)0.8(1) 1.2() 1.5(1) 1.0(2)0.7(3)f n n n n n n n δδδδδδ=-+-+++++++

clear all;

t=-2:1:3;

N=length(t);

x=zeros(1,N);

x(1)=0.4;

x(2)=0.8

x(3)=1.2;

x(4)=1.5;

x(5)=1.0;

x(6)=0.7;

stem(t,x);

axis([-2.2 3.2 0 1.7])

3、 单位阶跃函数

1,0()0,0t u t t ?≥?=?

例1.3:用MA TLAB 实现单位阶跃函数

clear all;

t=-0.5:0.001:1;

t0=0;

u=stepfun(t,t0);

plot(t,u)

axis([-0.5 1 -0.2 1.2])

4、 斜坡函数

0()()g t B t t =-

例1.4:用MA TLAB 实现g(t)=3(t-1)

clear all;

t=0:0.01:3;

B=3;

t0=1;

u=stepfun(t,t0);

n=length(t);

for i=1:n

u(i)=B*u(i)*(t(i)-t0);

end

plot(t,u)

axis([-0.2 3.1 -0.2 6.2])

5、 实指数函数

()at f t Ae =

例1.5:用MA TLAB 实现0.5()3t f t e =

clear all;

t=0:0.001:3;

A=3;

a=0.5;

u=A*exp(a*t);

plot(t,u)

axis([-0.2 3.1 -0.2 14])

6、 正弦函数

2()cos()t f t A T π?=+ 例1.6:用MA TLAB 实现正弦函数f(t)=3cos(10πt+1)

clear all;

t=-0.5:0.001:1;

A=3;

f=5;

fai=1;

u=A*sin(2*pi*f*t+fai);

plot(t,u)

axis([-0.5 1 -3.2 3.2])

(二)、离散信号及其MATLAB 实现

1、 单位冲激序列

1,

0()0,0n n n δ?=?=?≠??

例2.1:用MA TLAB 产生64点的单位冲激序列

clear all;

N=64;

x=zeros(1,N);

x(1)=1;

xn=0:N-1;

stem(xn,x)

axis([-1 65 0 1.1])

2、 任意序列

()()()m f n f m n m δ∞=-∞=

-∑

例2.2:用MA TLAB 画出如下表达式的脉冲序列

()8.0() 3.4(1) 1.8() 5.6(3) 2.9(4)0.7(5)f n n n n n n n δδδδδδ=+-++-+-+-

clear all;

N=8;

x=zeros(1,N);

x(1)=8.0;

x(2)=3.4

x(3)=1.8;

x(4)=5.6;

x(5)=2.9;

x(6)=0.7;

xn=0:N-1;

stem(xn,x)

axis([-1 8 0 8.2])

3、 单位阶跃序列

1,0()0,0n u n n ?≥?=?

例2.3:用MA TLAB 实现单位阶跃函数

clear all;

N=32;

x=ones(1,N);

xn=0:N-1;

stem(xn,x)

axis([-1 32 0 1.1])

4、 斜坡序列

0()()g n B n n =-

例2.4:用MA TLAB 实现g(n)=3(n-4)点数为32的斜坡序列

clear all;

N=32;

k=4

B=3;

t0=1;

x=[zeros(1,k) ones(1,N-k)];

for i=1:N

x(i)=B*x(i)*(i-k);

end

xn=0:N-1;

stem(xn,x)

axis([-1 32 0 90])

5、 正弦序列

()sin(2)x n A fn π?=+

例2.5:用MA TLAB 实现幅度A=3,频率f=100,初始相位Φ=1.2,点数为32的正弦信号 clear all;

N=32;

A=3;

f=100;

fai=1.2;

xn=0:N-1;

x=A*sin(2*pi*f*(xn/N)+fai);

stem(xn,x)

axis([-1 32 -3.2 3.2])

6、 实指数序列

()n x n Aa =

例2.6:用MA TLAB 实现0.7()3x n e =,点数为32的实指数序列

clear all;

N=32;

A=3;

a=0.7;

xn=0:N-1;

x=A*a.^xn;

stem(xn,x)

7、 复指数序列

()(),a j n x n Ae n ω+=?

例2.7:用MA TLAB 实现幅度A=3,a=0.7,角频率ω=314,点数为32的实指数序列 clear all;

N=32;

A=3;

a=0.7;

w=314;

xn=0:N-1;

x=A*exp((a+j*w)*xn);

stem(xn,x)

8、 随机序列

利用MATLAB 产生两种随机信号:

rand(1,N)在区间上产生N 点均匀分布的随机序列

randn(1,N)产生均值为0,方差为1的高斯随机序列,即白噪声序列

例2.8:用MA TLAB 产生点数为32的均匀分布的随机序列与高斯随机序列

clear all;

N=32;

x_rand=rand(1,N);

x_randn=randn(1,N);

xn=0:N-1;

figure(1);

stem(xn,x_rand)

figure(2);

stem(xn,x_randn)

(三)、离散信号的基本运算

1、 信号的延迟

给定离散信号x(n),若信号y(n)定义为:y(n)=x(n-k),那么y(n)是信号x(n)在时间轴上右移k 个抽样周期得到的新序列。

例3.1:正弦序列y(n)=sin(100n)右移3个抽样周期后所得的序列,MATLAB 程序如下: clear all;

N=32;

w=100;

k=3;

x1=zeros(1,k);

xn=0:N-1;

x2=sin(100*xn);

figure(1)

stem(xn,x2)

x=[x1 x2];

axis([-1 N -1.1 1.1])

N=N+k;

xn=0:N-1;

figure(2)

stem(xn,x)

axis([-1 N -1.1 1.1])

2、 信号相加

若信号12()()()x n x n x n =+,值得注意的是当序列1()x n 和2()x n 的长度不相等或者位置不对应时,首先应该使两者的位置对齐,然后通过zeros 函数左右补零使其长度相等后再相加 例3.2:用MA TLAB 实现两序列相加

clear all;

n1=0:3

x1=[2 0.5 0.9 1];

figure(1)

stem(n1,x1)

axis([-1 8 0 2.1] )

n2=0:7

x2=[ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7];

figure(2)

stem(n2,x2)

axis([-1 8 0 0.8] )

n=0:7;

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

x2=[ zeros(1,8-length(n2)),x2];

x=x1+x2;

figure(3)

stem(n,x)

axis([-1 8 0 2.1])

3、 信号相乘

信号序列1()x n 和2()x n 相乘所得信号()x n 的表达式为:12()()()x n x n x n

这是样本与样本之间的点乘运算,在MATLAB 中可采用“.*”来实现,但是在信号序列相乘之前,应对其做与相加运算一样的操作。

例3.3:用MA TLAB 实现上例中两序列相乘

clear all;

n1=0:3

x1=[2 0.5 0.9 1];

figure(1)

stem(n1,x1)

axis([-1 8 0 2.1] )

n2=0:7

x2=[ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7];

figure(2)

stem(n2,x2)

axis([-1 8 0 0.8] )

n=0:7;

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

x2=[ zeros(1,8-length(n2)),x2];

x=x1.*x2;

figure(3)

stem(n,x)

axis([-1 8 0 0.35])

4、 信号翻转

信号翻转的表达式为:y(n)=x(-n),在MATLAB 中可以用fliplr 函数实现此操作

例3.4:用MA TLAB 实现“信号相加”中的1()x n 序列翻转

clear all;

n=0:3

x1=[2 0.5 0.9 1];

x=fliplr(x1);

stem(n,x)

axis([-1 4 0 2.1] )

5、 信号和

对于N 点信号()x n ,其和的定义为:1()N

n y x n ==∑

例3.5:用MA TLAB 实现“信号相加”中的1()x n 序列和

clear all;

n=0:3

x1=[2 0.5 0.9 1];

x=sum(x1)

6、 信号积

对于N 点信号()x n ,其积的定义为:1()N

n y x n ==∏

例3.5:用MA TLAB 实现“信号相加”中的1()x n 序列积

clear all;

n=0:3

x1=[2 0.5 0.9 1];

x=prod(x1)

(四)、离散傅里叶变换的MATLAB 实现

例4:若()s i n ()4

n x n π=是一个N=32的有限序列,利用MA TLAB 计算它的DFT 并画出图形。

N=32;

n=0:N-1;

xn=cos(pi*n/6);

k=0:N-1;

WN=exp(-j*2*pi/N);

nk=n ’*k;

WNnk=WN.^nk;

Xk=xn*WNnk;

figure(1)

stem(n,xn)

figure(2)

stem(k,abs(Xk))

在MA TLAB 中,可以直接利用内部函数fft 来实现FFT 算法,该函数是机器语言,而不是MATLAB 指令写成的,执行速度很快。常用格式为:

y=fft(x)

y=fft(x,N)

(五)、IIR数字滤波器设计

1、基于巴特沃斯法直接设计IIR数字滤波器

例5.1:设计一个10阶的带通巴特沃斯数字滤波器,带通频率为100Hz到200Hz,采样频率为1000Hz,绘出该滤波器的幅频于相频特性,以及其冲击响应图

clear all;

N=10;

Wn=[100 200]/500;

[b,a]=butter(N,Wn,’bandpass’);

freqz(b,a,128,1000)

figure(2)

[y,t]=impz(b,a,101);

stem(t,y)

2、基于切比雪夫法直接设计IIR数字滤波器

例5.2:设计一个切比雪夫Ⅰ型数字低通滤波器,要求:

Ws=200Hz,Wp=100Hz,Rp=3dB,Rs=30dB,Fs=1000Hz

clear all;

Wp=100;

Rp=3;

Ws=200;

Rs=30;

Fs=1000;

[N,Wn]=cheb1ord(Wp/(Fs/2),Ws/(Fs/2),Rp,Rs);

[b,a]=cheby1(N,Rp,Wn);

freqz(b,a,512,1000);

例 5.3:设计一个切比雪夫Ⅱ型数字带通滤波器,要求带通范围100-250Hz,带阻上限为300Hz,下限为50Hz,通带内纹波小于3dB,阻带纹波为30 dB,抽样频率为1000 Hz,并利用最小的阶次实现。

clear all;

Wpl=100;

Wph=250;

Wp=[Wpl,Wph];

Rp=3;

Wsl=50;

Wsh=300;

Ws=[Wsl,Wsh];

Rs=30;

Fs=1000;

[N,Wn]=cheb2ord(Wp/(Fs/2),Ws/(Fs/2),Rp,Rs);

[b,a]=cheby2(N,Rp,Wn);

freqz(b,a,512,1000);

(六)、FIR 数字滤波器设计

1、、在MATLAB 中产生窗函数十分简单:

(1)矩形窗(Rectangle Window )

调用格式:w=boxcar(n),根据长度n 产生一个矩形窗w 。

(2)三角窗(Triangular Window )

调用格式:w=triang(n) ,根据长度n 产生一个三角窗w 。

(3)汉宁窗(Hanning Window )

调用格式:w=hanning(n) ,根据长度n 产生一个汉宁窗w 。

(4)海明窗(Hamming Window )

调用格式:w=hamming(n) ,根据长度n 产生一个海明窗w 。

(5)布拉克曼窗(Blackman Window )

调用格式:w=blackman(n) ,根据长度n 产生一个布拉克曼窗w 。

(6)恺撒窗(Kaiser Window )

调用格式:w=kaiser(n,beta) ,根据长度n 和影响窗函数旁瓣的β参数产生一个恺撒窗w 。

2、基于窗函数的FIR 滤波器设计

利用MATLAB 提供的函数firl 来实现

调用格式:firl (n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2] 的矢量时,本函数将设计带通滤波器,其通带为W1<ω

例6.1: 设计一个长度为8 的线性相位FIR 滤波器。其理想幅频特性满足

1,00.4()0,j d H e else ω

ωπ≤≤?=?? Window=boxcar(8);

b=fir1(7,0.4,Window);

freqz(b,1)

例6.2:设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,w2=0.5 π

Window=blackman(16);

b=fir1(15,[0.3 0.5],Window);

freqz(b,1)

例6.3:MATLAB 中的chirp.mat 文件中存储信号y的数据,该信号的大部分号能量集中在Fs/4(或二分之一奈奎斯特)以上,试设计一个34阶的FIR 高通滤波器,滤除频率低于Fs/4的信号成分,其中滤波器的截止频率为0.48,阻带衰减为30dB ,滤波器窗采用切比雪夫窗 clear all;

load chirp

window=chebwin(35,30);

b=fir1(34,0.48,’high’,window);

yfit=filter(b,1,y);

[Py,fy]=pburg(y,10,512,Fs);

[Pyfit,fyfit]=pburg(yfit,10,512,Fs);

plot(fy,10*log10(Py),’.’,fyfit, 10*log10(Pyfit));

grid on

ylabel(‘幅度(dB)’)

xlabel(‘频率(Hz’)

legend(‘滤波前的线性调频信号’, ‘滤波后的线性调频信号’)

实验一:MATLAB语言上机操作实践

1.简单的数组赋值方法

(1)

a=[1 2 3;4 5 6;7 8 9] %给定数组a

a(4,2)=11 %给数组a的第四行第二列元素赋11

a(5,:)=[-13 -14 -15] %给数组a的第五行元素赋值

a(4,3)=abs(a(5,1)) %数组a的第四行第三列元素为第五行第一列元素的模a([2,5],:)=[] %数组a的第二行和第五行取空

a/2 %对数组a各元素对应除以2

a(4,:)=[sqrt(3) (4+5)/6*2 -7] %给数组a的第四行元素赋值

(2)

B=[1+2i,3+4i;5+6i,7+8i]

C=[1,3;5,7]+[2,4;6,8]*i

C=[1,3;5,7]+[2,4;6,8]i

D=sqrt(2+3i)%对复数2+3i求根号

D*D%对D求平方

E=C'%对C转置

F=conj(C)

G=conj(C)'

(3)

H1=ones(3,2)

H2=zeros(2,3)

H3=eye(4)

2.数组的基本运算

(1)

A=[1 3 5]

B=[2 4 6]

C=A+B

D=A-2

E=B-A

(2)

F1=A*3

F2=A.*B

F3=A./B

F4=A.\B

F5=B.\A

F6=B.^A

F7=2./B

F8=B.\2

(3)

Z1=A*B'

Z2=B'*A

3.常用函数及相应的信号波形显示

例1-1:①

t=0:0.05:3; %给建立时间数组

f=2*sin(2*pi*t); %生成函数f

plot(t,f); %用plot作连续信号的曲线

title('f(t)-t曲线'); %在图上端标注图名

xlabel('t'); %标注横坐标

ylabel('f(t)'); %标注纵坐标

t=0:0.05:3; %给建立时间数组

f=2*sin(2*pi*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图title('bar(t,f)');

练习题:

(1)

t=0:0.05:4; %给建立时间数组

f=4*exp((-2)*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图title('bar(t,f)');

(2)

t=0:0.05:3; %给建立时间数组

f=exp((-1)*t).*cos(2*pi*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图title('bar(t,f)');

(3)

k=0:0.05:10; %给建立时间数组

f=k; %生成函数f

subplot(2,2,1),plot(k,f); %建立2*2子图轴系,在图1处绘线性图title('plot(k,f)');

subplot(2,2,2),stem(k,f); %建立2*2子图轴系,在图2处绘脉冲图title('stem(k,f)');

subplot(2,2,3),stairs(k,f); %建立2*2子图轴系,在图3处绘阶梯图title('stairs(k,f)');

subplot(2,2,4),bar(k,f); %建立2*2子图轴系,在图4处绘条形图title('bar(k,f)');

(4)

k=-20:0.05:20;

f=k.*sin(k);

subplot(2,2,1),plot(k,f); %建立2*2子图轴系,在图1处绘线性图title('plot(k,f)');

subplot(2,2,2),stem(k,f); %建立2*2子图轴系,在图2处绘脉冲图title('stem(k,f)');

subplot(2,2,3),stairs(k,f); %建立2*2子图轴系,在图3处绘阶梯图title('stairs(k,f)');

subplot(2,2,4),bar(k,f); %建立2*2子图轴系,在图4处绘条形图title('bar(k,f)');

4. 简单的流程控制编程

例1-2

X=0; %给变量X赋初值0

for n=1:32 %确定循环变量及其取值范围

X=X+n^2; %循环体

end

练习题:

(1)

X=0; %给变量X赋初值0

for n=1:20 %确定循环变量及其取值范围

X=X+(2*n-1)^2; %循环体

end

(2)

X=0; %给变量X赋初值0

for n=1:99 %确定循环变量及其取值范围

X=X+n*(n+1);

end

(3)

a=[]; %定义数组a为空

a(1)=1; %给数组第一个元素赋值1

a(2)=1; %给数组第二个元素赋值1

for k=1:18 %确定循环变量及其取值范围

a(k+2)=a(k)+a(k+1); %循环体

end

实验二:时域离散信号的产生

(2)

n1=-3;n2=4;n0=0; %在起点为n1、终点为n2的范围内,于n0处产生冲激n=n1:n2; %生成离散信号的时间序列

f=[n==n0]; %建立信号f

stem(n,f,'filled'); %绘制脉冲杆图,且在圆心处用实心圆表示

title('单位脉冲序列')

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围

ylabel('f(n)');

n1=-5;n2=5;n0=0;

n=n1:n2; %生成离散信号的时间序列

f=[n>=n0]; %生成离散序列f

stem(n,f,'filled');

title('单位阶跃序列')

axis([n1 n2 0 1.1*max(f)]);%限定横坐标和纵坐标的显示范围

ylabel('幅度f(n)');

n=0:16;

f=exp((0.1+1.6*pi*j)*n); %建立信号f

stem(n,f,'fill'),grid on

xlabel('n'),title('f(n)');

n=0:20;

f=3*sin(pi/4*n); %建立信号f

stem(n,f,'fill'),xlabel('n'),grid on

title('f(n)')

axis([0,20,-3.5,3.5]); %限定横坐标和纵坐标的显示范围

n=-20:20;

f=sinc(n/5); %建立信号f

stem(n,f,'fill'),xlabel('n'),grid on

title('f(n)')

(3)

f=50;

Um=2;

nt=2; %显示周期个数

N=16; %采样点数

T=1/f; %信号周期

dt=T/N; %采样时间间隔

n=0:nt*N-1; %建立离散时间的时间序列

tn=n*dt; %确定时间序列样点在时间轴上的位置x=1+0.5*Um*sawtooth(2*f*pi*tn);%产生时域信号

subplot(2,1,1);plot(tn,x); %显示原连续信号

axis([0 nt*T 0 2]); %限定横坐标和纵坐标的显示范围ylabel('x(t)');

subplot(2,1,2);stem(tn,x); %显示经采样的信号

axis([0 nt*T 0 2]);

ylabel('x(n)');

(4)

f=200;

nt=2; %显示周期个数

Fs=4000;N=Fs/f; %求采样点数

T=1/f; %求信号周期

dt=T/N; %采样时间间隔

n=0:nt*N-1; %建立离散时间的时间序列

tn=n*dt; %确定时间序列样点在时间轴上的位置x=square(2*f*pi*tn); %产生时域信号

subplot(2,1,1);plot(tn,x); %显示原连续信号

axis([0 nt*T -1 1]); %限定横坐标和纵坐标的显示范围ylabel('x(t)');

subplot(2,1,2);stem(tn,x); %显示经采样的信号

axis([0 nt*T -1 1]);

ylabel('x(n)');

实验三:离散序列的基本运算

(2)

n1=-5;n2=5;n0=0;n3=-3;n4=4;

n=n1:n2; %生成离散信号的时间序列

f1=[n==n0]; %建立f1信号

f2=[n==n3]; %建立f2信号

f3=[n==n4]; %建立f3信号

f=f2+2*f3; %建立f信号

stem(n,f,'filled'); %画f信号的波形图

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围ylabel('f(n)');

n1=-5;n2=5;n0=0;n3=2;n4=-2;

n=n1:n2;

f1=[n>=n0]; %建立f1信号

f2=[n>=n3]; %建立f2信号

f3=[n>=n4]; %建立f3信号

f=f2+f3; %建立f信号

stem(n,f,'filled'); %画f信号的波形图

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围ylabel('f(n)');

n1=0;n2=20;n3=3;n4=-3;

n=n1:n2;

x1=3*cos(2*pi*n/10); %建立原信号x(n)

x2=3*cos(2*pi*(n-n3)/10); %建立x(n-3)信号

x3=3*cos(2*pi*(n-n4)/10); %建立x(n+3)信号

subplot(3,1,1);stem(n,x1,'filled');%画x1的波形图

ylabel('x(n)');

subplot(3,1,2);stem(n,x2,'filled');%画x(n-3)的波形图

ylabel('x(n-3)');

subplot(3,1,3);stem(n,x3,'filled');%画x(n+3)的波形图

ylabel('x(n+3)');

n1=0;n2=24;

n=n1:n2;

x1=exp((-n)/16); %建立x1(n)信号

x2=5*sin(2*pi*n/10); %建立x2(n)信号

x=x1.*x2; %建立x1(n)*x2(n)信号subplot(3,1,1);stem(n,x1,'filled');%画x1(n)的波形图

ylabel('x1(n)');

subplot(3,1,2);stem(n,x2,'filled');%画x2(n)的波形图

ylabel('x1(n)');

subplot(3,1,3);stem(n,x,'filled'); %画x1(n)*x2(n)的波形图ylabel('x(n)');

(3)

n1=0;n2=20;

n=n1:n2;

x0=n.*sin(n); %建立原信号x(n)

y1=(n-3).*sin(n-3); %建立信号x(n-3)

y2=(-n).*sin(-n); %建立信号x(-n)

y3=-(n.*sin(n)); %建立信号-x(n)

y4=(-n+3).*sin(-n+3); %建立信号x(-n+3)

y5=n/2.*sin(n/2); %建立信号x(n/2)

subplot(5,1,1);stem(n,y1,'filled');

ylabel('y1(n)=x(n-3)');

subplot(3,2,2);stem(n,y2,'filled');

ylabel('y2(n)=x(-n)');

subplot(3,2,3);stem(n,y3,'filled');

ylabel('y3(n)=-x(n)');

subplot(5,1,4);stem(n,y4,'filled');

ylabel('y4(n)=x(-n+3)');

subplot(3,2,5);stem(n,y5,'filled');

ylabel('y5(n)=x(n/2)');

(4)

n1=-4:-1;

x1=2*n1+5; %建立信号x1(n)

n2=0:4;

x2=6; %建立信号x2(n)

n=min([n1,n2]):max([n1,n2]); %为x信号建立时间序列n N=length(n); %求时间序列n的点数N

y1=zeros(1,N); %新建一维N列的y1全0数组y2=zeros(1,N); %新建一维N列的y2全0数组y1(find((n>=min(n1))&(n<=max(n1))))=x1; %为y1赋值

y2(find((n>=min(n2))&(n<=max(n2))))=x2; %为y2赋值

x=y1+y2; %建立信号x

stem(n,x,'filled');

axis([min(n),max(n),1.1*min(x),1.1*max(x)]);

n1=-4;n2=4;

n3=-4;n4=-3;n5=-2;n6=-1;n7=0;n8=1;n9=2;n10=3;n11=4;

n=n1:n2;

x1=[n==n3];%建立信号x1

f1=(-3)*x1;%建立信号f1

x2=[n==n4];

f2=(-1)*x2;

x3=[n==n5];

f3=x3;

x4=[n==n6];

f4=3*x4;

x5=[n==n7];

f5=6*x5;

x6=[n==n8];

f6=6*x6;

x7=[n==n9];

f7=6*x7;

x8=[n==n10];

f8=6*x8;

x9=[n==n11];

f9=6*x9;

f=f1+f2+f3+f4+f5+f6+f7+f8+f9;%建立信号f

stem(n,f,'filled');%画信号f的波形

ylabel('f(n)');

n1=-4:-1;

x1=2*n1+5;

n2=0:4;

x2=6;

n=min([n1,n2]):max([n1,n2]); %为x信号建立时间序列n n3=n+2;

n4=n-2;

n5=2-n;

N=length(n) %求时间序列n的点数N;

y1=zeros(1,N); %新建一维N列的y1全0数组y2=zeros(1,N); %新建一维N列的y2全0数组y1(find((n>=min(n1))&(n<=max(n1))))=x1; %为y1赋值

y2(find((n>=min(n2))&(n<=max(n2))))=x2; %为y2赋值

x=y1+y2; %建立信号x

y3=2*x %建立信号y3

y4=2*x; %建立信号y4

y5=x; %建立信号y5

subplot(3,1,1);stem(n3,y3,'filled');title('x1(n)');

axis([min(n3),max(n3),1.1*min(y3),1.1*max(y3)]);

subplot(3,1,2);stem(n4,y4,'filled');title('x2(n)');

axis([min(n4),max(n4),1.1*min(y4),1.1*max(y4)]);

subplot(3,1,3);stem(n5,y5,'filled');title('x3(n)');

axis([min(n5),max(n5),1.1*min(y5),1.1*max(y5)]);

附录一信号、系统和系统响应

1、理想采样信号序列

(1)首先产生信号x(n),0<=n<=50

n=0:50; %定义序列的长度是50

A=444.128; %设置信号有关的参数

a=50*sqrt(2.0)*pi;

T=0.001; %采样率

w0=50*sqrt(2.0)*pi;

x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*”close all %清除已经绘制的x(n)图形

subplot(3,1,1);stem(x); %绘制x(n)的图形

title(‘理想采样信号序列’);

(2)绘制信号x(n)的幅度谱和相位谱

k=-25:25;

W=(pi/12.5)*k;

X=x*(exp(-j*pi/12.5)).^(n’*k);

magX=abs(X); %绘制x(n)的幅度谱

subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);

angX=angle(X); %绘制x(n)的相位谱

subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)

(3)改变参数为:

n=0:50; %定义序列的长度是50

A=1; %设置信号有关的参数

a=0.4;

T=1; %采样率

w0=2.0734;

x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*”close all %清除已经绘制的x(n)图形

subplot(3,1,1);stem(x); %绘制x(n)的图形

title(‘理想采样信号序列’);

k=-25:25;

W=(pi/12.5)*k;

X=x*(exp(-j*pi/12.5)).^(n’*k);

magX=abs(X); %绘制x(n)的幅度谱

subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);

angX=angle(X); %绘制x(n)的相位谱

subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)

2、单位脉冲序列

在MatLab中,这一函数可以用zeros函数实现:

n=1:50; %定义序列的长度是50

x=zeros(1,50); %注意:MATLAB中数组下标从1开始

x(1)=1;

close all;

subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);

k=-25:25;

X=x*(exp(-j*pi/12.5)).^(n’*k);

magX=abs(X); %绘制x(n)的幅度谱

subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’); angX=angle(X); %绘制x(n)的相位谱

subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)

数字信号处理Matlab实现实例(推荐给学生)

数字信号处理Matlab 实现实例 第1章离散时间信号与系统 例1-1 用MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。 解 MATLAB程序如下: a=[-2 0 1 -1 3]; b=[1 2 0 -1]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c); xlabel('n'); ylabel('幅度'); 图1.1给出了卷积结果的图形,求得的结果存放在数组c中为:{-2 -4 1 3 1 5 1 -3}。 例1-2 用MATLAB计算差分方程 当输入序列为时的输出结果。 解 MATLAB程序如下: N=41; a=[0.8 -0.44 0.36 0.22]; b=[1 0.7 -0.45 -0.6]; x=[1 zeros(1,N-1)];

k=0:1:N-1; y=filter(a,b,x); stem(k,y) xlabel('n');ylabel('幅度') 图 1.2 给出了该差分方程的前41个样点的输出,即该系统的单位脉冲响应。 例1-3 用MATLAB 计算例1-2差分方程 所对应的系统函数的DTFT 。 解 例1-2差分方程所对应的系统函数为: 123 123 0.80.440.360.02()10.70.450.6z z z H z z z z -------++= +-- 其DTFT 为 23230.80.440.360.02()10.70.450.6j j j j j j j e e e H e e e e ωωωω ωωω--------++= +-- 用MATLAB 计算的程序如下: k=256; num=[0.8 -0.44 0.36 0.02]; den=[1 0.7 -0.45 -0.6]; w=0:pi/k:pi; h=freqz(num,den,w); subplot(2,2,1); plot(w/pi,real(h));grid title('实部') xlabel('\omega/\pi');ylabel('幅度')

数字信号处理实验七小信号放大器特性分析与仿真

实验七小信号放大器特性分析与仿真1,实验目的 使用matlab分析各种小信号放大器的结构、参数及特性,加深对各种小信号放大器的理解和认识 二、实验原理 小信号放大器是电子线路的重要组成部分之一,由于他工作在晶体管的线性区域之内,因此又称为线性放大器。使用MATLAB可仿真小信号放大器的各种参数,如电压增益,输入阻抗,输出阻抗,频率响应等等。 1、晶体三极管的等效电路 常见的晶体三极管等效电路有:低频h参数,共基极T型高频等效电路,混合π型高频等效电路,他们通常用于分析各种小信号晶体管放大器的特性。 共发射极h参数的等效电路如图(a)所示,它适用于对低频放大器进行分析。另外,还存在着一种简化的h参数等效电路,其中忽略晶体管内部的电压反馈系数。共发射极的h参数与各电压电流的关系为。 共基极T型高频等效电路如图(b)所示,适用于共基极高频放大电路进行分析,工作频率可达100MHZ以上。 混合π型高频等效电路如图(c)所示,适用于分析共发射极的高频发达电路。在较宽的频率范围之内,等效电路的参数和工作频率无关。另外还存在着简化的混合π型高频等效电路,其中和处于开路状态。 2、共发射极放大电路 共发射极放大电路是一种使用的最为广泛的放大电路形式,其特点是电压增益和电流增益都比较高。自定义M函数amplifl..m用来仿真共发射极放大电路,使用它可以计算该放大器的的智力参数和交流参数。该

放大器的电路如下图。 MATLAB的特点之一就是适合进行线性代数运算,因此午在分析直流参数或分析交流参数时,都可以采用基尔霍夫定理,然后采用矩阵求逆的方式求出电压和电流的具体数值,进一步便可得到该放大器的各种参数。在分析共发射极放大的交流参数时,采用的晶体管模型是低频H 参数等效电路。一般来说,每个晶体管都可以用三个节点来表示,他们分别是基极集电极和发射极。在计算交流参数过程中,忽略各电容器的容抗。 3、直接耦合放大器 在两个或三个晶体管之间进行直接耦合的放大器称为直接耦合放大器,他多用作音响系统中的前置放大器,录音机内的磁头放大器。直接耦合放大器的主要特点是工作点稳定,电压增益高,下图是一个典型的直接耦合放大电路,它有三个晶体管构成,第一级为低噪声放大,第二级为高增益放大,第三极为射随器,整个放大器的电压增益由负反馈电路确定。由于采用了串联电压负反馈,同时又使用了射随器,因此该电路具有较高的输入阻抗和较低的输出阻抗。 4、差分放大器

数字信号处理MATLAB中FFT实现

MATLAB中FFT的使用方法 说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[43267890]; Xk=fft(xn) → Xk= 39.0000-10.7782+6.2929i0-5.0000i 4.7782-7.7071i 5.0000 4.7782+7.7071i0+5.0000i-10.7782-6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf; fs=100;N=128;%采样频率和数据点数 n=0:N-1;t=n/fs;%时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);%信号 y=fft(x,N);%对信号进行快速Fourier变换 mag=abs(y);%求得Fourier变换后的振幅 f=n*fs/N;%频率序列 subplot(2,2,1),plot(f,mag);%绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2));%绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);%信号 y=fft(x,N);%对信号进行快速Fourier变换 mag=abs(y);%求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag);%绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2));%绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

数字信号处理实验

实验六: 用FFT对信号作频谱分析 一、实验目的 1.了解双音多频信号的产生、检测、包括对双音多频信号进行DFT时的参数选择等。 2.初步了解数字信号处理在是集中的使用方法和重要性。 3.掌握matlab的开发环境。 二、实验原理与方法 1、引言 双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。这些系统中用户可以用电话发送DTMF信号选择语音菜单进行操作。DTMF信号系统是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传输,其中还用到了D/A变换器;在接收端用A/D变换器将其转换成数字信号,并进行数字信号处理与识别。为了系统的检测速度并降低成本,还开发一种特殊的DFT算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。下面先介绍电话中的DTMF信号的组成。在电话中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477Hz和1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用表示。这样8个频率形成16种不同的双频信号。具体号码以及符号对应的频率如表10.6.1所示。表中最后一列在电话中暂时未用。DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播

实验一 基于Matlab的数字信号处理基本

实验一 基于Matlab 的数字信号处理基本操作 一、 实验目的:学会运用MA TLAB 表示的常用离散时间信号;学会运用MA TLAB 实现离 散时间信号的基本运算。 二、 实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。 三、 实验内容: (一) 离散时间信号在MATLAB 中的表示 离散时间信号是指在离散时刻才有定义的信号,简称离散信号,或者序列。离散序列通常用)(n x 来表示,自变量必须是整数。 离散时间信号的波形绘制在MATLAB 中一般用stem 函数。stem 函数的基本用法和plot 函数一样,它绘制的波形图的每个样本点上有一个小圆圈,默认是空心的。如果要实心,需使用参数“fill ”、“filled ”,或者参数“.”。由于MATLAB 中矩阵元素的个数有限,所以MA TLAB 只能表示一定时间范围内有限长度的序列;而对于无限序列,也只能在一定时间范围内表示出来。类似于连续时间信号,离散时间信号也有一些典型的离散时间信号。 1. 单位取样序列 单位取样序列)(n δ,也称为单位冲激序列,定义为 ) 0() 0(0 1)(≠=?? ?=n n n δ 要注意,单位冲激序列不是单位冲激函数的简单离散抽样,它在n =0处是取确定的值1。在MATLAB 中,冲激序列可以通过编写以下的impDT .m 文件来实现,即 function y=impDT(n) y=(n==0); %当参数为0时冲激为1,否则为0 调用该函数时n 必须为整数或整数向量。 【实例1-1】 利用MATLAB 的impDT 函数绘出单位冲激序列的波形图。 解:MATLAB 源程序为 >>n=-3:3; >>x=impDT(n); >>stem(n,x,'fill'),xlabel('n'),grid on >>title('单位冲激序列') >>axis([-3 3 -0.1 1.1]) 程序运行结果如图1-1所示。 图1-1 单位冲激序列

数字信号处理实验报告(实验1_4)

实验一 MATLAB 仿真软件的基本操作命令和使用方法 实验容 1、帮助命令 使用 help 命令,查找 sqrt (开方)函数的使用方法; 2、MATLAB 命令窗口 (1)在MATLAB 命令窗口直接输入命令行计算3 1)5.0sin(21+=πy 的值; (2)求多项式 p(x) = x3 + 2x+ 4的根; 3、矩阵运算 (1)矩阵的乘法 已知 A=[1 2;3 4], B=[5 5;7 8],求 A^2*B

(2)矩阵的行列式 已知A=[1 2 3;4 5 6;7 8 9],求A (3)矩阵的转置及共轭转置 已知A=[1 2 3;4 5 6;7 8 9],求A' 已知B=[5+i,2-i,1;6*i,4,9-i], 求B.' , B' (4)特征值、特征向量、特征多项式 已知A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4] ,求矩阵A的特征值、特征向量、特征多项式;

(5)使用冒号选出指定元素 已知:A=[1 2 3;4 5 6;7 8 9];求A 中第3 列前2 个元素;A 中所有列第2,3 行的元素; 4、Matlab 基本编程方法 (1)编写命令文件:计算1+2+…+n<2000 时的最大n 值;

(2)编写函数文件:分别用for 和while 循环结构编写程序,求 2 的0 到15 次幂的和。

5、MATLAB基本绘图命令 (1)绘制余弦曲线 y=cos(t),t∈[0,2π]

(2)在同一坐标系中绘制余弦曲线 y=cos(t-0.25)和正弦曲线 y=sin(t-0.5), t∈[0,2π] (3)绘制[0,4π]区间上的 x1=10sint 曲线,并要求: (a)线形为点划线、颜色为红色、数据点标记为加号; (b)坐标轴控制:显示围、刻度线、比例、网络线 (c)标注控制:坐标轴名称、标题、相应文本; >> clear;

青岛理工大学临沂年数字信号处理及MATLAB试卷

A卷

一、[15分] 1、10 2、f>=2fh

3、()()()y n x n h n =* 4、1 -az -11a 或者-z z ,a 1 -z 或1-1-az -1z 5、对称性 、 可约性 、 周期性 6、191点,256 7、典范型、级联型、并联型 8、T ω = Ω,)2 tan(2ω T = Ω或)2arctan(2T Ω=ω。 二、[20分] 1、C 2、 A 3、 C 4、C 5、B 6、D 7、B 8、A 9、D 10、A (CACCB DBADA) 三、[15分] 1、(5分) 混叠失真:不满足抽样定理的要求。 改善方法:增加记录长度 频谱泄漏:对时域截短,使频谱变宽拖尾,称为泄漏 改善方法:1)增加w (n )长度 2)缓慢截短 栅栏效应:DFT 只计算离散点(基频F0的整数倍处)的频谱,而不是连续函数。 改善方法:增加频域抽样点数N (时域补零),使谱线更密 2、(5分) 3、 (5分) IIR 滤波器: 1)系统的单位抽样相应h (n )无限长 2)系统函数H (z )在有限z 平面( )上有极点存在 3)存在输出到输入的反馈,递归型结构 Fir 滤波器: ? 1)系统的单位冲激响应h (n )在有限个n 处不为零; ? 2)系统函数 在||0 z >处收敛,在 处只有零点,即有限z 平面只有零点,而全部极点都在z =0处; ? 3)机构上主要是非递归结构,没有输入到输出的反馈,但有些结构中也包含有反馈的递归部分。 四、计算题(40分) 1、(12分)解: 解: 对上式两边取Z 变换,得: ()H z ||0z >

数字信号处理指导书matlab版

实验1 时域离散信号的产生 一、实验目的 学会运用MATLAB 产生常用离散时间信号。 二、实验涉及的matlab 子函数 1、square 功能:产生矩形波 调用格式: x=square(t);类似于sin (t ),产生周期为2*pi ,幅值为+—1的方波。 x=square(t ,duty);产生制定周期的矩形波,其中duty 用于指定脉冲宽度与整个周期的比例。 2、rand 功能:产生rand 随机信号。 调用格式: x=rand (n ,m );用于产生一组具有n 行m 列的随机信号。 三、实验原理 在时间轴的离散点上取值的信号,称为离散时间信号。通常,离散时间信号用x (n )表示,其幅度可以在某一范围内连续取值。 由于信号处理所用的设备主要是计算机或专用的信号处理芯片,均以有限的位数来表示信号的幅度,因此,信号的幅度也必须“量化”,即取离散值。我们把时间和幅度上均取离散值的信号称为时域离散信号或数字信号。 在MATLAB 中,时域离散信号可以通过编写程序直接生成,也可以通过对连续信号的等间隔抽样获得。 下面介绍常用的时域离散信号及其程序。 1、单位抽样序列 ? ? ?≠==000 1)(k k k δ MATLAB 源程序为

1) function [x,n] = impuls (n0,n1,n2) % Generates x(n) = delta(n-n0); n=n0 处建立一个单位抽样序列% [x,n] = impuls (n0,n1,n2) if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('arguments must satisfy n1 <= n0 <= n2') end n = [n1:n2]; x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))]; 将上述文件存为:impuls.m,在命令窗口输入 n0=0,n1=-10,n2=11; [x,n]=impuls (n0,n1,n2); stem(n,x,’filled’) 2)n1=-5;n2=5;n0=0; n=n1:n2; x=[n==n0]; stem(n,x,'filled','k'); axis([n1,n2,1.1*min(x),1.1*max(x)]); title('单位脉冲序列'); xlabel('时间(n)'); ylabel('幅度x(n)'); 3)n1=-5;n2=5;k=0; n=n1:n2; nt=length(n); %求n点的个数 nk=abs(k-n1)+1; %确定k在n序列中的位置 x=zeros(1,nt); %对所有样点置0 x(nk)=1; %对抽样点置1 stem(n,x,'filled','k'); axis([n1,n2,0,1.1*max(x)]); title('单位脉冲序列'); xlabel('时间(n)'); Ylabel('幅度x(n)');

数字信号处理实验

数字信号处理实验

实验一 自适应滤波器 一、实验目的 1、掌握功率谱估计方法 2、会用matlab 对功率谱进行仿真 二、实验原理 功率谱估计方法有很多种,一般分成两大类,一类是经典谱估计;另一类是现代谱估计。经典谱估计可以分成两种,一种是BT 法,另一种是周期法;BT 法是先估计自相关函数,然后将相关函数进行傅里叶变换得到功率谱函数。相应公式如下所示: ||1 *0 1 ?()()()(11) ??()(12) N m xx n jwn BT xx m r m x n x n m N P r m e --=∞ -=-∞ =+-=-∑ ∑ 周期图法是采用功率谱的另一种定义,但与BT 法是等价的,相应的功率谱估计如下所示: 21 1? ()()01 (13)N jw jwn xx n P e x n e n N N --== ≤≤--∑ 其计算框图如下所示: 观测数据x(n) FFT 取模的平方 1/N ) (jw xx e ∧ 图1.1周期图法计算用功率谱框图

由于观测数据有限,所以周期图法估计分辨率低,估计误差大。针对经典谱估计的缺点,一般有三种改进方法:平均周期图法、窗函数法和修正的周期图平均法。 三、实验要求 信号是正弦波加正态零均值白噪声,信噪比为10dB,信号频率为2kHZ,取样频率为100kHZ。 四、实验程序与实验结果 (1)用周期图法进行谱估计 A、实验程序: %用周期法进行谱估计 clear all; N1=128;%数据长度 N2=256; N3=512; N4=1024; f=2;%正弦波频率,单位为kHZ fs=100;%抽样频率,单位为kHZ n1=0:N1-1; n2=0:N2-1; n3=0:N3-1; n4=0:N4-1; a=sqrt(20);%由信噪比为10dB计算正弦信号的幅度

数字信号处理的MATLAB实现

昆明理工大学信息工程与自动化学院学生实验报告 (2011—2012 学年第二学期) 课程名称:数字信号处理开课实验室:信自楼111 2012 年 5 月 31 日年级、专业、班生医学号姓 名 成绩 实验项目名称数字信号处理的matlab 实现指导教师 教 师 评语教师签名: 年月日 一.实验目的 熟练掌握matlab的基本操作。 了解数字信号处理的MATLAB实现。 二.实验设备 安装有matlab的PC机一台。 三.实验内容 .1.求信号x(n)=cos(6.3Пn/3)+cos(9.7Пn/30)+cos(15.3Пn/30),0≤n≤29的幅度频谱. 2. 用冲击响应不变法设计一个Butterworth低通数字滤波器,要求参数为: Wp=0.2Пαp=1dB Ws=0.3Пαs=15dB 3.用双线性变换法设计一个Chebyshev高通IIR滤波器,要求参数为: Wp=0.6Пαp=1dB Ws=0.4586Пαs=15dB 4.用窗函数法设计一个低通FIR滤波器,要求参数为: Wp=0.2Пαp=0.3dB Ws=0.25Пαs=50dB 5.用频率抽样法设计一个带通FIR滤波器,要求参数为: W1s=0.2П W1p=0.35П W2p=0.65П W2s=0.8П αs=60dB αp=1dB 6.根据 4 点矩形序列,( n ) = [1 1 1 1] 。做 DTFT 变换,再做 4 点 DFT 变换。然后分别补零做 8 点 DFT 及 16 点 DFT。 7.调用filter解差分方程,由系统对u(n)的响应判断稳定性 8编制程序求解下列系统的单位冲激响应和阶跃响应。 y[n]+ 0.75y[n -1]+ 0.125y[n -2] = x[n]- x[n -1] 四.实验源程序 1. n=[0:1:29]; x=cos(6.3*pi*n/30)+cos(9.7*pi*n/30)+cos(15.3*pi*n/30);

数字信号处理MATLAB实验1

实验一熟悉MATLAB环境 一、实验目的 (1)熟悉MATLAB的主要操作命令。 (2)学会简单的矩阵输入和数据读写。 (3)掌握简单的绘图命令。 (4)用MATLAB编程并学会创建函数。 (5)观察离散系统的频率响应。 二、实验内容 认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉了MATLAB基本命令的基础上,完成以下实验。 上机实验内容: (1)数组的加、减、乘、除和乘方运算。输入A=[1234],B=[345 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出 A、B、C、D、E、F、G。 (2)用MATLAB实现以下序列。 a)x(n)=0.8n0≤n≤15 b)x(n)=e(0.2+3j)n0≤n≤15 c)x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π)0≤n≤15 (n)=x(n+16),绘出四个d)将c)中的x(n)扩展为以16为周期的函数x 16 周期。 (n)=x(n+10),绘出四个e)将c)中的x(n)扩展为以10为周期的函数x 10 周期。

(3)x(n)=[1,-1,3,5],产生并绘出下列序列的样本。 a)x 1(n)=2x(n+2)-x(n-1)-2x(n) b)∑=-=5 1k 2) k n (nx (n) x (4)绘出下列时间函数的图形,对x轴、y轴以及图形上方均须加上适当的标注。 a)x(t)=sin(2πt)0≤t≤10s b)x(t)=cos(100πt)sin(πt) 0≤t≤4s (5)编写函数stepshift(n0,n1,n2)实现u(n-n0),n1

数字信号处理基本知识点Matlab实现

数字信号处理(第二版) 绪论 1.4 MATLAB 在信号处理中的应用简介 MATLAB 是美国Mathworks 公司于1984年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理、系统仿真和图形显示于一体,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作。 MATLAB 软件包括五大通用功能:数值计算功能(Numeric ),符号运算功能(Symbolic );数据可视化功能(Graphic ),数据图形文字统一处理功能(Notebook )和建模仿真可视化功能(Simulink )。该软件有三大特点:一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks 公司已推出30多个应用工具箱。MA TLAB 在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。 2.10 离散时间信号与系统的Matlab 表示 2.10.1 离散时间信号的表示和运算 1、基本序列的Matlab 表示 单位采样序列 在MA TLAB 中,单位采样序列可以通过编写以下的DTimpulse .m 文件来实现,即 function y=DTimpulse (n) y=(n==0); %当参数为0时冲激为1,否则为0 调用该函数时n 必须为整数或整数向量。 单位阶跃序列 在MA TLAB 中,单位阶跃序列可以通过编写DTu .m 文件来实现,即 function y=DTu (n) y=n>=0; %当参数为非负时输出1 调用该函数时n 必须为整数或整数向量。 矩形序列 用MA TLAB 表示矩形序列可根据公式()()()N R n u n u n N =--并利用DTu 函数生成,即 function y=DTR(n,N) y=DTu(n)-DTu(n-N); 调用该函数时n 必须为整数或整数向量,N 必须为整数。 实指数序列 用MA TLAB 表示实指数序列()(),n x n a u n n N a R =∈∈,即

数字信号处理综合设计实验报告

数字信号处理实验八 调制解调系统的实现 一、实验目的: (1)深刻理解滤波器的设计指标及根据指标进行数字滤波器设计的过程(2)了解滤波器在通信系统中的应用 二、实验步骤: 1.通过SYSTEMVIEW软件设计与仿真工具,设计一个FIR数字带通滤波器,预先给定截止频率和在截止频率上的幅度值,通过软件设计完后,确认滤波器的阶数和系统函数,画出该滤波器的频率响应曲线,进行技术指标的验证。 建立一个两载波幅度调制与解调的通信系统,将该滤波器作为两个载波分别解调的关键部件,验证其带通的频率特性的有效性。系统框图如下: 规划整个系统,确定系统的采样频率、观测时间、细化并设计整个系统,仿真调整并不断改进达到正确调制、正确滤波、正确解调的目的。(参考文件

zhan3.svu) (1)检查滤波器的波特图,看是否达到预定要求; (2)检查幅度调制的波形以及相加后的信号的波形与频谱是否正常; (3)检查解调后的的基带信号是否正常,分析波形变形的原因和解决措施;(4)实验中必须体现带通滤波器的物理意义和在实际中的应用价值。 2.熟悉matlab中的仿真系统; 3.将1.中设计的SYSTEMVIEW(如zhan3.svu)系统移植到matlab中的仿真环境中,使其达到相同的效果; 4.或者不用仿真环境,编写程序实现该系统,并验证调制解调前后的信号是否一致。 实验总共提供三个单元的时间(6节课)给学生,由学生自行学习和自行设计与移植 三、系统设计 本系统是基于matlab的simulink仿真软件设计的基带信号调制与解调的系统,利用matlab自带的数字信号仿真模块构成其原理框图并通过设置载波、带通滤波器以及低通滤波器等把基带信号经过载波调制后再经乘法器、带通滤波器和低通滤波器等电路系统能解调出基带信号。 1、实验原理框图

蒋朝晖数字信号处理实验

《数字信号处理》实验指导书 编写蒋朝辉 中南大学信息科学与工程学院 2014年4月

目录 实验一 MATLAB仿真软件的基本操作命令和使用方法 (2) 实验二常见离散信号的MATLAB产生和图形显示 (8) 实验三离散时间系统的时域分析 (12) 实验四离散时间信号的DTFT (16)

实验一 MATLAB 仿真软件的基本操作命令和使用方法 实验内容 1、帮助命令 使用 help 命令,查找 sqrt (开方)函数的使用方法; 2、MATLAB 命令窗口 (1)在MATLAB 命令窗口直接输入命令行计算3 1)5.0sin(21+= πy 的值; (2)求多项式 p(x) = x3 + 2x+ 4的根;

3、矩阵运算 (1)矩阵的乘法 已知A=[1 2;3 4],B=[5 5;7 8],求A^2*B (2)矩阵的行列式 已知A=[1 2 3;4 5 6;7 8 9],求A (3)矩阵的转置及共轭转置 已知A=[1 2 3;4 5 6;7 8 9],求A'

已知B=[5+i,2-i,1;6*i,4,9-i], 求B.' , B' (4)特征值、特征向量、特征多项式 已知A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4] ,求矩阵A的特征值、特征向量、特征多项式; (5)使用冒号选出指定元素

已知:A=[1 2 3;4 5 6;7 8 9];求A 中第3 列前2 个元素;A 中所有列第2,3 行的元素; 4、Matlab 基本编程方法 (1)编写命令文件:计算1+2+…+n<2000 时的最大n 值; (2)编写函数文件:分别用for 和while 循环结构编写程序,求 2 的0 到15 次幂的和。

南京理工大学数字信号处理matlab上机完美版

1.已知3阶椭圆IIR数字低通滤波器的性能指标为:通带截止频率0.4π,通带波纹为0.6dB,最小阻带衰减为32dB。设计一个6阶全通滤波器对其通带的群延时进行均衡。绘制低通滤波器和级联滤波器的群延时。 %Q1_solution %ellip(N,Ap,Ast,Wp) %N--->The order of the filter %Ap-->ripple in the passband %Ast->a stopband Rs dB down from the peak value in the passband %Wp-->the passband width [be,ae]=ellip(3,0.6,32,0.4); hellip=dfilt.df2(be,ae); f=0:0.001:0.4; g=grpdelay(hellip,f,2); g1=max(g)-g; [b,a,tau]=iirgrpdelay(6,f,[0 0.4],g1); hallpass=dfilt.df2(b,a); hoverall=cascade(hallpass,hellip); hFVT=fvtool([hellip,hoverall]); set(hFVT,'Filter',[hellip,hoverall]); legend(hFVT,'Lowpass Elliptic filter','Compensated filter'); clear; [num1,den1]=ellip(3,0.6,32,0.4); [GdH,w]=grpdelay(num1,den1,512); plot(w/pi,GdH); grid xlabel('\omega/\pi'); ylabel('Group delay, samples'); F=0:0.001:0.4; g=grpdelay(num1,den1,F,2); % Equalize the passband Gd=max(g)-g; % Design the allpass delay equalizer [num2,den2]=iirgrpdelay(6,F,[0,0.4],Gd); [GdA,w] = grpdelay(num2,den2,512); hold on; plot(w/pi,GdH+GdA,'r');

基于MATLAB的数字信号处理

数字信号处理课程设计报告题目:语音数字信号处理与分析及 Matlab实现 系别通信工程 专业班级 学生姓名 学号 指导教师 提交日期

摘要 本次课程设计综合利用数字信号处理的理论知识进行语音信号的频谱分析,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。本次课程设计要求利用MATLAB对语音信号进行分析和处理,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。待处理语音信号是一个在20Hz~20kHz 频段的低频信号。采用了高效快捷的开发工具——MATLAB,实现了语音信号的采集,对语音信号加噪声及设计滤波器滤除噪声的一系列工作。利用采样原理设计了高通滤波器、低通滤波器、带通滤波器、带阻滤波器。同学通过查阅资料自己获得程序进行滤波器的设计,能过得到很好的锻炼。 关键词:MATLAB滤波器数字信号处理

目录 第一章绪论 (1) 1.1设计的目的及意义 (1) 1.2设计要求 (1) 1.3设计内容 (1) 第二章系统方案论证 (3) 2.1设计方案分析 (3) 2.2实验原理 (3) 第三章信号频谱分析 (6) 3.1原始信号及频谱分析 (6) 3.2加入干扰噪声后的信号及频谱分析 (7) 第四章数字滤波器的设计与实现 (11) 4.1高通滤波器的设计 (11) 4.2低通滤波器的设计 (12) 4.3带通滤波器的设计 (15) 4.4带阻滤波器的设计 (16) 第五章课程设计总结 (19) 参考文献 (20) 附录Ⅰ..................................................................................I 附录Ⅱ................................................................................II

数字信号处理实验仿真结果

西安电子科技大学 统计与自适应信号处理实验仿真 题目基于LMS算法的自适应滤波器的 matlab仿真 学院电子工程学院 专业电路与系统 学号 学生姓名 授课教师 撰写日期: 2012年 12 月 20 日

在自适应滤波器中,参数可调的数字滤波器一般为FIR 数字滤波器,IIR 数字滤波器或格型滤波器。图1中,()x n 表示时刻n 的输入信号,()y n 表示时刻n 的输出信号,()d n 表示时刻n 的信号或期望响应信号,()e n 表示时刻n 的误差信号。误差信号为期望响应信号()d n 与输出信号()y n 之差,记为()()()e n d n y n =-。自适应滤波器的系统参数受误差信号控制,并根据()e n 的值而自动调整,使之适合下一时刻(1)n +的输入(1)x n +,以使输出信号(1)y n +更加接近期望信号(1)d n +,并使误差信号(1)e n +进一步减小。当均方误差2[()]E e n 达到最小值时,()y n 最佳地逼近()d n ,系统已经适应了外界环境。 2.2 LMS 算法 1)2[()]E e n 与权值W 的关系 LMS 自适应滤波器通过算法,当2[()]E e n 最小时,滤波器已经调节出适合外部环境的滤波器权值W 。 我们可以先推导2[()]E e n 与加权系数W 的关系式。 写成矩阵形式: 1 0()()[()][][][()]N T T i i i y j W x j X j W W X j -====∑ (1) 误差: ()()()()[][()]T e j d j y j d j W X j =-=- (2) 则: 22 2[()][()[][()]] [()]2[()[()]][][[][()][()][]] T T T T E e n E d j W X j E d j E d j X j W E W X j X j W =-=-+ (3) 令2[][()[()]],[][[()][()]],[()](0)T dd P E d j X j R E X j X j E d j ?===代入式(3),则有: 2211 1 [()][()]2[][][][][] (0)(0)2(0) i m i T T N N N dd i m x x i x d i m i E e j E d j P W W R W WW W ???====-+=+-∑∑∑ (4) 可以从上式看出均方误差2[()]E e n 是加权系数W 的二次函数,它是一个中间上凹的超抛物线曲面,是具有唯一最小值的函数,即2[()]E e n 与W 的关系在几何上是一个“碗形”的多维曲面。为了简单,设W 是唯一的,则2[()]E e n 与W 的关系成为一个抛物线。调节加权系数W 使

数字信号处理实验 matlab版 线性相位FIR数字滤波器

实验23 线性相位FIR数字滤波器 (完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word格式会让很多部分格式错误,谢谢) XXXX学号姓名处XXXX 一、实验目的 1 加深对线性相位FIR数字滤波器特性的理解。 2 掌握线性相位滤波器符幅特性和零极点分布的研究方法。 3 了解用MATLAB研究线性相位滤波器特性时程序编写的思路和方法。 二、实验内容 1 线性相位FIR滤波器的特性 2 第一类线性相位滤波器(类型Ⅰ) 3 第二类线性相位滤波器(类型Ⅱ) 4 第三类线性相位滤波器(类型Ⅲ) 5 第四类线性相位滤波器(类型Ⅳ) 6 线性相位FIR数字滤波器零点分布特点 三、实验环境 MATLAB7.0 四、实验原理 1.线性相位FIR滤波器的特性 与IIR滤波器相比,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数为 ∑-=- = 1 N n n z h(n) H(z) 当滤波器的系数N满足一定的对称条件时,就可以获得线性相位。线性相位FIR滤波器共分为四种类型,分别为: (1)类型Ⅰ,系数对称,即h(n)=h(N-1-n),N为奇数。 (2)类型Ⅱ,系数对称,即h(n)=h(N-1-n),N为偶数。 (3)类型Ⅲ,系数反对称,即h(n)=-h(N-1-n),N为奇数。 (4)类型Ⅳ,系数反对称,即h(n)=-h(N-1-n),N为偶数。 对于上述四类线性相位FIR滤波器,参考文献[1]中提供了一段通用程序,对考虑正负号的幅度频率特性(简称符幅特性)进行求解,程序名为amplres.m,程序如下:function[A,w,type,tao]=amplres(h) N=length(h);tao=(N-1)/2; L=floor((N-1)/2); n=1:L+1; w=[0:500]*2*pi/500; if all(abs(h(n)-h(N-n+1))<1e-10)

数字信号处理MATLAB仿真(DOC)

实验一 数字信号处理的Matlab 仿真 一、实验目的 1、掌握连续信号及其MATLAB 实现方法; 2、掌握离散信号及其MATLAB 实现方法 3、掌握离散信号的基本运算方法,以及MATLAB 实现 4、了解离散傅里叶变换的MATLAB 实现 5、了解IIR 数字滤波器设计 6、了解FIR 数字滤波器设计1 二、实验设备 计算机,Matlab 软件 三、实验内容 (一)、 连续信号及其MATLAB 实现 1、 单位冲击信号 ()0,0()1,0t t t dt εεδδε-?=≠??=?>??? 例1.1:t=1/A=50时,单位脉冲序列的MATLAB 实现程序如下: clear all; t1=-0.5:0.001:0; A=50; A1=1/A; n1=length(t1); u1=zeros(1,n1); t2=0:0.001:A1;

t0=0; u2=A*stepfun(t2,t0); t3=A1:0.001:1; n3=length(t3); u3=zeros(1,n3); t=[t1 t2 t3]; u=[u1 u2 u3]; plot(t,u) axis([-0.5 1 0 A+2]) 2、 任意函数 ()()()f t f t d τδττ+∞ -∞=-? 例1.2:用MATLAB 画出如下表达式的脉冲序列 ()0.4(2)0.8(1) 1.2() 1.5(1) 1.0(2)0.7(3)f n n n n n n n δδδδδδ=-+-+++++++ clear all; t=-2:1:3; N=length(t); x=zeros(1,N); x(1)=0.4; x(2)=0.8 x(3)=1.2; x(4)=1.5; x(5)=1.0;

数字信号处理及matlab实现部分作业详解

1、把序列?????== ,01 ,20 ,1)(其他=n n n x 表示为单位阶跃之和的形式。解:) 2(2)1()( )]2()1([2)1()()1(2)()(---+=---+--=-+=n u n u n u n u n u n u n u n n n x δδ2、判断下列系统线性性、因果性、稳定性。(a))()(n nx n y =; (b)b n ax n y +=)()(,其中a ,b 为常数; 解:(a)线性性:对于两个输入序列)(1n x 和)(2n x ,相应的输出分别为)(1)(1n nx n y =) (2)(2n nx n y =这两个输出的线性组合为 ) (2)(1)](2)(1)(3n bnx n anx n by n ay n y +=+=这两个输入信号的线性组合产生的输出为 ) (2)(1)](2)(1[)](2)(1[)(4n bnx n anx n bx n ax n n bx n ax T n y +=+=+=现在)(4)(3n y n y =,所以系统为线性系统; 因果性:因为系统只与当前输入有关,所以系统是因果的; 稳定性:若)(n x 有界,即∞<≤M n x |)(|,则nM n x n n nx n y ≤≤=|)(||)(||)(|,当∞→n 时,∞→)(n y ,所以不稳定。 (b)线性性:对于两个输入序列)(1n x 和)(2n x ,相应的输出分别为 b n ax n y +=)(1)(1b n ax n y +=)(2)(2这两个输出的线性组合为 db n dax cb n cax n dy n cy n y +++=+=)(2)(1)](2)(1)(3这两个输入信号的线性组合产生的输出为 b n dax n cax b n dx n cx a n dx n cx T n y ++=++=+=)(2)(1)](2)(1[)](2)(1[)(4现在)(4)(3n y n y ≠,所以系统为非线性系统; 因果性:因为系统只与当前输入有关,所以系统是因果的; 稳定性:若)(n x 有界,即∞<≤M n x |)(|, 则|||||||)(||)(||)(|b M a b n ax b n ax n y +≤+≤+=,即|)(|n y 有界,所以稳定。 3、一个线性移不变系统的冲击响应)(n h 和输入信号)(n x 分别为 ?????=== 2 ,11 ,20 ,1)(n n n n h =,?? ???==-=1 ,30 ,21 ,1)( n n n n x =,求系统对输入的响应。 解:根据卷积公式∑-=-= 2 1)()()(k k n h k x n y ,得到?????????====-=3 ,32 ,81 ,80 ,41 ,1)(n n n n n n y =

相关主题
文本预览
相关文档 最新文档