实验二:数字基带传输实验(GZHU)
Posted Cop & Bridegroom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二:数字基带传输实验(GZHU)相关的知识,希望对你有一定的参考价值。
实验二:数字基带传输实验
- 信源为长度N=1000的随机“0”,“1”序列,发送端符号速率RB=1000Baud
- 采用双极性编码;
x = randi([0,1], 1, N); % 随机生成0或者1 个数是N个
D_x = 2 * x - 1 ; % 双极性码型
- 使用升余弦脉冲成型,尝试不同滚降系数和延迟的平方根升余弦脉冲成型的效果:
(a) 固定时延delay=3,讨论滚降系数α=0.25,0.5,0.75三者的区别;
更改不同的delay(时延)和alpha(滚降系数)
使用conv()函数脉冲成型输出的是时域上的波形
之后使用fft();傅里叶变换,在取绝对值abs()后得到的是频域上的波形;因为fft后的结果是复数,复数没法作图,所以一般会用模(复数的绝对值),实部或幅角这些实数作图。所有要加上绝对值;
- 编写数字基带传输的完整Matlab实现代码,包括脉冲成型、信道、匹配接收、判决几个部分,取α=0.25,delay=5;高斯信道,信噪比为-15dB:5dB:15dB。注意发送滤波器和接收滤波器对信号产生的时延影响。请给出以下信息:snr=-10,-5,0,5,10
(a) 发送端脉冲成型后的时域波形和频域波形;
发送端脉冲成型是在平方根升余弦之后使用conv()函数,得到时间域波形,fft()函数得到频域上波形;
(b) 接收端匹配接收后的时域波形和频域波形;
接受端也是使用升余弦函数继续脉冲成型;
不过信号是使用传输信号(含有高斯白噪声的);当经过conv()函数就是脉冲成型;
© 发送和接收的信号波形对比度;
当经过抽样判决的时候得到
Rect_M = zeros(N); % 初始化一个列表,存放1/-1
for i = 1:N
if res_s(i) >0
Rect_M(i)=1;
elseif res_s(i) <0
Rect_M(i)=-1;
end
end
画出接收端抽样判决之后得到的序列 Rect_M与发送端发送的序列 D_x 的波形,两者对比。
(d) 数字基带传输的误码率
% 计算误码率 都是矩形波比较D_x和Rect_M
erro = 0;
for i =1:N
if Rect_M(i) ~= D_x(i)
erro = erro + 1;
end
end
error_lv = erro/N;
接收端误码率就是统计原始双极性码与和恢复出来的码元之间错误码元的占比;
实验性代码,没有怎么整理,错误难免!希看官轻批!
clear;
clc;
N = 1000;
x = randi([0,1], 1, N); % 随机生成0或者1
D_x = 2 * x - 1 ; % 双极性码型
Rect_p = ones(1,8); % 扩采样
%subplot(2, 1 ,1);
%stem(D_x);axis([0 200 -1 1]);title("原始波形");
x_p = kron(D_x,Rect_p); % 扩充8倍 后有解释
%subplot(2,1,1);
%stem(D_x);
%title("原始波形双极性码");axis([0 200 -1 1]);
%subplot(2, 1 ,2);
%stem(x_p);axis([0 200 -1 1]);title("扩采样波形");
fb=1000; %发送端符号速率
fs=8000; %滤波器采样频率
oversamp=fs/fb; %过采样率
delay = 5 ; %滤波器时延
alpha = 0.25; %滚降系数
erro=0;
S_N =-5; % 信噪比-10 -5 0 5 10
h_sqrt = rcosine (1, oversamp, 'fir/sqrt', alpha, delay); % %平方根升余弦滤波器 (发送端)
% 发送端时域上的波形
sendsignal_oversample=kron(D_x, [1, zeros(1, oversamp-1)]);
sendshaped=conv(sendsignal_oversample, h_sqrt); % 发送端脉冲成型
figure('name','发送端脉冲成型')
subplot(2,1,1);
stem(sendshaped);
title("时域");axis([0 200 -1 1]);
f_x = fft(sendshaped,N);
y = abs(f_x);
subplot(2,1,2);
plot(y);
title("频域");
% 高斯白噪声
x_n = awgn(sendshaped, 10, 'measured', 'db'); % 添加高斯白噪声
% 加噪声后频域上的波形
% figure('name','添加高斯白噪声后')
% 画子图,第一个
%%subplot(2, 1, 1);
%stem(sendsignal_oversample);axis([100 500 -10 15]);title("S/N:-10 接收端时间域波形");
%stem(noi_s);axis([0 200 -1 1]);title("发送端波形");
res = conv(x_n,h_sqrt); % 接收端脉冲成型
figure('name','接收端时域和频域');
subplot(2, 1, 1);
stem(res);title('时域:');axis([0 100 -3 3]);
res1 = fft(res,N);
r_ = abs(res1); % 傅里叶变换后取绝对值
subplot(2, 1, 2);
plot(r_);title('频域:');%axis([0 100 -7 7]);
% 接收端同步,抽样
% 抽样判决 两个时延*扩采样
SynPosi = delay * oversamp * 2 + 1 ;
SymPosi = SynPosi + (0:oversamp:(N - 1 ) * oversamp );
res_s = res(SymPosi) % 接收信号
Rect_M = zeros(N); % 初始化一个列表,存放1/-1
for i = 1:N
if res_s(i) >0
Rect_M(i)=1;
elseif res_s(i) <0
Rect_M(i)=-1;
end
end
figure('name','接受端抽样判决');
subplot(2,1,1);
stem(Rect_M);axis([0 200 -2 2]);
title("S_N=10 判决后波形匹配");
subplot(2,1,2);
stem(D_x);
title("原始波形双极性码");axis([0 200 -2 2]);
% 计算误码率 都是矩形波比较D_x和Rect_M
erro = 0;
for i =1:N
if Rect_M(i) ~= D_x(i)
erro = erro + 1;
end
end
error_lv = erro/N;
x_p = kron(D_x,Rect_p); % 扩充8倍 后有解释
解释:D_x :双极性码元
x_p :扩采样之后的码元
h_sqrt :平方根升余弦后的信号
sendshaped:发送端脉冲成型信号
x_n :发送端脉冲成型信号在信道传输的时候添加了高斯噪声
res :接收端脉冲成型
SynPosi = delay * oversamp * 2 + 1 ; SymPosi = SynPosi + (0:oversamp:(N - 1 ) * oversamp ); 抽样判决点这里由于发送端和接收端都存在时延,所有delay要* 2之后乘上扩采样倍数,选择合适的采样点;之后每隔扩采样点采样一次
(0:oversamp:(N - 1 ) * oversamp )%意思是从0到(N - 1 ) * oversamp 每个oversamp个采样点采样一次
最后一个就是figure(s)运行一次出现多张画布;所以对每个小题都建立一张画布。subplot(2,1,1);意思是一张画布中画多个图,这样是生成两行一列的图,现在选择第一行的图画;
plot()和stem()区别,前者是画连续图,后者是画散点图;
\\
上述两个细节看百度
以上是关于实验二:数字基带传输实验(GZHU)的主要内容,如果未能解决你的问题,请参考以下文章