matlab n阶匿名沃尔什函数的生成

iyfamqjs  于 6个月前  发布在  Matlab
关注(0)|答案(1)|浏览(87)

我需要用沃尔什函数对某个测试函数进行傅立叶近似(假设它是从-pi到pi的区间上的sinx)。所以我需要找到第n个沃尔什函数作为x的函数,用于系数的积分。
这是我的尝试(我尝试使用haddmarts矩阵)

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]。第三,输入x是一个数组,我需要匿名func @(x),但是我的id是未定义的,函数根本不起作用。此外,我添加了一些关于沃尔什函数的数学背景。它们是定义在区间[0,1]上的标准正交基。它可以通过以下方式从Rademachers系统构造:
x1c 0d1x的数据



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



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


6jygbczu

6jygbczu1#

我不是你领域的Maven,但从描述中看,设计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

字符串

相关问题