提问人:Andrew 提问时间:10/27/2023 最后编辑:ThomasIsCodingAndrew 更新时间:10/30/2023 访问量:75
生成n_th匿名Walsh函数
Generation of n_th anonymouse Walsh function
问:
我需要 Walsh 函数来对某些测试函数进行傅里叶近似(让它在从 -pi 到 pi 的间隔上是 sinx)。所以我需要找到n_th Walsh 函数作为 x 的函数,用于系数的积分。
这是我的尝试(我尝试使用 haddamar 矩阵)
function y = wal(x,n)
N = 2^n;
H = hadamard(N);
id = fix(x*N -1e-9) + 1;
y = H(N,id);
结束
但这是我的问题,首先这些函数是不正确的。其次,它们只在 (0,1) 区间上定义,我不知道如何在 [-pi,pi] 上泛化。第三,input x 是一个数组,我需要制作匿名 func @(x),但是我的 id 未定义并且函数根本不起作用。 此外,我还添加了一些关于沃尔什函数的数学背景。它们是在区间[0,1]上定义的正交基的特定情况。它可以通过以下方式从 Rademachers 系统构造:
其中 nk 是数字 n 的格雷二进制表示的第 k 位值。灰度法则表示:
例如,对于 n=4,二进制是 100,格雷表示是 nk = 110,因此我们得到 walsh 函数的公式是这种情况:
答:
0赞
ThomasIsCoding
10/30/2023
#1
我不是您所在领域的专家,但从描述来看,仅使用一个匿名函数似乎并不容易。walsh
下面是该函数的一个可能实现,其中最后两个是辅助函数walsh.m
% walsh function
function y = walsh(x, n)
nk = grayencoding(n);
y = prod(rademachers(x, length(nk):-1:1).^nk);
end
% rademachers system
function y = rademachers(x, n)
if n == 0
y = 1;
else
y = sign(sin(2.^n.*pi.*x));
end
end
% gray binary encoding
function y = grayencoding(k)
v = dec2binvec(k);
y = zeros(size(v));
for p = 1:(length(v)-1)
y(p) = xor(v(p),v(p+1));
end
y(end) = v(end);
y = fliplr(y);
end
评论