西电电子信息系统综合实验二

实验内容

1.信号的采样与量化

2.信号比计算

3.滤波器设计(FIR、IIR)

4.信号滤波处理

5.信号降噪及性能评估

PS:其实可以在Matlab中的试试脚本中编写代码,这样可以添加一些有意思的插件,比如可以将采样频率设置为可以进行调节的“滑块插件”

代码如下:

采样和量化
%采样
clear,clc;
f0=2e6; %信号频率 Hz
tau=5e-6; %脉冲宽度 s
t0=0e-6; %脉冲产生时刻 s
fs=162000000; %8e6~180e6
Ts=1/fs;
t_start=0; %开始时间 s
t_end=0.000002; %结束时间 s
t=t_start:Ts:t_end;
s=sqrt(2)*sin(2*pi*f0*(t-t0)+2*pi*rand).*rect((t-t0)/tau); %生成脉冲信号
SNR=100;
Pn=1/(10^(SNR/10)); %噪声功率
para=sqrt(Pn); %噪声标准差
x=s+para*randn(size(t));


figure(1);
plot(t*1e6,s,'r-');
title('单频脉冲信号','FontSize',14);
xlabel('时间/us','FontSize',14);
ylabel('幅值/V','FontSize',14);
grid on;

figure(2);
stem(t*1e6,s);

figure(3);
plot(fftshift(abs(fft(s))));
title('单频脉冲信号频谱图','FontSize',14);
xlabel('频率','FontSize',14);
ylabel('幅值/V','FontSize',14);
grid on;

%量化
q_num=3;
tq_num=2^(q_num-1)-1;
sl=round(s/1.5*tq_num);
sl=sl/tq_num*1.5;

figure(4);
plot(t*1e6,sl,'b-');
title('单频脉冲信号');
xlabel('时间/us','FontSize',14);
ylabel('幅值/V','FontSize',14);
grid on;


sin+高斯白噪声分析

clear,clc;
f0=9e6; %信号频率
tau=1e-6;
t0=2e-6; %脉冲产生时刻
fs=20*f0;
Ts=1/fs;
t_start=0;
t_end=5e-6;
t=t_start:Ts:t_end;
s=sqrt(2)*sin(2*pi*f0*(t-t0)+2*pi*rand).*rect((t-t0)/tau); %原始信号

SNR=5;
Pn=1/(10^(SNR/10)); %噪声功率
para=sqrt(Pn); %噪声标准差
x=s+s+para*randn(size(t)); %信号+噪声

fi=[1:length(t)]-ceil(length(t)/2);
f=fi/max(fi)*fs/2; %频率位置
Fx=fft(x);

