EmtyProjectを使う その12 if(DATA->tune>0) for(i=0;i<span;i++) dest[2*i]=DATA->capture_fft[8192-2*DATA->tune+2*i]; }
1.もっとsimpleに...
一連のDigital 信号処理が、もっと、simpleにならんか? と、考えた。
フィルタとは、切り取る事や。
ほなら、素直に、切り取ってみる事にした。
入力をFFTした結果を、必要な部分だけ切り取り、他のFFT成分をゼロにする、だけです。
先ず、入力信号をFFTする。
DATA->myfir->get_CaptureData_FFT_result(DATA->current_Q,DATA->current_I,2048,DATA->capture_fft,work,ip,w);
同調して、必要な帯域分(span)だけ、切り取る。
//ここで、DATA->tuneで、周波数遷移する
//DATA->capture_fft
の一部分だけを変化させて同調し、
span幅だけ、0Hzへ copyする
span=(DATA->info_array[selected_mode].band_width*4096/Sample_Rate);
switch(DATA->info_array[selected_mode].usb)
{
case
0:
{
if(
DATA->tune>span )
{
{
dest[2*i+1]=DATA->capture_fft[8192-2*DATA->tune+2*i+1];
break;
}
etc ...............
そして、素直に 逆フーリエ変換して、時間軸に戻して、音声として出力する 。
2.結果は
比較の為に、
今までの、通常の方法での、音声出力が、下の図。
実際に、聞き比べてみても、実験の方法では 雑音が多い。
これは、出力が、ぶつ切れ状態である事が原因する。
単位インパルスを入力したような、一様な周波数分布の雑音出力である。
出力を連続的にするには、overlap
add法なるものを、使うんやろか?
文献が、ありませんねんワン。
雑音が取れれば、「こんな楽な方法はない、ルンルン ♪ 」ですね。
帯域を決定するのも、spanを、何個にするか? だけですもんね。
実験の状態でも、アマチュアバンドを受信している限り、
空電によって、雑音が紛れて、通常の方法での受信と、大きな違いは感じません。.
.
ps. 是之プログラム 命名 「 Jyaiko_101 」
H.19.9.14