信号のパワースペクトルを分析するウィンドウを追加する間接的な方法

     

       この記事は、ブロガーがコミュニケーションその他の分野を勉強していた際に、個人的な勉強、研究、鑑賞のために記録した研究の抜粋およびメモであり、ブロガーのコミュニケーションその他の分野に対する理解に基づいたものであり、不適切な内容や権利侵害があった場合は、ご指摘がございましたら速やかに修正させていただきますので、ご理解賜りますようお願い申し上げます。コミュニケーション分野における記事分類 注   

          通信分野のメモ(3) ---「信号パワースペクトルの間接法と窓解析」

信号のパワースペクトルを分析するウィンドウを追加する間接的な方法

目次

1. 設計要件

2. 理論的な分析と導出

 2.1 間接法の理論分析

 2.2 窓関数の理論解析

3. シミュレーションと結果分析

3.1.1 5 つの窓関数の時間領域と周波数領域の比較

3.1.2 5 つの窓関数によるトランケーションのスペクトル漏れの違い

3.1.3 パワースペクトルを計算するための 5 つの窓関数


1. 設計要件


2. 理論的な分析と導出

2.1 間接法の理論分析

        ウィーナー ジンチンの定理は、ランダム信号の相関関数とそのパワー スペクトルが 1 組のフーリエ変換であると述べています。BT 法はこの原理に基づいています。まず、観測データから自己相関関数を推定し、その自己相関関数をフーリエ変換し、これをパワースペクトルの推定値とする方法で、間接法とも呼ばれます。BT法では信号長N以外の信号がゼロであることが要求され、これもBT法の限界となる。

  2.2 窓関数の理論解析

        信号が入力されると、調査のために信号の一部をインターセプトする必要がありますが、これはウィンドウを追加することで実現できます (ウィンドウの長さがインターセプト長になります)。ただし、後で傍受した信号のスペクトルを調べるため、これに対してフーリエ変換を実行する必要があります。フーリエ変換は正と負の無限大に作用するため、最初に傍受した信号の周期的拡張を実行する必要があります。

        このとき、全周期傍受の場合は周期拡張後も元の信号が残るため、スペクトル漏洩は発生しませんが、非整数周期傍受または信号が周期信号ではない場合はスペクトル漏洩が発生しません。まったく、傍受された信号は信号全体を表すことができず、周期拡張後の信号は、スペクトルの各サイクルが接続される場所に高次の高調波が現れ、ギブス現象が発生し、スペクトル漏れが発生します。

        これは、スペクトル漏れを減らすために窓関数を選択する方法の問題に拡張できます。つまり、窓関数スペクトルのメインローブはできるだけ狭く、サイドローブの減衰はできるだけ大きくする必要があります。ただし、両方を持つことはできないため、実際のニーズに応じてウィンドウ関数を選択する必要があります。窓関数のメインローブが狭いほど周波数識別精度は高く、サイドローブの減衰が大きいほど振幅識別精度は高くなります。

        各 FFT 変換では限られた長さの時間領域データのみを変換できるため、時間領域信号を切り詰める必要があります。周期信号であっても、打ち切り時間の長さが周期の整数倍でない場合(周期打ち切り)、傍受した信号に漏れが発生します。この漏れ誤差を最小限に抑えるには、ウィンドウ関数とも呼ばれる重み付け関数を使用する必要があります。

        ウィンドウを追加する主な目的は、時間領域信号が FFT 処理の周期的要件をよりよく満たしているように見せ、漏れを減らすことです。窓関数の本質は、時間領域で入力信号を乗算し、周波数領域で入力信号と畳み込むことです。よく使用される 5 つのウィンドウ関数 (長方形ウィンドウ、ハミング ウィンドウ、ハニング ウィンドウ、ブラックマン ウィンドウ、カイザー ウィンドウ) を分析してシミュレートします。

         この窓関数は時間領域で扁平楕円に近似し、周波数領域でのメインローブのエネルギーとサイドローブのエネルギーの比を最大化します。他のウィンドウ関数と比較して、Caesar ウィンドウの特徴は、メインローブとサイドローブの幅を同時に調整できることです。たとえば、 βが増加すると、相対的なサイドローブの減衰は減少しますが、メインローブの幅は増加します。


