我正在运行一个小波变换(cmor)估计阻尼和频率存在于一个signal.cmor有两个参数,我可以改变它们,以获得更准确的结果。中心频率(Fc)和带宽频率(Fb)。如果我构造一个频率和阻尼都很小的信号,那么我就可以测量我的估计误差(图2)。但是,在实际情况下,我有一个信号,我不知道它的频率和阻尼,所以我不能测量error.so,这里的一个朋友建议我通过测量原始信号和重构信号之间的差来重建信号并找出误差。所以我的问题是:
有没有人知道一个更好的函数来找出重构信号和原始信号之间的误差,而不是e(T)=x(T)−x^(T)_x。
我能用GA搜索Fb和Fc吗?或者你知道更好的搜索方法吗?
希望这张照片能说明我的意思,实际情况是最后一个。其他人则需要解释。
提前感谢
发布于 2013-09-02 12:08:31
你说你在运行小波变换后才知道误差,但这很好。你只需对遗传算法产生的每一个个体进行小波变换。那些误差较低的个体被认为更合适,并且以更大的概率生存。这可能很慢,但至少在概念上是这样的。
让我们定义一个染色体数据类型,包含编码的一对值,一个用于频率,另一个用于阻尼参数。现在不要太担心它们的编码方式,只要假设它是一个由两个双倍组成的数组,如果您愿意的话。重要的是你有办法把染色体上的值取出来。现在,我只会用名字来称呼它们,但是你可以用二进制表示它们,作为一个双倍数组,等等。染色体类型的另一个成员是一个双倍存储它的适合度。
很明显,我们可以产生随机频率和阻尼值,所以让我们创建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_parents、do_crossover、mutate和merge,但是GA的基本结构基本保持不变。你只需要对每一个新的后代进行全新的小波分解。
https://stackoverflow.com/questions/18559199
复制相似问题