有个matlab程序。有谁能帮忙翻译一下

有个matlab程序。有谁能帮忙翻译一下,第1张

除去加上%的部分,具体的就是如下的一些代码:

(从代码可得,主要是实现几个图的绘制,所以楼主可以多看看绘图的东西即可)

N = 96;% 样本个数

T = 1:4:N;%T的取值从1开始以步长为4的增长,并以N为上限

t = 1:N; %t的取值从1到N,步长为1的增长。补充:默认情感下,步长为1

x=load('PA530txt');%加载名为PA530的文本到x中保存

[imf,ort,nbits] = emd(x);%调用emd函数,其中emd的输入参数为x,输出参数为三个,分别为imf,ort,nbits。具体是什么意思还得看你的具体实现。

emd_visu(x,t,imf,1); %这里应该也是调用emd_visu的一个函数,没有返回值

figure(1) %创建画图窗口。

% time-frequency distributions

Nf = 256;% # of frequency bins

Nh = 127;% short-time window length

w = tftb_window(Nh,'Kaiser'); %同样是函数调用

[s,rs] = tfrrsp(x,T,Nf,w,1);

[s,rs1] = tfrrsp(imf(1,:)',T,Nf,w,1);

[s,rs2] = tfrrsp(imf(2,:)',T,Nf,w,1);

[s,rs3] = tfrrsp(imf(3,:)',T,Nf,w,1);

figure(4) %创建画图窗口。

subplot(221) %将图4画图窗口分为2x2的四个小窗口,并将图画在第一个小窗口中

imagesc(flipud(rs(1:128,:))) %imagesc画图函数的调用

set(gca,'YTick',[]);set(gca,'XTick',[]) %设置YTick和XTick的值为空

xlabel('time') %横坐标名称的设置

ylabel('frequency') %纵坐标名称的设置

title('signal') %标题的设置

pause %暂停

subplot(222) %在图4的第2个小窗口中绘图

imagesc(flipud(rs1(1:128,:))) %绘图函数的调用,进行具体绘图的实现

set(gca,'YTick',[]);set(gca,'XTick',[]) %同上

xlabel('time')%同上

ylabel('frequency')%同上

title('mode #1') %同上

pause%同上

subplot(223)%在图4的第3个小窗口中绘图

imagesc(flipud(rs2(1:128,:)))%同上

set(gca,'YTick',[]);set(gca,'XTick',[])%同上

xlabel('time')%同上

ylabel('frequency')%同上

title('mode #2')%同上

pause%同上

subplot(224)%%在图4的第4个小窗口中绘图

imagesc(flipud(rs3(1:128,:)))%同上

set(gca,'YTick',[]);set(gca,'XTick',[])%同上

xlabel('time')%同上

ylabel('frequency')%同上

title('mode #3')%同上

这里有方法,自己看吧,比较多,呵呵

[凯撒介绍]

凯撒密码(kaiser)是罗马扩张时期朱利斯"凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。

[加密原理]

凯撒密码的加密算法极其简单。其加密过程如下:

在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:

c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:

m≡c+k mod n (其中n为基本字符个数)

对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。

[加密算法]

我们预定义基本字符个数为 #define MAX 128

凯撒加密函数可以表示为

[Copy to clipboard]

CODE:

char cipher(char plain_char, int key)

{

return (plain_char + key) % MAX;

};

凯撒解密函数:

[Copy to clipboard]

CODE:

char decipher(char cipher_char, int key)

{

return (cipher_char - key + MAX) % MAX;

};

加密后,原所有的ASCII码偏移key位,解密则移回key位。

如果要对一个文本文件进行加密,则只要依次逐个字符逐个字符地读取文本文件,进行加密后,逐个字符逐个字符写入密文文本文件中,即可:

[Copy to clipboard]

CODE:

FILE fp_plaintext;

FILE fp_ciphertext;

char plain_char;

while((plain_char=fgetc(fp_plaintext))!=EOF)

{

fputc(cipher(plain_char,key),fp_ciphertext);

}

对文件的解密也同样方法。

[破解原理]

一篇包含字符的英文文章,其各ASCII码字符出现,都有一定的频率,下面是对Google上随意搜索到的英文文章进行分析的结果,见表:

QUOTE:

=================================================

FileName : 01txt

[1] 32: times:204

[2] 101:e times:134

[3] 116:t times:91

[4] 105:i times:87

[5] 111:o times:77

[6] 108:l times:75

[7] 97:a times:75

[8] 110:n times:69

[9] 10:

times:67

[10] 115:s times:63

=================================================

FileName : phpsisourcetxt

[1] 32: times:576

[2] 101:e times:162

[3] 115:s times:153

[4] 110:n times:141

[5] 114:r times:138

[6] 105:i times:135

[7] 10:

times:134

[8] 116:t times:129

[9] 42: times:116

[10] 111:o times:103

=================================================

FileName : worktxt

[1] 32: times:51322

[2] 101:e times:30657

[3] 116:t times:23685

[4] 97:a times:19038

[5] 111:o times:17886

[6] 105:i times:16156

[7] 110:n times:15633

[8] 114:r times:15317

[9] 115:s times:15226

[10] 104:h times:12191

=================================================

FileName : 02txt

[1] 32: times:299

[2] 101:e times:217

[3] 110:n times:136

[4] 105:i times:133

[5] 111:o times:124

[6] 116:t times:116

[7] 97:a times:110

[8] 115:s times:98

[9] 114:r times:92

[10] 108:l times:82

=================================================

FileName : 03txt

[1] 45:- times:404

[2] 32: times:394

[3] 101:e times:237

[4] 116:t times:196

[5] 114:r times:173

[6] 97:a times:163

[7] 105:i times:161

[8] 110:n times:153

[9] 111:o times:142

[10] 115:s times:129

=================================================

FileName : 04txt

[1] 32: times:326

[2] 101:e times:179

[3] 116:t times:106

[4] 105:i times:101

[5] 111:o times:96

[6] 110:n times:94

[7] 97:a times:92

[8] 115:s times:78

[9] 100:d times:61

[10] 114:r times:60

=================================================

FileName : 05txt

[1] 32: times:441

[2] 101:e times:191

[3] 111:o times:151

[4] 116:t times:120

[5] 97:a times:112

[6] 110:n times:108

[7] 105:i times:91

[8] 114:r times:84

[9] 117:u times:79

[10] 115:s times:79

有此分析可知,一篇英文文章中,出现较高频率的两个字符是 ' ' (空格) 和 'e',而且它们的ASCII码分别是32和101,差值是69。

既然凯撒密码利用的是单表替换的一种简单加密算法,所以,我们的主角, ' ' 和 'e' ,在解密后,依然会保持相同的ASCII码差值,69。

|c1 - c2| = |'e' - ' '| = |101 - 32| = 69

|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69

现在可以得到破解凯撒密码的原理了,我们统计一片经过凯撒加密的密文字符信息,在出现频率较高的字符里面寻找差值是69的2个字符,这两个必定是 ' ' 和 'e' 字符的加密字符,计算偏移量(既密钥key),通过解密运算,还原出明文。

[破解算法]

任何一片英文加密后的密文,我们统计出所有字符的个数:

[Copy to clipboard]

CODE:

#define MAX 128

FILE fp_ciphertext;

char cipher_char;

int i; //密文文件长度,包含多少字符

unsigned int size_file=0; //申明num数组,存储各个ASCII字符在密文中出现的个数

num[MAX];

for(i = 0;i < MAX; i++) //初始化num数组中的值

num[i] = 0;

while((cipher_char=fgetc(fp_ciphertext))!=EOF)

{

num[cipher_char]++;

size_file++;

}

统计出现最多次数的字符,定义#define GETTOP 10,统计最多的前10位字符:

[Copy to clipboard]

CODE:

//统计前10位

#define GETTOP 10

int temp,i,j;

int maxascii[GETNUM]; //申明maxascii数组,存储统计出的概率前10位的字符ascii码

int maxtimes[GETNUM]; //申明maxtimes数组,存储统计出的概率前10位的字符的出现次数

for(i=0;i<GETTOP;i++)

{

temp=0; //临时变量temp里面来存储出现最多次数的字符的ascii码

for(j=1;j<MAX;j++) //依次比较所有的字符次数,获得最多字符的ascii码

{

if(num[j]>=num[temp])

temp=j;

}

maxascii[i]=temp; //把出现最多次数字符的ascii存储到相应的maxascii数组中

maxtimes[i]=num[temp]; //把最多次数字符的出现次数存储到相应的maxtimes数组中

num[temp]=0; //把最多次数字符的次数赋值成0,

//进行循环运算,同样的算法,第二次循环得到的值,肯定是出现第二多的字符

//避免了对256或128个字符进行排序的复杂运算

//当年我用汇编编写成绩排序的程序时,也用这套排序算法:-)

}

找出出现最多字符中,ASCII码差别是69的两个字符,计算出密钥key的长度:

[Copy to clipboard]

CODE:

for(i=0;i<GETTOP;i++)

{

for(j=0;j<GETTOP;j++)

{

if((max[i]-max[j])==69)

{

key=(max[j] - 32 + MAX ) % MAX;

printf("Key : %d\n",key);

break;

}

}

}

既然得到了密钥长度,算完成了对凯撒密码的破解了,那就进行解密吧,大功告成!

窗函数设计低通滤波器:

fp=1000;

fc=1200;

as=100;

ap=1;

fs=22000;

wp=2fp/fs;

wc=2fc/fs;

N=ceil((as-795)/(1436(wc-wp)/2))+1;

beta=01102(as-87);

window=Kaiser(N+1,beta);

b=fir1(N,wc,window);

freqz(b,1,512,fs);

结果:

高通滤波器:

fs=22000;

Wp=25000/fs;

Ws=24800/fs;

Ap=1;

As=100;

N=ceil(8pi/(Wp-Ws))+1;

N=N+mod(N+1,2)+1;

Wc=(Wp+Ws)/2/pi;

h=fir1(N,Wc,'high');

omega=linspace(0,pi,512);

freqz(h,1,omega);

结果:

带通滤波器:

fs=22000;

Wp1=21200/fs;

Wp2=23000/fs;

Wc1=21000/fs;

Wc2=23200/fs;

Ap=1;

As=100;

W1=(Wp1+Wc1)/2;

W2=(Wp2+Wc2)/2;

wdth=min((Wp1-Wc1),(Wc2-Wp2));

N=ceil(11pi/wdth)+1;

b = fir1(N,[W1 W2]);

freqz(b,1,512,fs)

结果:

双线性法设计低通滤波器:

fp=1000;

fc=1200;

as=100;

ap=1;

fs=22000;

wp=2fp/fs;

wc=2fc/fs; %归一化截止频率

[n,wn]=ellipord(wp,wc,ap,as);%求数字滤波器的最小阶数和归一化截止频率

[b,a]=ellip(n,ap,as,wn);%求传递函数的分子分母系数

freqz(b,a,512,fs);

结果:

滤波:

d=filter(b,a,y);

以上就是关于有个matlab程序。有谁能帮忙翻译一下全部的内容,包括:有个matlab程序。有谁能帮忙翻译一下、谁懂计算机的凯撒码 我想知道怎么代换、MATLAB数字图像处理程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9871386.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存