生成n_th匿名Walsh函数

Generation of n_th anonymouse Walsh function

提问人:Andrew 提问时间:10/27/2023 最后编辑:ThomasIsCodingAndrew 更新时间:10/30/2023 访问量:75

问:

我需要 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 系统构造:

eq 1

eq 2

其中 nk 是数字 n 的格雷二进制表示的第 k 位值。灰度法则表示:

eq 3

例如,对于 n=4,二进制是 100,格雷表示是 nk = 110,因此我们得到 walsh 函数的公式是这种情况:

eq 4

函数 MATLAB 数学

评论


答:

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