声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2083|回复: 12

[求助]fibonacci数列的置乱程序

[复制链接]
发表于 2006-3-22 16:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求助]fibonacci数列的置乱程序[em10]
回复
分享到:

使用道具 举报

发表于 2006-3-22 21:33 | 显示全部楼层

回复:(游鱼儿)[求助]fibonacci数列的置乱程序

fibonacci数列是不是满足<BR>a[k+2]=a[k]+a[k+1],k=1,2,.. ;且a[1]=a[2]=1<BR><BR>的数列?<BR><BR>另外置乱是什么意思?
 楼主| 发表于 2006-3-23 18:33 | 显示全部楼层

FIBONACCI变换

定义1 设F0=1,F1=1,Fn=Fn-1+<BR>Fn-2,n\3,则数列{Fn}称为Fibonacci数列"<BR>定义2[9] 设Fn,Fn+1是Fibonacci数列中的两<BR>个相邻数,称以下变换:<BR>Sk=(kFn+r)modFn+1<BR>为Fibonacci变换"这里r可作算法中密钥的一部<BR>分:r可取0<BR>k=0,1,2,,,Fn+1-1<BR>由定义可以看出,该变换可将数列{Q}=(0,1,2,<BR>,,Fn+1-1)变换成另一新数列{S}=(S0,S1,S2,<BR>,,SFn+1-1),且可以证明数列{S}是数列{Q}的一个<BR>新的伪随机置换<BR>用Fibonacci变换将水印图像的像素位置打<BR>乱;将水印图像的行列分别作变换,选取<BR>Fn+1为载体图像的宽Fn+1和Fn+1高,置乱算法可表述<BR>如下:Xi=(i*Fn)modFn+1    Yi=(i*Fn)modFn+1<BR>这样做的目的是将水印图像的像素扩散到载体<BR>图像大小的空间域上,使得水印图像像素有更广泛<BR>的分散空间,且置乱后的水印图像与载体图像尺寸<BR>相同"例如数列{0,1,2,3}可用计算式Xi=(i@<BR>89)mod144分散到144的空间上为{0,89,34,123}<BR>还有我没讲明白的你再问,拜托,拜托,帮帮忙,我做毕业设计,不会用MATLAB[em04]
发表于 2006-3-24 08:04 | 显示全部楼层

回复:(游鱼儿)[求助]fibonacci数列的置乱程序

<P>还是不明白你的变换具体是什么回事,见笑了<BR><BR>不过FIBONACCI数列是搞清楚了,可以有下面两种方式产生<BR><BR>function out=fibo1(n)<BR><BR>r1=(1+sqrt(5))/2;<BR>r2=(1-sqrt(5))/2;<BR>out=(r1^(n-1)-r2^(n-1))/sqrt(5);<BR><BR>function out=fibo2(n)<BR>if n==1<BR>    out=0;<BR>    return;<BR>elseif n==2<BR>    out=1;<BR>    return;<BR>else<BR>    out=fibo(n-1)+fibo(n-2);<BR>end</P>
 楼主| 发表于 2006-3-24 14:07 | 显示全部楼层
<FONT size=3>变换就是:产生一个随机的64个数的数列,然后用公式 K*89MOD144做变换(K取1到64)来确定K位置上的数到被换到的新的位置,结果就是把这64个数伪随机的散列到了144的空间上,例如,K=1时,1*89MOD144=89,既第一个位置上的数要到89位置上去</FONT>
发表于 2006-3-25 08:57 | 显示全部楼层

回复:(游鱼儿)[求助]fibonacci数列的置乱程序

