我可以运行GA来优化小波变换吗?

时间:2013-09-01 14:06:34

标签: frequency genetic-algorithm wavelet

我正在运行小波变换(cmor)来估计信号中存在的阻尼和频率。有两个参数我可以更改它们以获得更准确的结果。中心频率(Fc)和带宽频率(Fb)。如果我构造一个具有很少频率和阻尼的信号,那么我可以测量我估计的误差(图2)。但在实际情况下,我有一个信号,我不知道它的频率和阻尼,所以我无法测量误差。所以这里的朋友建议我重建信号并通过测量原始和重建之间的差异找到错误信号e(t)= | x(t)-x ^(t)|。 所以我的问题是:
有没有人知道更好的功能来找到重建信号和原始信号之间的误差,而不是e(t)= | x(t)-x ^(t)|。
我可以使用GA搜索Fb和Fc吗?或者你知道更好的搜索方法吗? Hope this picture shows what I mean, the actual case is last one. others are for explanations

提前致谢

1 个答案:

答案 0 :(得分:0)

你说在运行小波变换之前你不知道错误,但那没关系。您只需为GA生成的每个人运行小波变换。那些误差较小的人被认为是更健康的,并且存活的可能性更大。这可能非常缓慢,但从概念上讲,至少就是这个想法。

让我们定义一个Chromosome数据类型,其中包含一对编码值,一个用于频率,另一个用于阻尼参数。不要过分担心他们现在编码的方式,只要假设它是两个双打的数组,如果你愿意的话。所有重要的是你有办法从染色体中获取价值。现在,我只是按名称引用它们,但你可以用二进制表示它们,作为双精度数组等。染色体类型的另一个成员是存储它的适应性的双重。

我们显然可以生成随机频率和阻尼值,所以让我们创建100个随机染色体。我们还不知道如何设定他们的健康状况,但那没关系。首先将其设置为零。要设置实际适应值,我们将不得不为每个100个参数设置运行一次小波变换。

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_crossovermutatemerge等个别步骤,但GA的基本结构仍然存在几乎相同的。你只需为每个新的后代运行一个全新的小波分解。