matlab使用匹配滤波器构建相关接收机解调BPSK信号

主要步骤

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

 

成功解调,极其抗噪声

本人原创,仅供参考,用之点赞,欢迎讨论

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值