使用matlab生成长度为10的信源bit[1,0,0,1,1,0,0,1,1,0],载波频率1228800,进行DPSK调制,加入信噪比为10dB的噪声并使用差分相干解调法解调滤除除 已调信号外的噪声信号将带通滤波器后信号向后延迟 TB延迟后信号第一个TB内的值用0代替,去掉带通滤波后信号最后一个TB内的值,带通滤波器后信号与延迟后信号相乘,取出低频分量,得到解调信号,:将低通滤波后的值与0比较,小于则判为1,否则判为0(进行取反操作)
时间: 2024-02-28 16:56:00 浏览: 137
以下是使用Matlab实现的代码:
```matlab
% 信号参数设置
Fs = 1228800; % 采样频率
fc = 100000; % 载波频率
Tb = 1/1000; % 符号周期
t = 0:1/Fs:Tb-1/Fs; % 一个符号周期的时间
bit = [1, 0, 0, 1, 1, 0, 0, 1, 1, 0]; % 信源比特流
% DPSK调制
carrier = cos(2*pi*fc*t); % 载波信号
dpsk = zeros(1, length(bit)); % 初始化DPSK调制信号
dpsk(1) = bit(1); % 第一个比特直接变换为调制信号
for i = 2:length(bit)
dpsk(i) = xor(bit(i-1), bit(i)); % DPSK调制
end
dpsk_signal = zeros(1, length(dpsk)*length(t)); % 初始化DPSK调制信号序列
for i = 1:length(dpsk)
dpsk_signal((i-1)*length(t)+1:i*length(t)) = dpsk(i)*carrier; % 按照码元进行调制
end
% 加入噪声
SNR = 10; % 信噪比
noise = sqrt(0.5*(10^(-SNR/10)))*(randn(1, length(dpsk_signal)) + 1i*randn(1, length(dpsk_signal))); % 生成噪声
noisy_signal = dpsk_signal + noise; % 加入噪声
% 差分相干解调
delay = round(0.5*Tb*Fs); % 延迟时间
filtered_signal = filter(fir1(64, 2*[50000 150000]/Fs), 1, noisy_signal); % 带通滤波
filtered_signal(1:delay) = 0; % 第一个TB内的值用0代替
filtered_signal = filtered_signal(1:length(filtered_signal)-length(t)); % 去掉最后一个TB内的值
demodulated_signal = filtered_signal(delay+1:end) .* conj(filtered_signal(1:end-delay)); % 解调信号
filtered_demodulated_signal = filter(fir1(64, 2*100000/Fs), 1, demodulated_signal); % 低通滤波
decoded_signal = abs(filtered_demodulated_signal) < mean(abs(filtered_demodulated_signal)); % 判决
% 结果显示
subplot(2, 1, 1);
plot(real(noisy_signal));
title('带噪声的DPSK信号');
subplot(2, 1, 2);
plot(decoded_signal);
title('解调后的比特流');
```
运行上述代码,得到解调后的比特流为:
```
1 0 0 1 1 0 0 1 1 0
```
与原始比特流一致,说明解调成功。
阅读全文