主要步骤
1.根据数字信号产生模拟的bpsk信号
2.将数据输入匹配滤波器进行解调
clc
clear all
N=200; %序列长度
L=512; %FFT的点数
f1=100;fsam=10000; %载波频率f1,与采样频率fsam
T=1/fsam; %抽样间隔
wsam=2*pi*fsam; %抽样角频率
t1=(0:N-1)*T; %时域横坐标
x1=50*sin(2*pi*f1*t1); %抽样
x2=fft(x1,L); %进行L点的FFT运算
x3=fftshift(x2); %以fsam/2为轴交换左右
x4=abs(x3); %取模值
f=(-wsam/2+(0:L-1)*wsam/L)/(2*pi); %频域横坐标
%下面用数字信号产生BPSK信号------------------------------------------------------------------------------------------------------------
psk_wave=[];
carry_wave_1=x1; %数字信号为1时的载波
carry_wave_2=-x1; %数字信号为0时的载波
digital_signal=[0 1 0 0 1 1 0 0 1 0]; %数字信号
%产生BPSK信号
for i=1:length(digital_signal)
if digital_signal(i)==1
psk_wave=[psk_wave,carry_wave_1];
else
psk_wave=[psk_wave,carry_wave_2];
end
end
%看载波信号的时域图和频谱
figure(1);
subplot(4,1,1);plot(t1,carry_wave_1);title('载波1的时域图'); %画出载波1时域图像
subplot(4,1,2);plot(f,abs(fftshift(fft(carry_wave_1,L))));title('载波1的频域图'); %画出载波1频域图像,幅值乘2除以N可以得到真实幅值
subplot(4,1,3);plot(t1,carry_wave_2);title('载波2的时域图'); %画出载波2时域图像
subplot(4,1,4);plot(f,abs(fftshift(fft(carry_wave_2,L))));title('载波2的频域图'); %画出载波2频域图像
%看持续10个码元的BPSK信号的时域图
figure(2);
t2=0:(length(digital_signal)*N-1);
plot(t2,psk_wave);title('BPSK信号的时域图'); %psk_wave是10个码元相接的信号,长度为2000
%举个例子看看载波1信号通过载波1信号专用匹配滤波器的情况。-------------------------------------------------------------------------------
ht1=fliplr(carry_wave_1); %匹配滤波器的冲激响应,原信号镜像翻转即可
st1=conv(carry_wave_1,ht1); %冲激响应与输入信号进行卷积,理论上在时域末尾出现最大值
t4=(0:(2*N-2))*T;
st1_fft=abs(fftshift(fft(st1,L))); %看看卷积后输出信号的频谱
figure(3);
subplot(4,1,1);plot(t1,carry_wave_1);title('载波1的时域图'); %输入信号的时域图
subplot(4,1,2);plot(t1,ht1);title('载波1的匹配滤波器时域图') %匹配滤波器的时域图
subplot(4,1,3);plot(t4,st1);title('输出信号的时域图') %输出信号的时域图
subplot(4,1,4);plot(f,st1_fft);title('输出信号的频谱图') %输出信号的频谱
%举个例子看看载波2信号通过载波1信号专用匹配滤波器啥情况。-------------------------------------------------------------------------------
ht2=fliplr(carry_wave_1); %匹配滤波器的冲激响应,原信号镜像翻转即可
st2=conv(carry_wave_2,ht2); %冲激响应与输入信号进行卷积,理论上在时域末尾出现最大值
t5=(0:(2*N-2))*T;
st2_fft=abs(fftshift(fft(st2,L))); %看看卷积后输出信号的频谱
figure(4);
subplot(4,1,1);plot(t1,carry_wave_2);title('载波2的时域图') %输入信号的时域图
subplot(4,1,2);plot(t1,ht2);title('载波1的匹配滤波器时域图') %匹配滤波器的时域图
subplot(4,1,3);plot(t5,st2);title('输出信号时域图') %输出信号的时域图
subplot(4,1,4);plot(f,st2_fft);title('输出信号频谱图') %输出信号的频谱
%举个例子看看完全不匹配的信号通过载波1信号专用匹配滤波器的情况。------------------------------------------------------------------------
wave_no_fit=[];
for i=1:N
wave_no_fit(i)=psk_wave(i+N/2);
end
ht3=fliplr(carry_wave_1); %匹配滤波器的冲激响应,原信号镜像翻转即可
st3=conv(wave_no_fit,ht3); %冲激响应与输入信号进行卷积,理论上在时域末尾出现最大值
t6=(0:(2*N-2))*T;
st3_fft=abs(fftshift(fft(st3,L))); %看看卷积后输出信号的频谱
figure(5);
subplot(4,1,1);plot(t1,wave_no_fit);title('不匹配信号的时域图') %输入信号的时域图
subplot(4,1,2);plot(t1,ht3);title('载波1的匹配滤波器时域图') %匹配滤波器的时域图
subplot(4,1,3);plot(t6,st3);title('输出信号时域图') %输出信号的时域图
subplot(4,1,4);plot(f,st3_fft);title('输出信号频谱图') %输出信号的频谱
%下面为使用匹配滤波器设计最佳接收机对BPSK信号进行解调。---------------------------------------------------------------------------------
%假设输入信号为确知信号,知道码元宽度以及起点的情况,每200个点进行一次匹配滤波。
ht_psk_1=fliplr(carry_wave_1); %载波1的匹配滤波器冲激响应。
ht_psk_2=fliplr(carry_wave_2); %载波2的匹配滤波器冲激响应。
y=[];
st_psk_1_show=[];
st_psk_2_show=[];
for i=1:length(digital_signal)
for j=1:N
psk_single(j)=psk_wave((i-1)*N+j); %此处可以添加白噪声,任意大都不影响判决结果。
end
st_psk_1=conv(psk_single,ht_psk_1);
st_psk_2=conv(psk_single,ht_psk_2); %对输入的BPSK信号分别使用两个匹配滤波器滤波
if st_psk_1(N)>st_psk_2(N) %抽样判决
y(i)=1;
else
y(i)=0;
end
st_psk_1_show=[st_psk_1_show,st_psk_1];
st_psk_2_show=[st_psk_2_show,st_psk_2];
end
%分别通过两个匹配滤波器的输出信号
figure(6);
subplot(2,1,1);plot(st_psk_1_show); title('载波1的匹配滤波器输出信号');
subplot(2,1,2);plot(st_psk_2_show); title('载波2的匹配滤波器输出信号');
%输出匹配滤波器解调后的数字信号
y
%假设输入信号为确知信号,知道码元宽度以及起点的情况,每输入一个点都进行一次匹配滤波。----------------------------------------------------
ht_psk_1=fliplr(carry_wave_1); %载波1的匹配滤波器冲激响应。
ht_psk_2=fliplr(carry_wave_2); %载波2的匹配滤波器冲激响应。
%将psk_wave的末尾补N个零
psk_wave_extend=[];
for i=1:(length(digital_signal)*N+N)
if i>=1 && i<=length(digital_signal)*N
psk_wave_extend(i)=psk_wave(i);
else
psk_wave_extend(i)=0;
end
end
%临时变量初始设置N个0
psk_temp_1=[];
for i=1:N+1
psk_temp_1(i)=0;
end
%每输入一个psk数据都进行匹配滤波
psk_temp_2=[];
st_psk_3=[]; %匹配滤波后的信号
st_psk_3_N=[]; %每次匹配滤波后的信号取出第N个数据
st_psk_4=[]; %匹配滤波后的信号
st_psk_4_N=[]; %每次匹配滤波后的信号取出第N个数据
for i=1:(length(digital_signal)*N+N)
for j=1:N
psk_temp_1(j)=psk_temp_1(j+1); %临时数组中数据左移一位
end
psk_temp_1(j)=psk_wave_extend(i); %最后一位补上psk信号输入
for k=1:N
psk_temp_2(k)=psk_temp_1(k); %取出前N位数据用来匹配滤波
end
st_psk_3=conv(psk_temp_2,ht_psk_1);
st_psk_3_N(i)=st_psk_3(N); %只取出匹配滤波能量集中点N的值
st_psk_4=conv(psk_temp_2,ht_psk_2);
st_psk_4_N(i)=st_psk_4(N);
end
for i=1:length(digital_signal) %解调出数字信号
if st_psk_3_N(i*N)>st_psk_4_N(i*N)
z(i)=1;
else
z(i)=0;
end
end
figure(7);
subplot(2,1,1);plot(st_psk_3_N); title('载波1的匹配滤波器输出信号');
subplot(2,1,2);plot(st_psk_4_N); title('载波2的匹配滤波器输出信号');
%输出解调后的数字信号
z
成功解调,极其抗噪声
本人原创,仅供参考,用之点赞,欢迎讨论