你要的应该就是这个伪随机序列吧,看红色标注<BR><BR>function x = rndgen(n,type,options) <BR>%RNDGEN Uniformly distributed random numbers generator. <BR>% TYPE = 'Mul' Linear congruential random number generators <BR>% OPTIONS = [a,c,m,x0] <BR>% X is a random number vector get from <BR>% X = (a*X+c) mod m <BR>% X0 is the inital value of X which is also called SEED. <BR>% For example IMSL uses it with m=2^31-1, a=16807 and c=0; <BR>% a=84589, c=45989 and m=217728 will give a random seriers <BR>% which will overflow at 2^35. <BR>% <BR><FONT color=#ff0000>% TYPE = 'Add' Fibonacci random number generators</FONT> <BR>% OPTIONS = [,m,x0,x1] <BR>% X is a random number vector get from <BR>% X(i) = (X(i-1)+X(i-2)) mod m <BR>% X0 and X1 are inital values of X which are also called SEED. <BR>% <BR>% See also RAND, RNDGENM <BR><BR>%--------------------------------------------------------------------------- <BR>% xywu <BR>% Fudan university. <BR>% <BR>% $Revision: 1.0 $ <BR>% $Date: 03/08/2002 $ <BR>% <BR>%--------------------------------------------------------------------------- <BR><BR>if nargin&gt;3 <BR>error('Too many arguments! '); <BR>end <BR>if nargin&lt;1 <BR>error('Requires at least one input argument.'); <BR>end <BR>if nargin==1 <BR>type = 'Mul'; <BR>options = [16807,0,2^31-1,fix(rand(1)*now*62)]; <BR>end <BR><BR>switch type <BR>case 'Mul' <BR>a = options(1); <BR>c = options(2); <BR>m = options(3); <BR>xt = options(4); <BR>x = []; <BR>for i = 1:n <BR>xt = mod(a*xt+c,m); <BR>x = [x,xt/m]; <BR>end <BR>x = x(end-n+1:end); <BR>case 'Add' <BR>m = options(1); <BR>xt1 = options(2); <BR>xt2 = options(3); <BR>x = []; <BR>for i = 1:n <BR>xt1 = mod(xt1+xt2,m); <BR>xt2 = mod(xt1+xt2,m); <BR>x = [x,xt1/m,xt2/m]; <BR>end <BR>otherwise <BR>x = []; <BR>error('Illegal type!'); <BR>end
 楼主| 发表于 2006-3-26 20:30 | 显示全部楼层
这么复杂啊,我研究研究,谢谢了[em07]
 楼主| 发表于 2006-3-27 13:55 | 显示全部楼层
a=imread('c:\baboon64.bmp');<BR>b=imresize(a,[64,64]);<BR>c=round(double(b)./256);<BR>subplot(331)<BR>imshow(c)<BR>new=c;<BR>for i=1:64<BR>    for j=1:64<BR> k=j*89;<BR> b=rem(k,144);<BR> new(i,b)=c(i,j);<BR>end<BR>end<BR>for j=1:64<BR>    i=1:64<BR> m=i*89;<BR> n=rem(m,144);<BR> new(n,j)=c(i,j);<BR>end<BR>end<BR>subplot(333)<BR>imshow(new)<BR>看看这段程序。我的大概意思就是这样,就是要把图C 的各点分散了,成为一个新的图NEW<BR>但是循环语句那有错误,麻烦看一下,错在哪了
发表于 2006-3-27 18:18 | 显示全部楼层

回复:(游鱼儿)[求助]fibonacci数列的置乱程序

可以运行,请说明问题所在
 楼主| 发表于 2006-4-2 17:36 | 显示全部楼层

融合技术

上个问题解决了,十分感谢<BR>请教个新问题<BR>利用融合技术公式S=T*W+(1-T)*G     T取0。1<BR>W为水印图象,G为一段音频,求S的程序原代码帮忙写一下,谢了
发表于 2006-4-3 16:27 | 显示全部楼层

回复:(游鱼儿)融合技术

<DIV class=quote><B>以下是引用<I>游鱼儿</I>在2006-4-2 17:36:39的发言:</B><BR>上个问题解决了,十分感谢<BR>请教个新问题<BR>利用融合技术公式S=T*W+(1-T)*G     T取0。1<BR>W为水印图象,G为一段音频,求S的程序原代码帮忙写一下,谢了</DIV>
<P>这个问题应该只是一个公式运算啊,需要找源代码吗?</P>
 楼主| 发表于 2006-4-5 10:55 | 显示全部楼层

回复:(happy)回复:(游鱼儿)融合技术

<P>可是我按照公式写出的程序运行结果没什么变化,显示的音频和原来的一样<BR>for i=1:20736<BR> m=0.1*yiwei(i);<BR> n=0.9*wav(i);<BR> newwav(i)=m+n;<BR>end<BR></P>
<P><BR>这样的循环语句就可以了吗?</P>
发表于 2006-4-5 14:39 | 显示全部楼层

回复:(游鱼儿)回复:(happy)回复:(游鱼儿)融合...

<DIV class=quote><B>以下是引用<I>游鱼儿</I>在2006-4-5 10:55:01的发言:</B><BR>
<P>可是我按照公式写出的程序运行结果没什么变化,显示的音频和原来的一样<BR>for i=1:20736<BR>m=0.1*yiwei(i);<BR>n=0.9*wav(i);<BR>newwav(i)=m+n;<BR>end<BR></P>
<P><BR>这样的循环语句就可以了吗?</P></DIV>
<br>你的音频和图像数据都是向量?不太可能吧,图片一般都是二维或者三维的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-26 05:24 , Processed in 0.063915 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表