赞
踩
针对2ASK调制使用相干解调法:对整个过程进行分析
相比实验二:数字基带传输实验(GZHU) 这里只是增加了调制和解调两个部分,同时对于2ASK 这里选择的码型是单极性不归零码型;剩下的部分跟实验二是一样的;调制方法:包络法和模拟相乘法进行调制和相干解调;
采用Matlab对数字调制解调系统进行搭建并仿真,基本参数设置如下:
1. 信源为长度N=1000的随机“0”、“1”序列,发送端符号速率RB=1000Baud;
2. 基带数字信号根据具体调制方式采用合适的基带编码;
3. 发送端的发送滤波器采用平方根升余弦滤波器,采样频率fs=16000Hz,滚降系数α=0.25,延迟delay=5;
4. 信道为awgn信道,信噪比snr=-5dB、5dB;
5. 接收端的低通滤波器采用平方根升余弦滤波器进行匹配滤波;
请实验仿真并给出以下信息:、
代码:跟实验二不同的是信号在输入信道前进行调制,输出信道后进行解调,剩下的都是跟实验二一样!
fc = 4000; % 载波频率
% f_up = 2000 % 上分支载波频率
% f_down = 4000 % 下分支载波频率
x_len = length(x_shaped); % 发送信号长度
ln = 0:x_len - 1;
t = ln/fs; % 时间t 2ASK调制
cari_x = cos(2*pi*fc*t); % 载波
m_x_c = x_shaped .* cari_x; % 模拟相乘法进行调制
m_x_c_n = awgn(m_x_c, snr, 'measured', 'db'); % 添加高斯白噪声
1
相干解调
x_c_n = m_x_c_n .* cari_x; % 与同频率相乘 .*
1
脉冲成型
res = conv(x_c_n, h_sqrt); % 接收端脉冲成型,滤波器还是使用平方根升余弦
1
接收端同步抽样
% 抽样同步 SynPosi = delay * oversamp * 2 + 1; % 两个时延*过采样率 SymPosi = SynPosi + (0:oversamp:(N-1) * oversamp); % 采样点 res_signl = res(SymPosi); % 接收端采样信号 判决 for i = 1:N if res_signl(i) > 0.5 res_match(i) = 1; elseif res_signl(i) <= 0.5 res_match(i) = 0; end end
计算误码率
for i = 1:N
if res_match(i) ~= s_nrz(i)
c_error = c_error
end
end
:
fc : 载波频率
cari_x : 载波
m_x_c : 调制后信号
m_x_c_n : 调制后信号在信道上添加高斯白噪声
x_c_n : 接收端解调后信号
res : 经过卷积后的接收端信号,此时已经是低频信号
res_signl : 经过抽样判决后的信号
res_match: 接收通过判决匹配信号
c_error : 错误码元个数
elv : 误码率
基带信号有码间串扰,那么调制信道是否有码间串扰?
有,只要是带限信道就会产生码间串扰
怎么避免码间串扰呢?
组成 一起就能避免码间串扰!
单极性不归零码
因为如果选择双极性码型的时候,表示0或者1的正弦波的幅度的绝对值是相等;而单极性表示0或者1的时候表示1是正弦波,表示0是0;
这是因为载波的是将基带信号搬移到载波频谱上,所以是将每个基带信号与载波对应元素进行相乘,而乘法是矩阵乘法,也就是mxn维度*nxm维度,点乘是nxm维度*nxm维度;
6. 接受端解调
解调方法:相干解调和包络解调(以下是相干解调)
就是将经过载波的信号通过相乘器(与载波信号(同频同相)进行相乘),进行简单的频谱搬移,之后通过低通滤波器将高频成分过滤,得到的就是基带信号的低频成分;
选择0.5,因为使用的是单极性码元
在2ASP的基础上进修改
将2ASK的码型由原来的单极性不归零码改为双极性不归零码
修改接受端的判别阈值有原来的0.5修改为0
不发生倒pi现象:
不发生倒pi现象:
carri_x_1 = cos(2 * pi * fc * t + pi); %接收端在倒pi现象
对接收端载波进行一个pi相位的偏移部分代码:
ln = 0:length(x_shaped) - 1; t = ln / fs; carri_x_1 = cos(2*pi*fc*t + pi); % 接受端的载波比发送端的载波在时域上多个pi单位 发送端载波 cari_x = cos(2*pi*fc*t); x_c_n_1 = m_x_c_n .* carri_x_1; %乘以与发送端同频不同相的载波 figure('name', '倒pi接收端'); subplot(2,1,1),plot(x_c_n_1); axis([0 800 -1 1]); %时域波形 title('----时域'); f_x_c_n_1 = fft(x_c_n_1, N); %傅里叶变换 f_x_c_n_1_abs = abs(f_x_c_n_1); %取绝对值 subplot(2,1,2),plot(f,f_x_c_n_1_abs); %频域波形 title('----频域'); %时域上卷积滤波 res1 = conv(x_c_n_1, h_sqrt); %频域乘积,时域卷积 figure('name', '2PSK相干解调'); subplot(2,1,1),plot(res1);axis([0 800 -1 1]); %接收端时域波形 title('----倒π时域'); f_res1 = fft(res1, N); %傅里叶变换 f_res1_abs = abs(f_res1); %取绝对值 subplot(2,1,2),plot(f,f_res1_abs); title('----倒π频域'); grid on; %接收端同步 res_signal1 = res1(SymPosi); %倒π现象 %接收端采样 res_match1 = zeros(length(res_signal1)); %初始化一个长度为 N 的全零数组,存放接收端抽样判决得到的码元 for i = 1:N if res_signal1(i) > 0 res_match1(i) = 1; elseif res_signal1(i) <= 0 res_match1(i) = -1; end end figure('name', '----2PSK匹配波形'); subplot(2,1,1),stem(D_x);axis([0 100 -1 1]); title('----原始波形'); subplot(2,1,2),stem(res_match1);axis([0 100 -1 1]); title('----2PSK抽样判决波形'); RecBit2 = zeros(N); %误码率 error = 0; %求误码率方法1 % for j = 1:N % if RecBit2(j) ~= D_x(j) % error = error + 1; % end % end % elv1 = error / N; %sprintf('误码率:%0.5f% ',elv1); % 方法2: [error, radio] = symerr(RecBit2,D_x) sprintf('错误码元数量:%d ',error); sprintf('误码率:%0.5f%',radio);
实验完整代码:后续…
【2ASK】:https://download.csdn.net/download/zcw1234515/19547248
【2FSK】:https://download.csdn.net/download/zcw1234515/19547258
【2PSK】:https://download.csdn.net/download/zcw1234515/19547270
github[本来先把代码放github避免下载花积分,后来知道原来可以把下载积分设置为0]
参考文献:
[1] 基于MATLAB仿真的模拟乘法器AM波分析
[2]讲解傅里叶变换的知乎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。