数字信号处理课程实验报告题目:P30-2-6和P63-3-22-d信道编码专业:xxx学号:xxx姓名:xx一、书上习题运算一、实验内容2.6一个特定的线性和时不变系统,描述它的差分方程如下:y(n)+0.1y(n-1)-0.06y(n-2) = x(n)-2x(n-1)求系统脉冲响应的前10个样本。
如果此系统输入为x(n)=[5+3cos(0.2πn)+4sin(0.6πn)]μ(n),在0≤n≤20求出y(n)的响应。
3.22计算下列序列的N点循环卷积z(n)。
D x1(n)=nR N(n);x2=(N-n)R N(n);N=10二、实验程序代码2.6程序:function[x,n]=impseq(np,ns,nf)if ns>np|ns>nf|np>nferror('输入位置参数不满足ns<=np<=nf')else n=[ns:nf];x=[(n-np)==0];enda=[1,0.1,0.06];b=[1-2];x=impseq(0,0,20);h=filter(b,a,x);n=0:20;x=5+3*cos(0.2*pi*n)+4*sin(0.6*pi*n);y=conv(h,x)stem(y)3.22程序:function y=circonvt(x1,x2,N)x1=[x1,zeros(1,N-length(x1))];x2=[x2,zeros(1,N-length(x2))];m=[0:N-1];x2m=x2(mod(-m,N)+1);H=toeplitz(x2m,[0,x2(2:N)]);y=x1*H;n=0:9;x1=n;x2=10-n;y=circonvt(x1,x2,10)stem(y)三、实验结果2.63.22四、总结通过这次实验,我掌握了时域中系统的基本运算,对脉冲响应有了更深刻的了解,知道了可以用差分方程来描述线性时不变系统,知道了线性时不变系统的输出等于输入序列和该系统的脉冲响应的卷积,并顺利用matlab写出了相关程序并进行了仿真,总得来说,这次实验学到了很多。
二、数字信号处理应用实验一、实验内容信道编码:对要在信道中传送的数字信号进行的纠、检错编码。
二、实验程序代码各个子程序及其实现的基本功能。
通信过程的每个模块写成子程序函数:Channelcoding 为信道编码函数Channeldecoding 为信道解码纠错子函数Interwaving 为交积子函数Deinterwaving 为解交积子函数addfade为向信道加入衰落参数的子函数awgn 为库函数,向信源加高斯白噪声pskmod 为库函数,用于信号调制,输出为复数pskdemod 为库函数,用于信号解调信道编码子程序:sym为编码码流,G为生成矩阵,k为编码方式的长度function bitcoded=channelcoding(sym,G,k)A=vec2mat(sym,k);U=A*G;U=mod(U,2);bitcoded=reshape(U',1,[]);信道解码子程序:function bitdecoded=channeldecoding(recode,Etab,Smatrix,H,n,k)% 前向纠错函数,实现纠错功能% bidecoded为纠错后返回的比特流% recode为输入的比特流% E为错误图样表,S为对应的伴随式表% H为监督矩阵,n,k为码的类型,如(7,4)码,n=7,k=4row=length(recode)/n; %行数E=zeros(row,n); %错误图样RM=zeros(row,n); %纠错之后的矩阵R=vec2mat(recode,n);S=R*H'; %伴随矩阵S=mod(S,2);for i=1:rowfor j=1:2^(n-k) %查表纠错if(S(i,:)==Smatrix(j,:))E(i,:)=Etab(j,:);RM(i,:)=R(i,:)+E(i,:);RM(i,:)=mod(RM(i,:),2);break;endendendbitdecoded=reshape(RM',1,[]); %转化为比特流交织子程序:function retbit=interweaving(bitstream,row,col)%功能:实现对输入比特的交积% retbit为交积后返回的比特流向量% bitstream 为需要交积的比特流向量% row 和 col为交积器的行和列,% 通过改变col就可以改变交积深度retbit=zeros(1,length(bitstream));bitarr=vec2mat(bitstream,row);bitarr=bitarr';for i=1:length(bitstream)/(row*col)temp=bitarr(:,((i-1)*col+1):i*col);retbit(1,((i-1)*(row*col)+1):(i*(row*col)))=reshape(temp',1,[]);end解交织子程序:function retbits=deinterweaving(bitstream,row,col)%功能:实现对输入比特的解交积%rebits为解交积后返回的比特流% bitstream输入的比特流%row 和col为交积器的行和列,通过改变col就可以改变交积长度retbits=zeros(1,length(bitstream));bitarr=vec2mat(bitstream,col);for i=1:length(bitstream)/(row*col)temp=bitarr((i-1)*row+1:i*row,:);retbits(1,(i-1)*row*col+1:i*row*col)=reshape(temp,1,[]);end信道衰落子程序:function code=addfade(modcode,Tf,isperiod,isfade)%功能:向传输序列modcode叠加衰落性信道的衰落参数k(t)%code为加入衰减参数之后返回的序列。
% modcode为调制之后的序列% Tf 为衰落时间,以ms为单位,小于10ms,% Tf=1,表示衰落1ms % isperiod 周期衰落和一次性衰落的标志,% isperiod=1表示周期性衰落,0表示一次性衰落% isfade表示是否存在衰落,1存在,0不存在衰落直接返回modcode if(isfade==1)if(isperiod==1) %周期性衰落for k=1:length(modcode)/(100*Tf)a=(k-1)*100*Tf+31;b=(k-1)*100*Tf+30+10*Tf;modcode(1,a:b)=0.1*modcode(1,a:b);endelse %一次衰落a=31;b=30+10*Tf;modcode(1,a:b)=0.1*modcode(1,a:b);endcode=modcode;elsecode=modcode;end功能:有无信道编码性能比较M=2; %进制b=log2(M) %每符号比特数n=128*10000 %符号数G=[1 1 1 1 0 0 0;1 0 1 0 1 0 0;0 1 1 0 0 1 0;1 1 0 0 0 0 1] %生成矩阵H=[1 0 0 1 1 0 1;0 1 0 1 0 1 1;0 0 1 1 1 1 0] %监督矩阵Etab= [0 0 0 0 0 0 0;0 0 0 0 0 0 1; %错误图样0 0 0 0 0 1 0;0 0 0 0 1 0 0;0 0 0 1 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;1 0 0 0 0 0 0];Smatrix=Etab*H'; %对应的伴随式sym=randint(n,1,M);sym=de2bi(sym,'left-msb'); %模拟信源编码bitcoded=channelcoding(sym,G,4); %信道编码,(7,4)码modbit=pskmod(bitcoded,M); %在传输序列modbit加入AWGN噪声snr=0:0.2:15; %噪声为0到15dL=length(snr)ser=zeros(1,L);ser2=zeros(1,L);for k=1:Ly=awgn(modbit,10*log10(b)+snr(k),'measured');zsym=pskdemod(y,M); %复数解调zbit=de2bi(zsym,'left-msb');recode=reshape(zbit',1,[]);Rstream=recode;err=(Rstream~=bitcoded);errnum=sum(err);ser(k)=log10(errnum/length(bitcoded)); %纠错bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,7,4);err=(bitdecoded~=bitcoded);errbits=sum(err);ser2(k)=log10(errbits/(length(bitcoded)));endplot(snr,ser,'b-*')hold onplot(snr,ser2,'r-o')grid onlegend('没有信道编码','信道编码');xlabel('Eb/No(dB)');ylabel('SER');title('2PSK有无信道编码性能比较');功能:有无信道编码和交织比较M=2; %进制b=log2(M) %每符号比特数n=128*10000 %符号数interrow=8;intercol=10;%交积矩阵的行和列G=[1 1 1 1 0 0 0;1 0 1 0 1 0 0;0 1 1 0 0 1 0;1 1 0 0 0 0 1] %生成矩阵H=[1 0 0 1 1 0 1;0 1 0 1 0 1 1;0 0 1 1 1 1 0] %监督矩阵Etab= [0 0 0 0 0 0 0;0 0 0 0 0 0 1; %错误图样0 0 0 0 0 1 0;0 0 0 0 1 0 0;0 0 0 1 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;1 0 0 0 0 0 0];Smatrix=Etab*H'; %对应的伴随式sym=randint(n,1,M);sym=de2bi(sym,'left-msb'); %模拟信源编码bitcoded=channelcoding(sym,G,4); %信道编码,(7,4)码interv=interweaving(bitcoded,interrow,intercol); %交积向量modbit=pskmod(bitcoded,M);modbit2=pskmod(interv,M); %向传输序列modcode叠加衰落性信道的衰落参数k(t) modbitfade=addfade(modbit,1,1,1);modbitfade2=addfade(modbit2,1,1,1);%1ms周期性衰落modbitfade3=addfade(modbit2,2,1,1);%衰落时长2ms %在传输序列modbit加入AWGN噪声snr=0:0.2:25; %噪声为0到25dL=length(snr)ser=zeros(1,L);ser2=zeros(1,L);for k=1:L三、实验结果四、总结在较高信噪比的时候编码增益很明显大大提高了误码性能,但是在低信噪被的时候编码增益较小甚至可能是负值,则是因为编码后信息比特能量扩散到多个编码比特上,每个编码比特能量有所降低,如果信噪比低的话,编码冗余带来的性能增益可能弥补不了编码比特的能量的降低,因此信道中信噪比的波动会显著降低编码性能。