匹配滤波&最大信噪比

目录

问题

LFM信号的构建

匹配滤波

 噪音分析

原理分析

 代码


问题

匹配滤波&最大信噪比_第1张图片

LFM信号的构建

我们根据其表达式,最终用matlab可以画出该信号的波形(实部和虚部)以及他的幅度谱。(代码在最后)

如下图所示,其中红色的为我们实部的LFM波形,蓝色的为我们的虚部波形,粉色的是我们的幅度谱。

匹配滤波&最大信噪比_第2张图片

匹配滤波&最大信噪比_第3张图片

匹配滤波

我们可以通过matlab对该信号进行求解,其中,卷积之后,离散的信号值会变多,因此我们也需要将我们对应的时间,和频率的点数相对应的增多。(代码在最后)

如下图所示,其中红色的为我们卷积后的信号实部的波形,蓝色的为我们的虚部波形,粉色的是我们的幅度谱。

匹配滤波&最大信噪比_第4张图片

匹配滤波&最大信噪比_第5张图片

 噪音分析

匹配滤波常用于雷达中,提高信噪比,我们可以利用matlab中自带的awgn函数去增加我们的一个噪声,其中第一个参数是我们的信号第二个参数是我们的信噪比SNR以dB为单位。(代码在最后)

下图是我们加入噪声之后的一个图像:

匹配滤波&最大信噪比_第6张图片

 下图是我们加入噪声之后经过匹配滤波的图像:

匹配滤波&最大信噪比_第7张图片

 下图是我们匹配滤波后的一个对比图片:

匹配滤波&最大信噪比_第8张图片

 下图是我们加入噪声之后的信噪比的结果图片和表格:

匹配滤波&最大信噪比_第9张图片

 

匹配滤波&最大信噪比_第10张图片

匹配滤波&最大信噪比_第11张图片

原理分析

匹配滤波&最大信噪比_第12张图片

匹配滤波&最大信噪比_第13张图片

 代码

function myfun
    T = 1e-5;%10us
    B = 4e7;%40MHz
    Fs=2*B;Ts=1/Fs;
    N=T/Ts;     %采样点数
    t=linspace(-T/2,T/2,N); 
    f=linspace(-Fs/2,Fs/2,N);
    
    
    [time_domain,noise,frequency_domain] = LFM(t);
    
    sigPower = sum(abs(time_domain).^2)/length(time_domain);             %求出信号功率
    noisePower=sum(abs(noise-time_domain).^2)/length(noise-time_domain);         %求出噪声功率
    SNR_10=10*log10(sigPower/noisePower);            %由信噪比定义求出信噪比,单位为db
    disp(SNR_10);
    
    [time_domain_h,frequency_domain_h] = h(t);
    time_domain_so = conv(time_domain,time_domain_h);
    frequency_domain_so = fftshift(fft(time_domain_so));
  
    noise_so = conv(noise,time_domain_h);
    sigPower = sum(abs(time_domain_so).^2)/length(time_domain_so);             %求出信号功率
    noisePower=sum(abs(noise_so-time_domain_so).^2)/length(noise_so-time_domain_so);         %求出噪声功率
    SNR_10=10*log10(sigPower/noisePower);            %由信噪比定义求出信噪比,单位为db
    disp(SNR_10);

    
    figure(1);
    subplot(311)
    plot(t*1e6,real(time_domain),'r');          %1e6表示10的6次幂;r的实部
    xlabel('时间 (us)');
    ylabel('Real s(t)');
    title('Real part of signal');
    subplot(312)
    plot(t*1e6,imag(time_domain),'b');          %1e6表示10的6次幂;r的实部
    xlabel('时间 (us)');
    ylabel('Imaginary s(t)');
    title('Imaginary part of signal');
    subplot(313)
    plot(f*1e-6,abs(frequency_domain),'m');          %1e6表示10的6次幂;r的实部
    xlabel('频率 (MHz)');
    ylabel('幅度');
    title('幅度谱');
    
    t=linspace(-T,T,2*N-1); 
    f=linspace(-Fs/2,Fs/2,2*N-1);
    
    figure(2);
    subplot(311)
    plot(t*1e6,real(time_domain_so),'r');          %1e6表示10的6次幂;r的实部
    xlabel('时间 (us)');
    ylabel('Real s(t)');
    title('Real part of signal');
    subplot(312)
    plot(t*1e6,imag(time_domain_so),'b');          %1e6表示10的6次幂;r的实部
    xlabel('时间 (us)');
    ylabel('Imaginary s(t)');
    title('Imaginary part of signal');
    subplot(313)
    plot(f*1e-6,abs(frequency_domain_so),'m');          %1e6表示10的6次幂;r的实部
    xlabel('频率 (MHz)');
    ylabel('幅度');
    title('幅度谱');
end

function [time_domain,noise,frequency_domain] = LFM(t)
    T = 1e-5;%10us
    fc = 0;%0Hz
    B = 4e7;%40MHz
    K = B/T;
    
    time_domain = (t<=T/2 & t>=-T/2).*exp(1i*(pi*K.*t.^2+2*pi*fc.*t));
    noise = awgn(time_domain,10);
    
    frequency_domain = fftshift(fft(time_domain));
end

function [time_domain,frequency_domain] = h(t)
    K = 1;
    [time_domain,~,~] = LFM(t);
    time_domain = K.*conj(flip(time_domain));
    frequency_domain = fftshift(fft(time_domain));
end


你可能感兴趣的:(matlab,开发语言)