3. シミュレーションと結果分析

3.1.1 5 つの窓関数の時間領域と周波数領域の比較

5 つのウィンドウ関数のサイド ローブの高さとメイン ローブの幅を比較します。

 周波数領域図から、大から小までのサイドローブの減衰の程度は次のとおりであることがわかります。

        Blackman ウィンドウ>Hanning ウィンドウ>Hanming ウィンドウ>長方形ウィンドウ>Caesar ウィンドウ

主なローブの幅は最大から最小まで次のとおりです。

        長方形ウィンドウ > カイザー ウィンドウ > ハミング ウィンドウ > ハニング ウィンドウ > ブラックマン ウィンドウ

        メインローブ幅が増加すると、スペクトル分解能が低下します。したがって、窓関数の場合、スペクトル分解能とサイドローブ減衰を同時に達成することはできません。

3.1.2 5 つの窓関数によるトランケーションのスペクトル漏れの違い

 

 3.1.3 パワースペクトルを計算するための 5 つの窓関数

間接法とウィンドウ解のウィンドウ関数パワー スペクトルの比較

       

 5dB、0dB、-5dB、-10dB のガウス ホワイト ノイズ パワー スペクトル比較チャートを追加します。

                          

                          


補助信号パワースペクトル解析

ウェルチ法で解いた窓関数パワースペクトルと窓の比較

                           

 

 4. Matlab プログラムの実装

%% 时间:2023.11.8

%通过Matlab产生如下信号:x(n)=2cos(2pif1n)+2cos(2pif2n)+2cos(2pif3n)+v(n)
%其中f1=0.05、f2=0.40、f3=0.42,
% v(n)是实高斯白噪声(信噪比由5dB至-10dB,步进5dB),f1-f3均为归一化的频率。
%针对间接法,首先产生不同的窗函数;
%观察不同窗函数(矩形、布莱克曼、汉宁、汉明、凯撒等)的时域、频域情况,
%总结不同窗函数的优缺点;
%然后使用不同的窗函数进行处理观察功率谱变化情况,并分析产生结果的原因。

clc;
clear;
close all;

%% 信号的生成
N=200;%采样点数
Fs = 1000;  %采样频率
fc1 = 0.05*Fs; % 归一化载波频率转化为载波频率
fc2 = 0.40*Fs;
fc3 = 0.42*Fs;
n = 0:1/Fs:(N-1)/Fs;

xn = 2*cos(2*pi*fc1*n) + 2*cos(2*pi*fc2*n) + 2*cos(2*pi*fc3*n);
xn = awgn(xn,5);  %加入高斯白噪声信号
nfft = N;

%% 窗函数的时域频域分析
window1=zeros(1,N);
window2=zeros(1,N);
window3=zeros(1,N);
window4=zeros(1,N);
window5=zeros(1,N);
L = 3*N/4;
a1=transpose(hamming(L)); %汉明窗
a2=transpose(blackman(L)); %布莱克曼窗
a3=transpose(hann(L)); %汉宁窗
a4=transpose(kaiser(L)); %凯撒窗
a5=transpose(boxcar(L)); %矩形窗
for i=1:L
    window1(i)=window1(i)+transpose(a1(i));
    window2(i)=window2(i)+transpose(a2(i));
    window3(i)=window3(i)+transpose(a3(i));
    window4(i)=window4(i)+transpose(a4(i));
    window5(i)=window5(i)+transpose(a5(i));
end

%% 五种窗函数的时域频域比较
 wvt = wvtool(a1,a2,a3,a4,a5);
 legend(wvt.CurrentAxes,'汉明窗','布莱克曼窗','汉宁窗','凯撒窗','矩形窗');

