天天看點

【數字信号處理】相關函數應用 ( 使用 matlab 計算相關函數 )

文章目錄

  • ​​一、相關函數應用場景​​
  • ​​1、生成高斯白噪聲​​
  • ​​2、信噪比 SNR​​
  • ​​3、根據信噪比 SNR 求信号幅度​​
  • ​​4、産生單載波信号及最終信号​​
  • ​​5、求自相關函數及功率​​
  • ​​6、matlab 完整代碼​​

一、相關函數應用場景

求下面信号的 " 自相關函數 " :

x

(

n

)

=

sin

(

2

π

f

n

)

+

N

(

n

)

x(n) = \sin(2\pi fn) + N(n)

x(n)=sin(2πfn)+N(n)

其中

N

(

n

)

N(n)

N(n) 為 高斯白噪聲 ;

高斯白噪聲 符合 正态分布 特性 , 其 均值為

0 , 方差為

1

1

1 , 其功率譜密度是白的 , 在所有的頻率上 , 其功率都相同 ;

在上一篇部落格 【數字信号處理】相關函數應用 ( 相關函數應用場景 | 噪聲中檢測信号原理 ) 中 , 使用了公式推導的方法求相關函數 , 本篇部落格使用 matlab 求相關函數 ;

下面開始使用 matlab 計算

x

(

n

)

=

sin

(

2

π

f

n

)

+

N

(

n

)

x(n) = \sin(2\pi fn) + N(n)

x(n)=sin(2πfn)+N(n) 的相關函數 ;

1、生成高斯白噪聲

生成 高斯白噪聲 序列 , 均值 0 , 方差 1 ;

randn(1,200);      

上述代碼 生成的 高斯白噪聲 序列 是一個 有 200 個元素的行向量 ,

如果是 ​

​randn(2, 200)​

​ 代碼 , 則生成的是一個

2

×

200

2 \times 200

2×200 的矩陣 ;

2、信噪比 SNR

SNR 是信噪比 ,

P

s

P_s

Ps 是信号功率 ,

P

N

P_N

PN 是噪聲功率 , 其關系是 :

S

N

R

=

10

log

10

P

s

P

N

SNR = 10 \log_{10}\cfrac{P_s}{P_N}

SNR=10log10PNPs

在 matlab 中 , 設定信噪比為

7

7

7 ;

% 設定 信噪比 
SNR = 7;      

3、根據信噪比 SNR 求信号幅度

信号

A

sin

ω

n

A \sin \omega n

Asinωn , 其功率是

P

s

=

A

2

2

P_s = \cfrac{A^2}{2}

Ps=2A2 , 噪聲功率 是

P

N

=

1

P_N=1

PN=1 , 将其帶入到信噪比公式中 :

S

N

R

=

10

log

10

P

s

P

N

=

10

log

10

A

2

2

1

=

10

log

10

A

2

2

SNR = 10 \log_{10}\cfrac{P_s}{P_N} = 10 \log_{10}\cfrac{\cfrac{A^2}{2}}{1} = 10 \log_{10}\cfrac{A^2}{2}

SNR=10log10PNPs=10log1012A2=10log102A2

根據信噪比 計算 幅度

A

A

A :

S

N

R

10

=

l

o

g

10

A

2

2

\cfrac{SNR}{10} = log_{10}\cfrac{A^2}{2}

10SNR=log102A2

A

2

2

=

1

S

N

R

10

\cfrac{A^2}{2} = 10^{\cfrac{SNR}{10}}

2A2=1010SNR

A

2

=

2

×

1

S

N

R

10

A^2 = 2 \times 10^{\cfrac{SNR}{10}}

A2=2×1010SNR

A

=

2

×

1

S

N

R

10

A = \sqrt{2 \times 10^{\cfrac{SNR}{10}}}

A=2×1010SNR

寫成 matlab 代碼為 :

% 根據 信噪比 計算信号幅度
SignalAmplitude = sqrt( 2 * 10^(SNR/10) );      

4、産生單載波信号及最終信号

根據

A

sin

ω

n

A \sin \omega n

Asinωn 公式 , 産生 200 個信号 , 其中

A

A

A 之前已經求出 ;

% 根據 Asinωn 産生 200 個信号 
x1 = A * sin( pi * 0.165 * (0:199) );      

然後将 信号 與 高斯白噪聲疊加 :

% 信号 + 高斯白噪聲
x = x1 + xn;      

5、求自相關函數及功率

求自相關函數 , 使用 xcorr 函數 ;

% 求 x 的 自相關函數 , 長度為2N-1
y = xcorr(x, x);      

求信号功率 :

% 功率 : 自相關函數 幅度 求平均
% 自相關函數 就是 200 個功率之和
y = y / 200;      

6、matlab 完整代碼

matlab 完整代碼 :

% 清除之前的變量或記憶體
clear; 

% 生成 高斯白噪聲 序列 , 均值 0 , 方差 1
% 生成的 高斯白噪聲 序列 是一個 有 200 個元素的行向量
xn = randn(1,200); 

% 設定 信噪比 
SNR = 7;

% 根據 信噪比 計算信号幅度
A = sqrt( 2 * 10^(SNR/10) );

% 根據 Asinωn 産生 200 個信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

% 信号 + 高斯白噪聲
x = x1 + xn; 

% 求 x 的 自相關函數 , 長度為2N-1
y = xcorr(x, x); 

% 功率 : 自相關函數 幅度 求平均
% 自相關函數 就是 200 個功率之和
y = y / 200; 

%建立幕布
figure;
%繪制 "輸出序列" 圖像 , 點用上三角表示
plot(y);

% 打開網格
grid on;      

執行結果 :

繼續閱讀