[未答复] 解码语音信号的幅度值与原始幅度不匹配怎么回事?请指正

[复制链接]
bbyyyeeee 发表于 2022-5-13 11:17:31
这是我的代码
clear
clc
close all
[file,Fs]=audioread('2gta5.wav');file(:,2)=[];
fs = 8000;
x0 = resample(file,fs,Fs);
N=length(x0);      % 信号的长度
t=0:1/fs:(N-1)/fs;
Y=fft(x0);
df=fs/length(Y);  % 计算谱线间隔
f=0:df:(fs/2-df); % 频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Yf=abs(Y);        % 幅度
Yf=Yf(1:length(Yf)/2);   % 截取一半
figure
subplot(2,1,1);
plot(t,x0)                 % 做原始语音信号的时域图形
grid on;  axis tight;title('原始语音信号');xlabel('时间(s)');ylabel('幅度');
subplot(2,1,2);
plot(f,Yf)                % 做原始语音信号的FFT频谱图
grid on;  axis tight;title('原始语音信号FFT频谱');xlabel('频率(Hz)');ylabel('幅度');
%% 预处理语音信号(原始信号扩大1000倍)
x1=ceil(1000*x0);
Y1=fft(x1);
Yf1=abs(Y1);                % 幅度
Yf1=Yf1(1:length(Yf1)/2);   % 截取一半
figure
subplot(2,1,1);
plot(t,x1)                  % 预处理语音信号的时域图形
grid on;  axis tight;title('预处理语音信号');xlabel('时间(s)');ylabel('幅度');
subplot(2,1,2);
plot(f,Yf1)                 % 预处理语音信号的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(x0)-1
    a(i+1)=u1*a(i)*(1-a(i));
    b(i+1)=u2*b(i)*(1-b(i));
end
A=zeros(length(x0),1);
for j=1:length(x0)
    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));%异或操作加密,得到密文
Y3=fft(x3);
Yf3=abs(Y3);                % 幅度
Yf3=Yf3(1:length(Yf3)/2);   % 截取一半

figure
subplot(2,1,1);
plot(t,x3);%加密语音信号的时域图形
grid on;axis tight;title('加密语音信号');xlabel('time(s)');ylabel('幅度');
subplot(2,1,2);
plot(f,Yf3);%加密语音信号的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(x0)-1
    aa(i+1)=u1*aa(i)*(1-aa(i));
    bb(i+1)=u2*bb(i)*(1-bb(i));
end
AA=zeros(length(x0),1);
for j=1:length(x0)
    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))/1000;
Y6=fft(x6);
Yf6=abs(Y6);                % 幅度
Yf6=Yf6(1:length(Yf6)/2);   % 截取一半
figure
subplot(2,1,1);
plot(t,x6);%解码语音信号的时域图形
grid on;axis tight;title('解码语音信号');xlabel('time(s)');ylabel('幅度');
subplot(2,1,2);
plot(f,Yf6);%解码语音信号的FFT频谱图
grid on;axis tight;title('解码语音信号FFT频谱');xlabel('Hz');ylabel('幅度');



屏幕截图 202.jpg



屏幕截图 202.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表