中南民族大学2014通信系统仿真期末试卷—答案
- 格式:doc
- 大小:221.00 KB
- 文档页数:14
1)简要说明仿真模型和原理;2)给出每题的源程序及说明;3)仿真结果绘图并给出简要的分析;4)报告用A4纸打印,纸质报告2014年11月28号前交到#15-809,电子档发信箱(li_zhongjie319@)。
(实验报告也一并交来)一、原始信号x(t)=2sin(2π*250t) + 3cos(2π*500t) + sin(2π*750t),采样频率f为2000Hz。
(50分)s1. 画出原始信号x(t)的波形和及其幅度谱|X(f)|;2.设计一带通滤波器,对原始信号进行滤波,保留f=500的余弦波,滤除信号中频率f=250和f=750的正弦波成分。
并画出该滤波器的幅频响应(要求:给出具体的滤波器设计,例如:采用哪一类型的滤波器、以及相应的通带截止频率、阻带截止频率、通带最大衰减和阻带最小衰减等);3.画出原始信号通过该滤波器后的波形和幅度谱。
为2000Hz,可得到离散的采样信号:解:1.根据fsn = 0 : sample_points-1;x = 2*sin(2*pi*250*1/fs*n) + 3*cos(2*pi*500*1/fs*n) + sin(2*pi*750*1/fs*n);使用[X, f] = freqz(x,1,1024,fs);得到X(f),并使用plot绘出幅度谱|X(f)|,如下图所示:2. 为了滤除f=250Hz和f=750Hz的正弦分量,保留f=500Hz的余弦分量,故需设计一款带通滤波器,我设计的滤波器指标为:通带截止频率450Hz和550Hz,阻带截止频率为350Hz和650Hz,通带波纹为0.01,阻带波纹为0.1,通带最大衰减为3dB,阻带最小衰减为60dB。
这里我使用kaiser窗函数设计了一款FIR滤波器,使用kaiserord函数估计滤波器的阶数并生成凯泽窗的系数,然后构建fir1型滤波器:[Nn, Wn, beta, ftype] = kaiserord([350,450,550,650] ,[0,1,0],[0.1,0.01,0.1],fs); hh = fir1(Nn,Wn,ftype,kaiser(Nn+1,beta),'noscale');最终使用freqz函数和plot函数绘出该BPF的幅频响应曲线[H,f1] = freqz(hh,1,1024,fs);plot(f1,20*log(abs(H)))该带通滤波器的幅频响应特性如下图所示:3. 采用filter函数来描述原始信号通过带通滤波器的过程,并绘出滤波后信号的时域特性和频域特性:y = filter(hh, 1, x);[Y, f2] = freqz(y,1,1024,fs);滤波后信号的时域波形和频域特性如下图所示:题目一的完整代码见后面附件一所示。
二、PSK频带调制通信系统仿真,信道为AWGN信道。
(50分)1.信源:原始信号s(t)=2sin(2π*t) + A(t),A(t)是在[-1 1]区间内均匀分布的随机信号,0<t<10。
对该信号进行2000点的采样,并进行量化等级为16的均匀PCM量化编码。
(要求:画出前200点的原始信号波形及量化后的波形。
)2.设计8PSK调制通信系统,对信源的输入序列进行调制及传输。
(要求:画出8PSK调制通信系统的仿真模型框图,并做表给出信号相位编码的逻辑关系。
)3.设计高斯随机噪声发生器产生高斯白噪声。
4.设计接收机对接收到的信号进行解调及检测。
5.采用蒙特卡罗仿真方法,得到在不同信噪比值SNR(0dB-10dB,间隔1dB)下的误比特率。
(要求:画出8PSK调制通信系统误比特率BER/SNR的半对数图。
)解:1. ①此题目没有给出采样率,在这里我将采样率fs设置为10Hz,必须注意到该题中A(t)是0<t<10时的随机信号,因此s(t)的完整表达式应为:首先采用A = unifrnd (-1,1,1,10*fs);生成-1到1之间均匀分布的随机信号,信号长度为10*fs个点,然后根据上述公式生成s(t)的完整信号:%产生信源信号n = 0 : 10*fs-1;A = unifrnd (-1,1,1,10*fs); %产生[-1,1]之间均匀分布的随机数s1 = 2*sin(2*pi*1/fs*n) + A; %0<t<10时,信源信号为s(t)=2sin(2π*t) + A(t) n = 10*fs : sample_points-1;s2 = 2*sin(2*pi*1/fs*n); % t>=10时,信源信号为s(t)=2sin(2π*t)s=[s1,s2]; %这是最终的前2000个点的信号②接着进行量化,题目要求为等级为16的均匀量化,根据s(t)的信号表达式,可见s(t)的值域在[-3,+3],因此量化间隔,应有17个分层电平均匀分布,取值为,应有16个输出电平位于相邻两个分层电平的中心,因此有如下代码:bits=4;v=0:2^bits;m=-3+(3+3)/2^bits*v; %17个分层电平v1=1:2^bits;p_round=m(v1)+(m(v1+1)-m(v1))/2; %16个输出电平③量化后要进行PCM编码,PCM编码采用的折叠二进制码:%PCM编码规则-折叠码code = cell(1,16);code(16)= {'1 1 1 1 '};code(15)= {'1 1 1 0 '};code(14)= {'1 1 0 1 '};code(13)= {'1 1 0 0 '};code(12)= {'1 0 1 1 '};code(11)= {'1 0 1 0 '};code(10)= {'1 0 0 1 '};code(9)= {'1 0 0 0 '};code(8)= {'0 0 0 0 '};code(7)= {'0 0 0 1 '};code(6)= {'0 0 1 0 '};code(5)= {'0 0 1 1 '};code(4)= {'0 1 0 0 '};code(3)= {'0 1 0 1 '};code(2)= {'0 1 1 0 '};code(1)= {'0 1 1 1 '};④绘出前200点的原始信号波形及量化后的波形如下图所示,可明显看出当fs=10Hz时,前100个点位于0<t<10的范围内,因此有A(t)信号的叠加,而后100个点则是纯净的正弦波:2. 8PSK调制通信系统这里采用了Matlab中的comm工具,comm.PSKModulator实现PSK调制,并将PCM量化编码后的二进制流送入comm.PSKModulator中,实现了8PSK调制,这里有个小问题,因为2000个采样点量化编码后是8000个比特,而8PSK调制要求输入的比特数为3的倍数,因此在输入流最后边补上了一个0以满足要求:hModulator = comm.PSKModulator(8,'BitInput',true); %设置为8PSK 调制方式 hModulator.PhaseOffset = pi/8; %设置8PSK 的相偏s_modData = step(hModulator, [s_code;0]); %由于原数据有8000个bit ,而8psk 调制要求信源比特数是3的倍数,因此添08PSK 调制的信号逻辑编码如下表所示:8PSK 调制的系统框图如下所示:3. 产生高斯随机白噪声这里采用了Matlab 中的awgn 函数,awgn 函数可以设置信道的信噪比,产生相应强度的噪声。
s_noisy = awgn(s_modData,snr,'measured');下图给出了原信号的星座图和加噪后信号的星座图:信源PCM 编码产生比特流将比特流进行串并转换(每3个比特分为一组)通过信号逻辑编码表形成相位映射实现8PSK 调制4. 8SPK解调和检测这里采用了Matlab中的comm工具,comm.PSKDemodulator实现PSK解调,并设置解调后的输出为比特流:hDemod = comm.PSKDemodulator(8, 'PhaseOffset',pi/8,'BitOutput',true);receivedData = step(hDemod, s_noisy);并通过[errnum,err_rate(kk)]= biterr([s_code;0],receivedData);函数统计解调后的数据的误比特率。
5. 采用蒙特卡罗方法,设置重复次数times_MonteCarlo = 100;然后取平均值,得出较为平滑的误比特率随信噪比的变化曲线,不同信噪比值SNR(0dB-10dB,间隔1dB)下的误比特率曲线如下图所示:题目二的完整代码见附件2所示。
附件1:题目1的完整代码%期末试卷第一题clcclearfs = 2000; %设置采样频率为2000Hzsample_points = 100; %设置采样点数N = 1024; %设置FFT点数n = 0 : sample_points-1;x = 2*sin(2*pi*250*1/fs*n) + 3*cos(2*pi*500*1/fs*n) + sin(2*pi*750*1/fs*n); %产生原始信号波形[X, f] = freqz(x,1,1024,fs);subplot(2,1,1)plot(n/fs,x);xlabel('time/s');ylabel('x[n]');title('x[n]时域波形');grid onsubplot(2,1,2)plot(f,abs(X)); %绘制幅频图xlabel('f/Hz');ylabel('Amplitude');title('Amplitude of X(f)');grid on%设计带通滤波器[Nn, Wn, beta, ftype] = kaiserord([350,450,550,650] ,[0,1,0],[0.1,0.01,0.1],fs);hh = fir1(Nn,Wn,ftype,kaiser(Nn+1,beta),'noscale');[H,f1] = freqz(hh,1,1024,fs);figureplot(f1,20*log(abs(H))), grid onxlabel('f/Hz');ylabel('Amplitude');title('带通滤波器的幅频响应');%将原信号通过带通滤波器y = filter(hh, 1, x);[Y, f2] = freqz(y,1,1024,fs);figuresubplot(2,1,1)plot(n/fs,y);xlabel('time/s');ylabel('y[n]');title('y[n]时域波形');grid onsubplot(2,1,2)plot(f2,abs(Y)); %绘制幅频图xlabel('f/Hz');ylabel('Amplitude');title('Amplitude of Y(f)');grid on附件2:题目2的完整代码%期末考试第2题clcclearfs = 10; %设置采样频率sample_points = 2000; %设置采样点数times_MonteCarlo = 100; %设置蒙特卡洛的迭代次数%产生信源信号n = 0 : 10*fs-1;A = unifrnd (-1,1,1,10*fs); %产生[-1,1]之间均匀分布的随机数s1 = 2*sin(2*pi*1/fs*n) + A; %0<t<10时,信源信号为s(t)=2sin(2π*t) + A(t)n = 10*fs : sample_points-1;s2 = 2*sin(2*pi*1/fs*n); % t>=10时,信源信号为s(t)=2sin(2π*t)s=[s1,s2]; %这是最终的前2000个点的信号bits=4; %16等级也就是用4bit来表示v=0:2^bits;m=-3+(3+3)/2^bits*v; %17个分层电平等间距排列v1=1:2^bits;p_round=m(v1)+(m(v1+1)-m(v1))/2; %16个输出电平%PCM编码规则-折叠码code = cell(1,16);code(16)= {'1 1 1 1 '};code(15)= {'1 1 1 0 '};code(14)= {'1 1 0 1 '};code(13)= {'1 1 0 0 '};code(12)= {'1 0 1 1 '};code(11)= {'1 0 1 0 '};code(10)= {'1 0 0 1 '};code(9)= {'1 0 0 0 '};code(8)= {'0 0 0 0 '};code(7)= {'0 0 0 1 '};code(6)= {'0 0 1 0 '};code(5)= {'0 0 1 1 '};code(4)= {'0 1 0 0 '};code(3)= {'0 1 0 1 '};code(2)= {'0 1 1 0 '};code(1)= {'0 1 1 1 '};%画原信号波形figuresubplot(2,1,1);n=0:sample_points-1;plot(n,s);grid on;title('原始信号波形');axis([0,200,-3.2,3.2]);%均匀量化,并PCM编码s_round=s;s_codeCell = cell(1,1);s_codeCell ={''};for i=1:2000for j=1:2^bitsif(s(i)>=m(j)&&s(i)<m(j+1))s_round(i)=p_round(j); %量化,根据原始信号与分层电平的对比,判决输出s_codeCell = [s_codeCell,code(j)]; %将对应的电平值转化为PCM编码end;end;end;s_codeChar = cell2mat(s_codeCell);s_code = str2num(s_codeChar);s_code = reshape(s_code,[8000,1]);subplot(2,1,2);plot(n,s_round);title('量化后的信号波形');grid on;axis([0,200,-3.2,3.2]);%8PSK调制hModulator = comm.PSKModulator(8,'BitInput',true); %设置为8PSK调制方式hModulator.PhaseOffset = pi/8; %设置8PSK 的相偏s_modData = step(hModulator, [s_code;0]); %由于原数据有8000个bit,而8psk调制要求信源比特数是3的倍数,因此添0 scatterplot(s_modData)title('8PSK调制后信号星座图');grid on;%添加高斯白噪声snr = 15;s_noisy = awgn(s_modData,snr,'measured');scatterplot(s_noisy)title('snr=15dB时加噪后信号星座图');grid on;%解调并统计误码率hDemod = comm.PSKDemodulator(8, 'PhaseOffset',pi/8,'BitOutput',true);for snr = 0:10err_rate_sum=0;for kk=1:times_MonteCarlo %蒙特卡罗仿真%添加高斯白噪声s_noisy = awgn(s_modData,snr,'measured');%解调receivedData = step(hDemod, s_noisy);[errnum,err_rate(kk)]= biterr([s_code;0],receivedData);err_rate_sum=err_rate(kk)+err_rate_sum;enderr_rate_snr(snr+1)=err_rate_sum/times_MonteCarlo;end%绘出误比特率曲线figuresnr=0:10;semilogy(snr,err_rate_snr) axis([0 10 0.0001 1]);title('误比特率曲线'); xlabel('SNR/dB');ylabel('误比特率');grid on;。