MATLAB语音混沌加密无法解码

opiticer 2017-11-06 01:58:31
主程序如下:
clear all
clc
%原波形x
%预处理x1
%二进制语音信号x2
%加密语音信号x3
%加密语音信号转置x4
%解密语音信号x5
%解密语音信号转置x6
%%
fs=8000;%语音信号采样频率为8000
x=audioread('s.wav');
t=(0:length(x)-1)/8000;
Y=fft(x,2048);%对信号做2048点FFT变换
f=fs*(0:1023)/2048;

figure(1)
subplot(2,1,1);
plot(t,x)%做原始语音信号的时域图形
grid on;
axis tight;
title('原始语音信号');
xlabel('time(s)');
ylabel('幅度');

subplot(2,1,2);
plot(f,abs(Y(1:1024)))%做原始语音信号的FFT频谱图
grid on;
axis tight;
title('原始语音信号FFT频谱')
xlabel('Hz');
ylabel('幅度');
%sound(x)
%预处理语音信号(原始信号扩大10000倍)
x1=ceil(1000*x(:,2));
Y1=fft(x1,2048);

figure(2)

subplot(2,1,1);
plot(t,x1)%预处理语音信号的时域图形
grid on;
axis tight;
title('预处理语音信号');
xlabel('time(s)');
ylabel('幅度');

subplot(2,1,2);
plot(f,abs(Y1(1:1024)))%预处理语音信号的FFT频谱图
grid on;
axis tight;
title('预处理语音信号FFT频谱')
xlabel('Hz');
ylabel('幅度');
%%
x2=dec_to_bin(x1);%将语音信号由10进制转化为2进制
%利用Logistic混沌映射,对语音信号进行加密
k1=0.3;u1=3.7;k2=0.6;u2=3.9;%设置初始值,即密匙
z1=k1;z2=k2;

for m=1:80%迭代80次,达到充分混沌状态
z1=u1*z1*(1-z1);
end
for n=1:90%迭代90次,达到充分混沌状态
z2=u2*z2*(1-z2);
end
a(1)=z1;
b(1)=z2;

%产生一维混沌加密序列
for i=1:length(x)-1
a(i+1)=u1*a(i)*(1-a(i));
b(i+1)=u2*b(i)*(1-b(i));
end

A=zeros(length(x),1);

for j=1:length(x)
if(a(j)>b(j))
k=1;
else
k=0;
end
A(j)=k;
end

B=dec_to_bin(A);
x3=bitxor(bin2dec(x2),bin2dec(B));%异或操作加密,得到密文

x4=bin_to_dec(dec2bin(x3));
Y4=fft(x4,2048);

figure(3)
subplot(2,1,1);
plot(t,x4)%加密语音信号的时域图形
grid on;
axis tight;
title('加密语音信号');
xlabel('time(s)');
ylabel('幅度');

subplot(2,1,2);
plot(f,abs(Y4(1:1024)))%加密语音信号的FFT频谱图
grid on;
axis tight;
title('加密语音信号FFT频谱')
xlabel('Hz');
ylabel('幅度');
%%
%输入密码,与密文做异或解出明文
k1=0.3;u1=3.7;k2=0.6;u2=3.9;
k11=0.3;k22=0.6;u11=3.7;u22=3.9;
z11=k11;z22=k22;

for m=1:80%迭代80次,达到充分混沌状态
z11=u11*z11*(1-z11);
end
for n=1:90%迭代90次,达到充分混沌状态
z22=u22*z22*(1-z22);
end
aa(1)=z11;
bb(1)=z22;

%产生一维混沌加密序列
for i=1:length(x)-1
aa(i+1)=u1*aa(i)*(1-aa(i));
bb(i+1)=u2*bb(i)*(1-bb(i));
end

AA=zeros(length(x),1);

for j=1:length(x)
if(aa(j)>bb(j))
k=1;
else
k=0;
end
AA(j)=k;
end

BB=dec_to_bin(AA);

x5=bitxor(x3,bin2dec(BB));

x6=bin_to_dec(dec2bin(x5));
Y6=fft(x6,2048);

figure(4)
subplot(2,1,1);
plot(t,x6)%解码语音信号的时域图形
grid on;
axis tight;
title('解码语音信号');
xlabel('time(s)');
ylabel('幅度');

subplot(2,1,2);
plot(f,abs(Y6(1:1024)))%解码语音信号的FFT频谱图
grid on;
axis tight;
title('解码语音信号FFT频谱')
xlabel('Hz');
ylabel('幅度');

%sound(x)%原始语音信号试听
%sound(x1)%预处理语音信号试听
%sound(x4)%加密语音信号试听
%sound(x6)%解密语音信号试听

有两个函数:
function wavB=dec_to_bin(wavA)
wavB=num2bin(quantizer([8 0]),wavA);
end

function wavB=bin_to_dec(wavA)
wavB=bin2num(quantizer([8 0]),wavA);
end

得到解码数组和加密数组相同是怎么回事?
...全文
640 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yosjxjdf 2020-01-30
  • 打赏
  • 举报
回复
我怎么查看回复 呢 不是结帖了么 我想看看回答是什么 这个问题很迷惑啊

3,422

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