デジタル信号処理-畳み込みと相関(matlab)

基础知识

R1:シーケンスの畳み込み:
c(n)= ∑_(m =-∞)^∞▒〖a(m)b(nm)〗
R2:シーケンスの相関:
c(m)= ∑_(n = -∞)^∞▒〖a(n)b(nm)〗

Matlab计算卷积与相关

(1)詳細は、「デジタル信号処理チュートリアル」第4版P53-P54「シーケンスの畳み込みと相関」を参照してください。
(2)畳み込みの定義によれば、畳み込み演算は4つのステップに分けられます。
折り畳み:b(m)をb(-m)に折り畳み、垂直軸m = 0を対称軸とします。
シフト:折り畳みb( --m)nをシフトし、b(nm)を取得し、n> 0の場合は右にシフトし、n <0の場合は左にシフトします。
乗算:同じmの対応する値でb(-m)とa(m)を乗算します。
追加:すべてを追加します。上記のmの積であり、これはnの値の下でac(n)を取得します。
異なるnに対して上記の手順を使用して、すべてのc(n)値を取得します。このアイデア(既存のMatlab関数convを使用しないでください)に従って、畳み込みのMatlab実現関数を記述します。

図1畳み込みプロセスと結果の
例:計算シーケンスa(-1)= 1、a(0)= 1、a(1)= 1(他の要素はゼロ)およびb(0)= 2、b(1) = 5、b(2)= 1(他の要素はゼロ)畳み込み。計算プロセスと結果を図1に示します。

分别利用自己编写的卷积函数与conv函数计算下列两个序列的卷积。

a(n)= {-1、0,8,9}
b(n)= {2,5、(-2)、7,10}
(1)システム独自のconv関数を使用して畳み込みを計算します

function result = conv_s(x,ux,h,uh)
x_len = length(x);
h_len = length(h);
result = conv(x,h);  %直接用系统自带函数conv计算得到卷积
u = ux(1)+uh(1):ux(x_len)+uh(h_len)  %求下标

(2)自分で作成した関数を使用して畳み込みを計算します

function result = own_conv1(x,h,ux,uh)
x_len = length(x);
h_len = length(h);
%按照向量法—矩阵乘法进行卷积运算
h_set = zeros(x_len,h_len+x_len-1);
for i = 1:x_len
    h_set(i,i:i+h_len-1) = h; %得到H矩阵 
end
result = x*h_set;  %向量相乘即完成了翻折,移位,相乘,相加四步操作得到卷积结果
u = ux(1)+uh(1):ux(x_len)+uh(h_len)
相关运算跟卷积运算不同,它没有翻褶这一个步骤,只有移位、相乘、相加三个步骤。模仿以上4步计算卷积的方法,分别计算上面两组序列的相关。
相关运算理论:

シフト:b(m)をnだけシフトしてb(n + m)を取得し、n> 0の場合は右にシフトし、n <0の場合は左にシフトします。
乗算:b(m)とa(m)を同時に乗算します。 mでの値;
追加:上記のmですべての積を合計し、nの値の下でc(n)を取得します。

a(n)= {-1、0,8,9}
b(n)= {2,5、(-2)、7,10}
理論計算結果:
相関係数:rab = c(n)= {- 10、-7,82,141,45,22,61,18}、間隔:u = -3:4
(1)自分で書いた関連する算術関数

function result = own_r_conv(x,ux,h,uh)
x_len = length(x);
h_len = length(h);
h_set = zeros(x_len,h_len+x_len-1);
%由于计算相关比卷积少了翻折,因此运算时在卷积运算基础上取消它的翻折操作
for i = 1:x_len
    h_set(i,i+h_len-1:-1:i) = h;
end
result = x*h_set;
u = ux(1)+uh(1):ux(x_len)+uh(h_len)
  1. アプリケーションの質問:レーダーの動作原理
    (1)回路図
    ここに画像の説明を挿入
    レーダーの動作プロセスは2つの部分に分けることができます:サンプリング周波数がf_s = 1⁄T_s = 0.05MHzであると仮定します
    (2)ターゲットに電磁信号を送信します
    ①生成信号を送信するここに画像の説明を挿入

s(t)は周期的な方形波信号、パルス幅はT_p =100μs、繰り返し周期はT_r = 1ms、主値周期の信号は次のように表すことができます。
ここに画像の説明を挿入
ここに画像の説明を挿入
(3)ターゲット電磁信号を受信する
ここに画像の説明を挿入
ここに画像の説明を挿入
具体的な実現matlabコードの例は次のとおりです。

%产生发射的方波信号
clear;close all;
T = 0.001;%方波周期为1ms,占空比为10%
fs = 0.4*10^6;%采样频率为0.4MHz
Ts = 1/fs;%采样周期为2.5微秒
t  = 0:Ts:2*T-Ts;
sn = (square(2*pi*t/T,10)+1)/2;
n = 0:t(end)/Ts;
figure(1);
stem(n,sn);
xlabel('时间序号 n');
ylabel('振幅');
title('采样周期方波信号');

fc = 0.1*10^6;%载频频率为0.1MHz
wc = 2*pi*fc;
pn = exp(1i*wc*t);
figure(2);
stem(n,pn);
xlabel('时间序号 n');
ylabel('振幅');
title('载频信号');

xn = sn.*pn;
figure(3);
stem(n,xn);
xlabel('时间序号 n');
ylabel('振幅');
title('调制信号');

R= 150*10^3;%距离150km
c = 3*10^8;%光速
tn = 2*R*fs/c;%延时
tn = round(tn);%四舍五入
delta_n = [zeros(1,tn),1]*10;
x_n = conv(xn,delta_n);%点目标对电磁信号的作用
N = 0:length(x_n)-1;
figure(4);
stem(N,x_n);
xlabel('时间序号 n');
ylabel('振幅');
title('点目标对电磁信号的作用');

v1n = randn(1,length(x_n));%均值为0,方差为1的高斯白噪声
v2n = randn(1,length(x_n));
vn = (v1n+1i*v2n)/sqrt(2);%加性噪声
yn = x_n + vn;
figure(5);
stem(N,yn);
xlabel('时间序号 n');
ylabel('振幅');
title('经目标散射回到天线的电磁信号');

t = 0:Ts:(length(yn) - 1)*Ts;%长度与yn保持一致
p_n = exp(-1i*wc*t);
figure(6);
stem(N,p_n);
xlabel('时间序号 n');
ylabel('振幅');
title('解调信号'); 

zn = yn.*p_n;%解调后得到的信号
figure(7);
stem(N,zn);
xlabel('时间序号 n');
ylabel('振幅');
title('解调后得到的信号'); 

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_46837674/article/details/109730304