%% 窗函数采样点全选取
% L = N;
% window1=transpose(hamming(L)); %汉明窗
% window2=transpose(blackman(L)); %布莱克曼窗
% window3=transpose(hann(L)); %汉宁窗
% window4=transpose(kaiser(L)); %凯撒窗
% window5=transpose(boxcar(L)); %矩形窗

%% 单个窗函数的时域频域分析
wvtool(boxcar(L));
wvtool(hamming(L));
wvtool(blackman(L));
wvtool(hann(L));
wvtool(kaiser(L));

%% 间接求功率谱法
%间接法先由序列x(n)估计出自相关函数R(n),
%然后对R(n)进行傅里叶变换,便得到x(n)的功率谱估计

%加窗后的信号
xn1=xn.*window1;
xn2=xn.*window2;
xn3=xn.*window3;
xn4=xn.*window4;
xn5=xn.*window5;

%计算序列的自相关函数
%不加窗自相关函数的傅里叶变换
cxn = xcorr(xn);
CXk = fft(cxn,nfft);
Pxx = abs(CXk);
%汉明窗自相关函数的傅里叶变换
cxn1 = xcorr(xn1);
CXk1 = fft(cxn1,nfft);
Pxx1 = abs(CXk1);
%布莱克曼窗自相关函数的傅里叶变换
cxn2 = xcorr(xn2);
CXk2 = fft(cxn2,nfft);
Pxx2 = abs(CXk2);  
%汉宁窗自相关函数的傅里叶变换
cxn3 = xcorr(xn3);
CXk3 = fft(cxn3,nfft);
Pxx3 = abs(CXk3);  
%凯撒窗自相关函数的傅里叶变换
cxn4 = xcorr(xn4);
CXk4 = fft(cxn4,nfft);
Pxx4 = abs(CXk4);  
%矩形窗自相关函数的傅里叶变换
cxn5 = xcorr(xn5);
CXk5 = fft(cxn5,nfft);
Pxx5 = abs(CXk5);  

index = 0:round(nfft/2-1);
f = index*Fs/N;
plot_Pxx = 10*log10(Pxx(index+1)); 
plot_Pxx1 = 10*log10(Pxx1(index+1)); 
plot_Pxx2 = 10*log10(Pxx2(index+1)); 
plot_Pxx3 = 10*log10(Pxx3(index+1)); 
plot_Pxx4 = 10*log10(Pxx4(index+1)); 
plot_Pxx5 = 10*log10(Pxx5(index+1)); 

%% 窗函数功率谱图比较
figure(7);
subplot(311);
plot(f,plot_Pxx);
title('原信号功率谱');
subplot(312);
plot(f,plot_Pxx5);
title('矩形窗功率谱');
subplot(313);
plot(f,plot_Pxx1);
title('汉明窗功率谱');

figure(8);
subplot(311);
plot(f,plot_Pxx2);
title('布莱克曼窗功率谱');
subplot(312);
plot(f,plot_Pxx3);
title('汉宁窗功率谱');
subplot(313);
plot(f,plot_Pxx4);
title('凯撒窗功率谱');

figure(9);
hold on
plot(f,plot_Pxx);
plot(f,plot_Pxx1);
plot(f,plot_Pxx2);
plot(f,plot_Pxx3);
plot(f,plot_Pxx4);
plot(f,plot_Pxx5);
title('五种窗功率谱比较');
legend('原信号','汉明窗','布莱克曼窗','汉宁窗','凯撒窗','矩形窗');
hold off

     記事内に不適切や不正確な点がございましたら、ご理解の上ご指摘いただければ幸いです。一部の文章、画像等はインターネット上から取得したものであるため、出典が確認できませんので、紛争等がございましたらブロガーに連絡の上、削除していただきますようお願いいたします。間違い、質問、権利侵害がある場合は、コメントを残して著者に連絡するか、VX 公開アカウントRain21321をフォローして著者に連絡してください。

おすすめ

転載: blog.csdn.net/qq_51399582/article/details/134613260