您的当前位置:首页正文

MATLAB实验六

来源:一二三四网
实验报告

题目6

一、实验内容:

(提取淹没在噪声中的周期信号)提取淹没在噪声中的周期信号要求自相关(以判断周期)和互相关(以恢复信号自身)。

(a)生成信号x[n] =sin(0.1*n*pi),0n499.增加一些均匀分布的随机噪声(其噪声幅度为2,平均值为0)以得到噪声信号s[n]。作出每个信号随参数n变化的图形。是否能够从所画的x[n]中判断出任何的周期性?如果可以,求周期N。能否由所画得s[n]判断出任何周期性?

(b)求x[n]的周期自相关rpx[n]并作图。能否由所作的rpx[n]判断出任何周期性?如果可以,求周期N。这个N是否与x[n]的周期相同?

(c)利用上面所求的N值(如果没有,则由x[n]判断)生成一个500样本的冲击串i[n](nkN), 0≤n≤499。求出s[n]和i[n]的周期互相关

二、实验目的

(1)熟悉一些常用函数的生成方法。 (2)练习用matlab绘制图形。

(3)用自相关和互相关提取淹没在噪声中的周期信号。 三、实验原理

周期信号和随机信号都是功率信号(功率信号是信号功率为有限正值而信号能量无限大)。自相关函数反映了一个信号与延迟k后的同一信号的相关程度。互相关函数反映了一个信号和延迟k后的另一信号的相关程度。一个功率信号的功率谱密度与信号的自相关函数是一对傅立叶变换关系。两个相同周期的功率信号的互功率谱与他们的周期互相关是一对傅立叶变换。 四、实验步骤简述

(1)生成信号x[n] =sin(0.1*n*pi),0n499. 和增加一些均匀分布的随机噪声(其噪声幅度为2,平均值为0)以得到噪声信号s[n]。 (2)(b)求x[n]的周期自相关(自相关函数xcorr())rpx[n]并作图。并读出周期

(3) 生成一个500样本的冲击串i[n](nkN), 0≤n≤499。计算是s(n)与i(n)的互相关xcorr(s,i); 五、程序框图

六、源程序

%第六题 close all; clear all; clc;

%第一问:编写生成周期信号X,随机噪声Y,噪声信号S %编写生成周期信号X n=0:1:499;

X=sin(0.1*n*pi); subplot(8,1,1); plot(X);

title('周期信号X'); hold;

%编写生成随机噪声Y n=0:1:499;

Y=-2+4*rand(1,500); subplot(8,1,2); plot(Y);

title('随机噪声Y'); hold;

%编写生成噪声信号S S=X+Y;

subplot(8,1,3); plot(S);

title('噪声信号S'); hold;

%第二问:求源周期信号X的自相关函数rpx rpx=xcorr(X,X); subplot(8,1,4); plot(rpx);

title('X的自相关函数'); hold;

%第三问:生成500样本的冲击串函数I,求I和S的互相关函数rev I=ones(1,500); %产生500样本的冲击串I m=1;

while m<=499 m=m+1;

d=mod(m,20); if d==0

I(1,m)=1; else

I(1,m)=0; end end

subplot(8,1,5); plot(I);

title('冲击函数I');

rpi=xcorr(I,I); %求冲击串I的自相关函数 subplot(8,1,6); plot(rpi);

title('I的自相关函数'); hold;

rps=xcorr(S,S); %求噪声信号S的自相关函数rps subplot(8,1,7); plot(rps);

title('S的自相关函数'); hold;

rev=xcov(I,S); %求冲击串I与S的互相关

subplot(8,1,8) plot(rev);

title('I与S的互相关');

七、程序结果及图表

八、实验总结

通过此实验我了解到Mutlab的一些基础知识,比如自相关函数和互相关函数了解,通过学习,进一步复习了周期信号的周期性的判断,知道了函数自相关和互相关的内涵,以及它们所实现的算法实质。

作为初次使用Matlab实现信号处理的题目,在实验过程中,我还是遇到了许多问题,例如对某些Matlab函数的功能不够清晰,对

subplot,zeros,ones,figure,title等函数的功能,以及它的操作。而且要对

