0

ウェーブレット変換 (cmor) を実行して、信号に存在するダンピングと周波数を推定しています。cmor には、より正確な結果を得るために変更できる 2 つのパラメーターがあります。中心周波数 (Fc) と帯域幅周波数 (Fb)。周波数と減衰が少ない信号を作成すると、推定の誤差を測定できます (図 2)。しかし、実際には信号があり、その周波数と減衰がわからないため、エラーを測定できません。そこで、ここの友人が、信号を再構築し、元の信号と再構築された信号の差を測定してエラーを見つけることを提案しました。信号 e(t)=|x(t)−x^(t)|。だから私の質問は:
e(t)=|x(t)−x^(t)| ではなく、再構成された信号と元の信号の間のエラーを見つけるためのより良い関数を知っている人はいますか?
GA を使用して Fb と Fc を検索できますか? または、より良い検索方法を知っていますか?
この写真が私の言いたいことを表していることを願っています。実際のケースは最後のケースです。他は説明用

前もって感謝します

4

1 に答える 1

0

あなたは、ウェーブレット変換を実行するまでエラーがわからないと言いますが、それは問題ありません。GA が生成するすべての個体に対してウェーブレット変換を実行するだけです。エラーが少ない個人は、より健康であると見なされ、より高い確率で生存します。これは非常に遅いかもしれませんが、少なくとも概念的には、それがアイデアです。

エンコードされた値のペアを含む染色体データ型を定義しましょう。1 つは周波数用で、もう 1 つは減衰パラメーター用です。今のところ、それらがどのようにエンコードされているかについてあまり心配する必要はありません。必要に応じて、2 つの double の配列であると想定してください。重要なのは、染色体から値を取得する方法があることだけです。今のところ、それらを名前だけで参照しますが、double の配列などとしてバイナリで表すこともできます。Chromosome 型のもう 1 つのメンバーは、その適合度を格納する double です。

明らかにランダムな周波数と減衰値を生成できるので、たとえば 100 個のランダムな染色体を作成しましょう。フィットネスの設定方法はまだわかりませんが、問題ありません。最初はゼロに設定してください。実際のフィットネス値を設定するには、100 個のパラメーター設定ごとにウェーブレット変換を 1 回実行する必要があります。

for Chromosome chr in population
    chr.fitness = run_wavelet_transform(chr.frequency, chr.damping)
end

これで、100 個の可能なウェーブレット変換があり、それぞれに計算された誤差があり、 というセットに格納されていますpopulation。残っているのは、集団のより適切なメンバーを選択して繁殖させ、集団のより適切なメンバーと子孫が次世代に生き残ることを可能にすることです.

while not done
    offspring = new_population()
    while count(offspring) < N
        parent1, parent2 = select_parents(population)
        child1, child2 = do_crossover(parent1, parent2)
        mutate(child1)
        mutate(child2)
        child1.fitness = run_wavelet_transform(child1.frequency, child1.damping)
        child2.fitness = run_wavelet_transform(child2.frequency, child2.damping)
        offspring.add(child1)
        offspring.add(child2)
    end while
    population = merge(population, offspring)
end while

select_parentsdo_crossovermutate、およびhere のような個々のステップを実行するにはさまざまな方法がありますがmerge、GA の基本的な構造はほとんど同じままです。新しい子孫ごとに新しいウェーブレット分解を実行するだけです。

于 2013-09-02T12:08:31.030 に答える