数字信号处理实验报告
实验1 常见离散信号产生和实现
一、实验目的
1、加深对常用离散信号的理解;
2、熟悉使用MATLAB在时域中产生一些基本的离散时间信号。
二、实验原理
天然气ng
MATLAB 语言提供了一系列函数用来产生信号,如exp, sin, cos, square, sawtooth,ones, zeros英语广播电台等函数。
1. 基本信号序列
1) 单位抽样序列
在MATLAB中可以利用zeros()函数实现。x=[1 zeros(1, n-1)]
示范程序:carbonblack
% Program P1_1
% Generation of a Unit Sample Sequence
clf;
% Generate a vector from -10 to 20
n = -10:20;
squeezed% Generate the unit sample quence
u = [zeros(1,10) 1 zeros(1,20)];
% Plot the unit sample quence
stem(n,u);
xlabel('Time index n');ylabel('Amplitude');
title('Unit Sample Sequence');
axis([-10 20 0 1.2]);
如果在时间轴上延迟了k个单位,得到即:
2) 单位阶跃序列
在MATLAB中可以利用ones()函数实现。
3) 实指数序列
MATLAB实现:
4) 复指数序列
MATLAB实现:
5) 随机序列
MATLAB提供了两种随机信号:
rand(1,N) 产生[0,1]上均匀分布的随机矢量。
randn(1,N) 产生均值为0,方差为1的高斯随机序列,即白噪声序列。
2. 基本周期波形
1) 方波
MATLAB工具箱函数square可以产生方波;
t=0:0.1*pi:6*pi;
y=square(t);
axis([0 7*pi -1.5 1.5]);
plot(t,y);
xlabel(‘时间 t’);
ylabel(‘幅度y’);
2) 正弦波
在MATLAB中
罗马数字53) 锯齿波
工具箱函数sawtooth函数可以产生锯齿波
Fs=10000;
t=0:1/Fs:1.5; %抽样长度1.5s, 抽样频率为10kHz
x=sawtooth(2*pi*50*t); %信号频率为50Hz
plot(t, x);
axis()[0 0.2 -1 1]; %画出0.2秒的波形
3. 基本非周期波形
工具箱函数chirp能产生一种扫射频率信号,其特点是信号的瞬时频率随时间按照一定规律变化
t=0:1/1000:2 %抽样频率1kHz, 抽样时间2s.
x=chirp(t, 0.1, 150) %0时刻为DC信号,1s时频率为150Hz。
specgram(x, 256, 1000, 256, 250);
4. sinc信号
MATLAB实现:
t=linspace(-5,5);
x=sinc(t);
plot(t,x);
5. 序列的操作
1) 信号加 x(n)=x1(n)+x2(n)
MATLAB实现:
x=x1+x2;
注意:x1和x2序列应该具有相同的长度,位置对应,才能相加。
2) 信号乘 x(n)=x1(n)*x2(n)
MATLAB实现:
x=x1.*x2; %数组乘法
3) 改变比例 y(n)=k*x(n)
MATLAB实现:
y=k*x;validuntil
4) 折叠 y(n)=x(-n);
MATLAB实现:
y=fliplr(x);
5) 抽样和
MATLAB实现:
y=sum(x(n1:n2));
6) 抽样积
MATLAB实现:
y=prod(x(n1:n2));
7) 信号能量
MATLAB实现:
Ex=sum(abs(x).^2);
8) 信号功率
MATLAB实现:
Px=sum(abs(x).^2)/ N;
实验和程序:
1) 单位抽样序列
function uss(n)%构造函数
N=0:n-1
u = [1, zeros(1,n-1)];%构造矩阵
stem(N,u);
xlabel('Time index n');ylabel('Amplitude');
title('Unit Sample Sequence');
axis([-10 n 0 1.2]);
右图为取n为10的图形
2) 单位阶跃序列
function jieyue(n)%构造函数
N = -10:n-1;
u = [zeros(1,10) ones(1,n)];
stem(N,u);
xlabel('Time index n');ylabel('Amplitude');
title('Unit jump Sequence');
axis([-10 n 0 1.2]);
右图为取n为10的图形
3) 实指数序列
function index(z1,N)%构造函数
% n1=0:N;
n=0:N/2;
x=z1.^n;
stem(n,x);
xlabel('Time index n');ylabel('Amplitude');
右图为取z1=2,N=30的图形
4) 复指数序列
function findex(z1,z2)%构造函数
N=10;
n=0:N/2;
x=exp((z1+j*z2).*n);
stem(n,abs(x));
xlabel('Time index n');ylabel('Amplitude');
右图为z1=2,z2=3的图形
5) 方波
function square1(g)%G为方波的占空比
t=0:0.1:6*pi;
y=square(t,g);
plot(t,y);
xlabel('时间 t');
ylabel('幅度y');
axis([0 7*pi -1.5 1.5]); %要放在最后才可以正确显示
右图分别为G=70,G=30的图形
6)正弦波
function sin1(N,A,Fs,f,Q)%N为显示 的范围,A为幅度,
%FS为抽样频率,f为模拟信号的频率,Q为初相位
n=0:N/2;
x=A*sin(2*pi*f*n/Fs+Q)
stem(n,x);
xlabel('Time index n');ylabel('Amplitude');
axis([0 N/2 -2.5 2.5]);
右图为sin1(60,2,1000,50,10)的图形
7)锯齿波
function saw(f,F)%f为锯齿波的频率,F为间隔 %其中F不能取太大,不易观 察图形
t=0:1/F:2;
y=sawtooth(2*pi*f*t);
plot(t,y);
axis([0 2 -1.2 1.2]);
右图为saw(10,100)的图形
8)基本非周期波形
%利用chirp短裤的英文来实现
t=0:1/500:2 %抽样频率500Hz, 抽样时间2s.
x=chirp(t, 0.1, 150) %0时刻为DC信号,1s时频率为150Hz。
specgram(x, 256, 500, 256, 250);
右图分别为抽样频率为500与10000的图形
9) sinc信号shockresist
function sinc1(t1,t2,A)%[t1,t2]为定义域A为幅度
t=linspace(t1,t2);
x=A*sinc(t);
plot(t,x);
右图为[t1,t2]=[-10,10],A=2的图形
10)序列相加
function quenceplus(x1,x2)
n1=length(x1);
n2=length(x2);
n=-n1/2:(n1/2-1);
subplot(221)
stem(n,x1)
subplot(222)
stem(n,x2)
if(n1==n2) % x1,x2 的长度必须相同
x=x1+x2;
subplot(223)
stem(n,x);
axis([-n1 n1 0 2])
el error('x1与x2不一样长')
end
右图为x3=[ones(1,20),ones(1,10),ones(1,10)];
x4=[zeros(1,20),ones(1,10),zeros(1,10)];
quenceplus(x3,x4)的图形
如果输入
x3=[ones(1,10),ones(1,10),ones(1,10)];
x4=[zeros(1,20),ones(1,10),zeros(1,10)];
则会显示x1与x2不一样长
什么是sap
11)序列相 乘
function quencenmultiply(x1,x2)
n1=length(x1);
n2=length(x2);
n=-n1/2:(n1/2-1);
subplot(221)
stem(n,x1)
subplot(222)
stem(n,x2)
if(n1==n2) % x1,x2的长度必须相同
x=x1.*x2;
subplot(223)
stem(n,x);
axis([-n1 n1 0 2])
el disp('error x1与x2不一样长')
end
右图为x3=[ones(1,20),ones(1,10),ones(1,10)];
varyx4=[zeros(1,20),ones(1,10),zeros(1,10)];