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 生成的每个个体运行小波变换。那些错误率较低的人被认为更健康,更有可能存活下来。这可能非常缓慢,但至少在概念上,这就是想法。

让我们定义一个包含一对编码值的 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 的基本结构几乎保持不变。你只需要为每个新的后代运行一个全新的小波分解。

于 2013-09-02T12:08:31.030 回答