1

非整数遅延フィルターを設計しています。私のラグランジュ係数は 5 h(n) で、時間領域に 6 つのタップがあります。matlab を使用して 5000 サンプリングされた信号である x(n) で h(n) をたたみ込むことをテストしましたが、結果は問題ないようです。FFT と IFFT メソッドを使用しようとすると、出力が完全に間違っています。実際、FFT は周波数領域で 8192 データを使用して計算されます。これは、5000 信号サンプルの最も近い 2 のべき乗です。IFFT 部分では、8192 の周波数ドメイン データを時間ドメインの 5000 の長さのデータに戻します。したがって、問題は、なぜこれが畳み込みでは機能するのに、FFT 乗算では機能しないのかということです。周波数ドメインで 6 タップ h(n) を 8192 タップに変換すると、この問題が発生しますか?

実際に、x(n) の小さなチャンクで FFT と乗算を実行し、それを 5 回別々に実行するオーバーラップ セーブ メソッドを使用してみました。結果は前より少し良くなったようで、少なくとも波形パターンは確認できますが、まだ少し歪んでいます。それで、どこがうまくいかないのか、そして解決策は何ですか。ありがとうございました。

時間領域ではなく周波数領域で循環畳み込みを実装している理由は、実装がより効率的になるように、ラグランジュ フィルターを周波数領域の他のローパス フィルターとマージしようとしているためです。もちろん、周波数ドメインでのフィルタリングの実装は、時間ドメインでの畳み込みよりもはるかに高速になると信じています。LP フィルターには、時間領域で 120 のタップがあります。メモリの制約により、パディングを含む生データの長さは 1024 に制限され、fft ビンも同様です。

私のラグランジュ係数には 6 タップしかないため、1024 タップとは大きく異なります。周波数領域での 6 タップから 1024 ビンへの fft がエラーを引き起こすとは思えません。これは、ラグランジュフィルターのみの私のmatlabコードです。これは単なるテスト コードであり、実装コードではありません。ちょっと雑です、すみません。この問題についてさらにアドバイスをいただければ幸いです。ありがとうございました。

t=1:5000;
fs=2.5*(10^12);
A=70000;

x=A*sin(2*pi*10.*t.*(10^6).*t./fs);

delay=0.4;
N=5;

n = 0:N;  
h = ones(1,N+1);  

for k = 0:N  
      index = find(n ~= k);  
      h(index) = h(index) *  (delay-k)./ (n(index)-k);  
end  

pad=zeros(1,length(h)-1);  
out=[];  
H=fft(hh,1024);  
H=fft([h zeros(1,1024-length(h))]);  
for i=0:1:ceil(length(x)/(1024-length(h)+1))-1  

    if (i ~= ceil(length(x)/(1024-length(h)+1))-1)  
        a=x(1,i*(1024-length(h)+1)+1:(i+1)*(1024-length(h)+1));  
    else  
        temp=x(1,i*(1024-length(h)+1)+1:length(x));  
        a=[temp zeros(1,1024-length(h)+1-length(temp))];  
    end  

    xx=[pad a];
    X=fft(xx,1024);


    Y=H.*X;
    y=abs(ifft(Y,1024));
    out=[out y(1,length(h):length(y))];
    pad=y(1,length(a)+1:length(y));  

end
4

1 に答える 1

0

いくつかのコメント:

  1. 最も近い 2 のべき乗は、実際には 4096 です。残りの 904 サンプルが大きく寄与すると思いますか? 比較的低頻度の機能を探している場合にのみ重要であると思います.
  2. どのようにして信号を 8192 サンプルにパディングしましたか? サンプルを 8192 までパディングすると、データの約 40% が「架空」であることを意味します。データセットを長くするためにゼロを使用した場合、パッド ポイントにステップ変化を挿入した可能性があります。これは、多くの高周波コンテンツを意味します。
  3. メソッドを示す短いコード スニペットは問題ありません。
于 2010-12-31T03:52:51.850 に答える