数字信号处理的一些相关知识也有些遗忘,所以在复习数字信号处理后,我积极的向同学和老师请教,在他们的帮助下,我顺利完成了题目要求。

题目7

一、 实验内容:

该题目的是说明一个PN扩频信号在抑制正弦干扰中的有效性。现考虑下图所示的二进制通信系统,对信号发生器的输出乘上一个二进制(1)PN序列。同一个二进制PN序列用来与解调器输入相乘,因此消除了这个PN序列在期望信号上的影响。信道将传送信号受到一宽带加性噪声序列ω(n)和一正弦干扰序列i(n)=Asinω0n, 0<ω0<π的污损。可以假定A≥M,这里M是来自调制器的每比特的样本数。用和不用PN序列执行这个仿真系统,并在条件A≥M下,对不同的M值(如M=50,100,500,1000)测量差错率。画出每种情况的差错率曲线,作比较并说明结论。说明这个PN序列对于正弦干扰信号的效果。由此说明为什么PN扩频系统在正弦干扰信号存在下优于常规的二进制通信系统。

PN序列发生器 正弦信号发生器 p(n) i(n) 二进制数据 发生器 s(n) ω(n) 噪声发生器 输出 检测器和差错记数器 p(n) PN序列发生器 二、实验目的

(1)练习使用matlab软件。

(2)说明一个PN扩频信号在抑制正弦干扰中的有效性 三、实验原理

PN是通过线性移位寄存器产生的为随机序列。扩频通信理论基础是香农的信道容量公式。他告诉我们,未达到给定的信道容量要求,可以用带宽换取信噪比,即在低信噪比条件下可以用增大带宽的方法

无误的传送给定信息。 四、实验步骤简述

(1)产生一个二进制信源序列和一个PN序列。

(2) 按每比特M个采样点进行采样将(1)中两序列映射成-1+1序列。

(3)按照框图求出输出序列并设置门限将其转化为只含有-1+1的序列。

(4) 与采样后的信源进行比较计算出信噪比和差错率。绘制出信噪比差错率的图形。

(5)不加PN时按题中框图计算出输出序列设置门限将其转化为只含有-1+1的序列。

(6)与二进制信源进行比较计算出信噪比和差错率。绘制出信噪比差错率的图形。并与加PN序列的图形比较。

(7)取不同的采样点M重复上述操作。比较不同M产生的信噪比差错率的图形。 五、程序框图

开始

调用子程序产生二进制数据序列

否 是否加PN序列

是 调用噪声子程序与信号叠加 调用PN产生子程序与信号相乘

调用噪声子程序与上输出信号叠加

调用PN产生子程序与输出信号相乘

调用差错检测程序计算信号前后差错率

调用绘图子程序绘制差错率-信噪比曲线

结束

六、源程序

function []=ti7() while(1)

fprintf('如果M输入0,则退出程序\\n');

M=input('请输入样本数M(50,100,500,1000)='); if M==0 break; else