win1=hamming(length(t)); %加汉明窗
wFx=Fx.*fftshift(win1');
y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
SNR_out1=10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号

h=fir1(64,[0.09,0.11]); %设计带通滤波器
y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
SNR_out2=10*log10(1/var(y2-s));

figure; %画原始信号及原始信号+噪声
plot(t*1e6,x,'b');
hold on;
plot(t*1e6,s,'r--');
title('单脉冲信号');
xlabel('时间/us',"FontSize",14);
ylabel('幅值/V',"FontSize",14);
grid on;

figure;
plot(f/1e6,fftshift(abs(Fx)),'b');
hold on;
plot(f/1e6,fftshift(abs(fft(s))),'r--');
title('单频脉冲信号频谱图');
xlabel('频率/Mhz',"FontSize",14);
ylabel('幅值/V',"FontSize",14);

figure;
plot(t*1e6,y1,'b');
hold on;
plot(t*1e6,y2,'r--')
title('单脉冲信号通过汉明窗/fir1后信号',"FontSize",14);
xlabel('时间/us',"FontSize",14);
ylabel('幅值/V',"FontSize",14);
grid on;

figure;
plot(f/1e6,fftshift(abs(wFx)),'b');
hold on;
plot(f/1e6,fftshift(abs(fft(y2))),'r--');
title('单频脉冲信号过汉明窗/fir1后频谱图');
xlabel('频率/Mhz',"FontSize",14);
ylabel('幅值/V',"FontSize",14);



BPSK+高斯白噪声分析

clear,clc;
f0=4e6; %信号频率
tau=1e-6; %脉冲宽度,s
N=7; %一个码组中码片的个数为7
t0=2e-6; %脉冲产生时刻
code=[1,1,1,-1,-1,1,-1];
fs=20*f0; %采样频率
Ts=1/fs;
t_start=0;
t_end=15e-6;
t=t_start:Ts:t_end;
s=zeros(1,round((t_end-t_start)*fs)+1); %round取整
for n=1:N
    s=s+code(n)*rect((t-t0-(n-1)*tau)/tau).*sin(2*pi*f0*(t-t0));
end
SNR=5;
Pn=1/(10^(SNR/10)); %噪声功率
para=sqrt(Pn); %噪声标准差
x=s+para*randn(size(t));

fi=[1:length(t)]-ceil(length(t)/2);
f=fi/max(fi)*fs/2; %频率位置
Fx=fft(x);

win1=hamming(length(t)); %加汉明窗
wFx=Fx.*fftshift(win1');
y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
SNR_out1=10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号

h=fir1(64,[0.09,0.11]); %设计带通滤波器
y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
SNR_out2=10*log10(1/var(y2-s));

figure;
plot(t*1e6,x,'b');
hold on;
plot(t*1e6,s,'r--');
title('BPSK信号');
xlabel('时间/us',"FontSize",14);
ylabel('幅值/V',"FontSize",14);
grid on;

figure;
plot(f/1e6,fftshift(abs(Fx)),'b');
hold on;
plot(f/1e6,fftshift(abs(fft(s))),'r--');
title('BPSK信号频谱图');
xlabel('频率/Mhz',"FontSize",14);
ylabel('幅值/V',"FontSize",14);

figure;
plot(t*1e6,y1,'b');
hold on;
plot(t*1e6,y2,'r--')
title('BPSK信号通过汉明窗/fir1后信号',"FontSize",14);
xlabel('时间/us',"FontSize",14);
ylabel('幅值/V',"FontSize",14);
grid on;

figure;
plot(f/1e6,fftshift(abs(wFx)),'b');
hold on;
plot(f/1e6,fftshift(abs(fft(y2))),'r--');
title('BPSK信号过汉明窗/fir1后频谱图');
xlabel('频率/Mhz',"FontSize",14);
ylabel('幅值/V',"FontSize",14);



BPSK SNR_in+SNR_out

f0=4e6; %信号频率
tau=1e-6; %脉冲宽度,s
N=7; %一个码组中码片的个数为7
t0=2e-6; %脉冲产生时刻
code=[1,1,1,-1,-1,1,-1];
fs=20*f0; %采样频率
Ts=1/fs;
t_start=0;
t_end=15e-6;
t=t_start:Ts:t_end;
s=zeros(1,round((t_end-t_start)*fs)+1); %round取整
for n=1:N
    s=s+code(n)*rect((t-t0-(n-1)*tau)/tau).*sin(2*pi*f0*(t-t0));
end


SNR=-20:1:25;

SNRin1=[];
SNRout1=[];
SNRin2=[];
SNRout2=[];

% for i=1:length(SNR)
%     Pn=1/(10^(SNR(i)/10)); %噪声功率
%     para=sqrt(Pn); %噪声标准差
%     x=s+para*randn(size(t));
% 
%     fi=[1:length(t)]-ceil(length(t)/2);
%     f=fi/max(fi)*fs/2; %频率位置
%     Fx=fft(x);
% 
%     win1=hamming(length(t)); %加汉明窗
%     wFx=Fx.*fftshift(win1');
%     y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
%     SNR_out1=10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号
% 
%     h=fir1(64,[0.09,0.11]); %设计带通滤波器
%     y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
%     SNR_out2=10*log10(1/var(y2-s));
%     
% %     SNRin1(i)=snr(s,x-s);
% %     SNRout1(i)=snr(y1,y1-s);
% %     SNRout2(i)=snr(y2,y2-s);
%     SNRin1(i)=SNR(i);
%     SNRout1(i)=SNR_out1;
%     SNRout2(i)=SNR_out2;
% 
% end

for i=1:length(SNR)
    SNR_out1=0;
    SNR_out2=0;
    for j=1:100
        Pn=1/(10^(SNR(i)/10)); %噪声功率
        para=sqrt(Pn); %噪声标准差
        x=s+para*randn(size(t));

        fi=[1:length(t)]-ceil(length(t)/2);
        f=fi/max(fi)*fs/2; %频率位置
        Fx=fft(x);

        win1=hamming(length(t)); %加汉明窗
        wFx=Fx.*fftshift(win1');
        y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
        SNR_out1=SNR_out1+10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号

        h=fir1(64,[0.09,0.11]); %设计带通滤波器
        y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
        SNR_out2=SNR_out2+10*log10(1/var(y2-s));
    end
    
%     SNRin1(i)=snr(s,x-s);
%     SNRout1(i)=snr(y1,y1-s);
%     SNRout2(i)=snr(y2,y2-s);
    SNRin1(i)=SNR(i);
    SNRout1(i)=SNR_out1/100;
    SNRout2(i)=SNR_out2/100;

end


figure;
plot(SNRin1,SNRout1);
title('BPSK信号FFT滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');
figure;
plot(SNRin1,SNRout2);
title('BPSK信号Fir滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');



sin SNR_in+SNR_out
f0=9e6; %信号频率
tau=1e-6;
t0=2e-6; %脉冲产生时刻
fs=20*f0;
Ts=1/fs;
t_start=0;
t_end=5e-6;
t=t_start:Ts:t_end;
s=sqrt(2)*sin(2*pi*f0*(t-t0)+2*pi*rand).*rect((t-t0)/tau); %原始信号

SNR=-20:1:25;

for i=1:length(SNR)
    for j=100
        SNR_out1=0;
        SNR_out2=0;
    
        Pn=1/(10^(SNR(i)/10)); %噪声功率
        para=sqrt(Pn); %噪声标准差
        x=s+para*randn(size(t));

        fi=[1:length(t)]-ceil(length(t)/2);
        f=fi/max(fi)*fs/2; %频率位置
        Fx=fft(x);

        win1=hamming(length(t)); %加汉明窗
        wFx=Fx.*fftshift(win1');
        y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
        SNR_out1=SNR_out1+10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号

        h=fir1(64,[0.09,0.11]); %设计带通滤波器
        y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
        SNR_out2=SNR_out2+10*log10(1/var(y2-s));
    end
    
    SNRin1(i)=SNR(i);
    SNRout1(i)=SNR_out1/100;
    SNRout2(i)=SNR_out2/100;
end

figure;
plot(SNRin1,SNRout1);
title('sin信号FFT滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');
figure;
plot(SNRin1,SNRout2);
title('sin信号Fir滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');



LFM SNR_in+SNR_out
f1=4e6;%信号初始频率(单位:Hz)
f2=15e6;%信号终止频率(单位:Hz)
tau=3e-6;%脉冲宽度(单位:s)
u=(f2-f1)/tau;%调频斜率(单位:Hz/s)
t0=1.5e-6;%脉冲产生时刻(单位:s)
fs=20*f2;
Ts=1/fs;
t_start=0;%开始时间(单位:s)
t_end=6e-6;%结束时间(单位:s)
t=t_start:Ts:t_end;
s=sin(2*pi*(f1*(t-t0)+0.5*u*(t-t0).^2)).*rect((t-t0)/tau);

SNR=-20:1:25;

for i=1:length(SNR)
    Pn=1/(10^(SNR(i)/10)); %噪声功率
    para=sqrt(Pn); %噪声标准差
    x=s+s+para*randn(size(t)); %信号+噪声

    fi=[1:length(t)]-ceil(length(t)/2);
    f=fi/max(fi)*fs/2; %频率位置
    Fx=fft(x);

    win1=hamming(length(t)); %加汉明窗
    wFx=Fx.*fftshift(win1');
    y1=real(ifft(wFx)); %滤波器后的结果,real返回实部
    SNR_out1=10*log10(1/var(y1-s)); %y1-s是滤波后的信号减去原信号

    h=fir1(64,[0.09,0.11]); %设计带通滤波器
    y2=imfilter(x,h); %滤波后的结果,imfilter函数对任意类型数组或多维图像进行滤波
    SNR_out2=10*log10(1/var(y2-s));
    
    SNRin1(i)=SNR(i);
    SNRout1(i)=SNR_out1;
    SNRout2(i)=SNR_out2;
end

figure;
plot(SNRin1,SNRout1);
title('LFM信号FFT滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');
figure;
plot(SNRin1,SNRout2);
title('LFM信号Fir滤波噪声系数');
xlabel('SNRin');
ylabel('SNRout');


function y = rect(x, D)
% function y = rect(x, D)
if nargin == 1, D = 1;
    x = abs(x);
    y = double(x<D/2);
    y(x == D/2) = 0.5;
end
end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值