A=input('正弦信号幅度A(A>M)='); Z=input('二进制信号幅度Zfunction []=p(A,M,Z,B) s=randout(M); r=pn(M);

for k=1:20

Z=Z+B; %使调制后的序列幅度Z大于噪声幅度B %加PN序列

g=xor(s,r)*Z; %调制(逻辑异或)差分调制 q=sinout(A,M);

re=B*wout(M); %生成噪声信号

x=g+q; %调制后序列加正弦信号 x1=re+x; %加入噪声

r2=x1>Z/3; %设置一个门限,滤除噪声 r3=xor(r2,r); %解调 i=1:M;

r4=s(i)~=r3(i); %检测 (当不等时取1 且计入r4 当相等时取0 不计入r4)

r5=length(find(r4)); %计算错误的个数(计算r4中元素取1的个数) cc(k)=r5/M; %错误的概率 %计算信号的平均功率 i=1:M; me=0;

me=me+g(i).^2; mp=me/M;

%计算噪声的平均功率 j=1:M; se=0;

se=se+q(j).^2+re(j).^2; sp=se/M; %计算信噪比

sn(k)=mp/sp;

%不加PN序列

h=s*Z; %原始信号乘幅度因子

x2=h+re+q; %信号序列加正弦信号和噪声信号(不与PN序列调制)

r6=x2>Z/3; %设置一个门限,滤除噪声 i=1:M;

r7=s(i)~=r6(i); %检测 (当不等时取1 且计入r7 当相等时取0 不计入r7)

r8=length(find(r7)); %计算错误的个数(计算r7中元素取1的个数) cd(k)=r8/M; %差错率 %计算信号的平均功率 i=1:M; ma=0;

ma=ma+h(i).^2; md=ma/M; %计算噪声的平均功率 j=1:M; sa=0;

sa=sa+q(j).^2+re(j).^2; st=sa/M;

%计算信噪比

sd(k)=md/st; end

%画信噪比与差错率曲线 figure;

stem(sn,cc,'.b'); %输出有加PN序列的图 hold on;

stem(sd,cd,'.r'); %输出没有PN序列的图 xlabel('信噪比'); ylabel('差错率');

title('信噪比与差错率曲线'); grid %二进制序列的产生

function [s]=randout(M)

s=[sign(randn(1,M))+1]/2; %利用符号函数产生原序列 %PN序列的产生

function [p]=pn(M) n=4;

a=ones(1,n); %1*n的零矩阵 a(n)=0; %令第n列数为1 for i=1:2000

y(i)=a(n); if y(i)==0 y(i)=-1; end

temp=mod(a(n-1)+a(n),2); %除法求余(与除数同号) for j=n:-1:2

a(j)=a(j-1); end

a(1)=temp; end

p=y(1:M); %取a(n)序列的最后一位元素生成pn序列

%正弦信号的产生

function [in]=sinout(A,M) w0=0.2*pi; j=1:M;

in=A*sin(w0*j); %随机噪声的产生

function [w]=wout(M)

w=rand(1,M); %1*M的0--1的均匀分布的随机数矩阵

七、程序结果及图表 M=50

M=100

M=500

M=1000

八、实验总结

实验中遇到的问题:PN序列的产生,以及对信道过程的描述。在pn序列的产生中,用到了数电里移位寄存器,是我们学到的东西得到利用。通过该实验的学习,学会了二进制序列的产生,对matlab编程有了更多的了解,通过PN的加入和去掉,对比出PN对信道的影响。

本实验考察了如何给周期信号添加噪声和提取原信号。噪声信号不能太大,否则难以恢复出原信号,采样样本数越多,差错率越小。这个试验使我复习了信号的加噪和提取的知识,而且学会了如何分析试验图表,试验技能得到很大提升,同时对matlab更加熟悉,为后续试验打下坚实基础。我相信在今后matlab的学习中会更加轻松,会更有信心。

题目9

一、 实验内容:

设有一长序列x(n)

n/5,0n50x(n)=20n/5,50n99

0,其它12n,0n2令x(n)通过一离散系统,其单位抽样响应 h(n)=

0,其它试编程序分别用重叠保留法、重叠相加法、快速卷积法实现该系统对x(n)的滤波。 二、实验目的、 (1) 熟悉重叠保留法。 (2) 熟悉重叠相加法。 (3) 熟悉快速卷积法。 三、实验原理、 重叠保留发,重叠相加法,快速卷积法都是线性卷积的一种快速算法。 重叠相加法:h序列的长度为3,x序列的长度为100.。将x序列均

分为5段,每段20个元素再每段的前端保留原来的输入序列,用DFT实现圆周卷积。

对X(n)分段题目中共有数100个则把其平均分为四段,

H(n)为三个元数,就需要相邻两段有三个点重叠。第一段给前边补充三个零。后面的三部分依次与前边的段落的后三个元数重叠。用分段后的X(n)分别于与H(n)卷积后,分别去掉前三个元数,得到的序列再一次扩充为102个元数的序列,第一个序列去掉前三个元数后赋值于扩充的序列中,第二个序列也同样的去掉前三个元数,把去掉元数的第二个元数赋值于第一个元数截止的位置处的102序列中。依次类推。完成重叠保留发的计算。

重叠保留法:对X(n)分段题目中共有数100个则把其平均分为四段,

H(n)为三个元数,。由于X(n)有25个点所以做FFT是要进行27点的运算。则分段后的X(n)与H(n)卷积时就有27个点产生,建立一个102个元数的序列,把分段后的X(n)与H(n)卷积,第一段的结果直接保留在新建的102序列中,第二个序列的前两个元数与第一段的后两个元数相加,其他数值保持不变,把此时的第二个元数赋值于第一个元数后两个位置为起点的位置处的102序列中。依次列推。完成重叠保留法。

快速卷积法:利用蝶形运算减少运算量。 四、实验步骤简述 (1) 利用定义产生X(n),H(n)序列。 (2) 利用重叠保留发的原理产生序列 (3) 利用重叠向加法的原理产生序列 (4) 利用快书卷机原理长生序列 五、程序框图

六、源程序

x=ones(1,100); %产生源代码x(n) for m=0:99

if m>=0&m<=50

x(m+1)=m/5; else

x(m+1)=20-m/5; end n=0:99; end

subplot(5,1,1); stem(n,x);

title('源序列x(n)');

h=ones(1,3); %产生抽样响应h for m=0:2

if m>=0&m<=2

h(m+1)=0.5^m; else

h(m+1)=0; end n=0:2; end

subplot(5,1,2); stem(n,h);

title('单位抽样响应h(n)');

%重叠相加法sup

%重叠相加法:从原始序列x(n)中,每长度为10截取后,将每一段与h线性卷积 %卷积后长度为12,设计起点为1,10,20„„90,则叠加后两位数据有重叠 sup=zeros(1,102); for n=1:100

d=mod(n,10); if d==0

%分段截取10个单位 chao=zeros(1,100); for li=n-9:n

chao(1,li)=1; end %结束

sec=chao.*x; %从x(n)中依次提取长为10的数据段 y=conv(sec,h); %h和sec长度为102,sec与h互相关

sup=sup+y; %sup初值为全零,sup的起始点分别是1,10,20,30„„90 end end

subplot(5,1,3); stem(sup);

title('重叠相加后的sup');

%重叠保留法,结果为kep

%重叠保留法:假设从x(n)中截取N长的数据段,N与单位抽样相应h(n)按L=N循环卷积,

%则有(3-1)个点非线性,且是循环卷积后序列的第1,第2点。 %本题取值N=4

%则每次循环卷积后,第1,2点为非线性,第3,4点为线性点

kep=zeros(1,102);

for n=0:48

mid=x(:,2*n+1:2*n+4); % 以长度4为单位从x(n)中提取数据段 cir=conv(mid,h); % 线性卷积

kep(1,2*n+3)=cir(1,3); % 提取每次线性卷积后的第3点 kep(1,2*n+4)=cir(1,4); %提取每次线性卷积后的第4点 end

subplot(5,1,4);

stem(kep);

title('重叠保留后的kep');

%用快速卷积法实现线性卷积

%原理:将两个序列分别求傅立叶变换,然后将傅立叶变换后的序列相乘 rap=fft(x,128); son=fft(h,128); ad=rap.*son; out=ifft(ad); subplot(5,1,5); stem(out);

axis([0 120 0 20]);

title('快速卷积后的out');

七、程序结果及图表

八、实验总结

通过这个实验,对快速卷积法的定义有了更深的了解,同时也对重叠保留法、重叠相加法有了初步的认识和理解。学习了使用matlab

对这三种方法的实现。本题实现了用重叠保留法`重叠相加法和快速卷积法,通过计算循环卷积,而计算出线性卷积的过程。通过运行结果的图形可以知道,用快速卷积,重叠保留法和重叠相加法计算后,输出的波形相同,即尽管运算方法不同,但是线性卷积的结果是相同的,“殊途同归”。

重叠保留法与重叠相加法的计算量差不多,但省去了重叠相加法最后的相加运算。一般来说,用FFT作信号滤波,只用于FIR滤波器阶数h(n)大于32的情况下,且取N2=(5~10)N1,这样可接近于最高效的运算。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top