论文部分程序仿真代码

designed by lilizong
lilizong[at]gmail
实验仿真部分代码
row=1;
col=1;
%控制最终显示窗口中显示的图像行列数
myinforarray=linspace(0,0,5);
mypsnrarray=linspace(0,0,5);
w=1;
for myouter=1:1      %此处设置迭代次数,多次迭代可以计算优化效果
    A=imread('e:oat.bmp');
    %     subplot(row,col,[1 2 4 5 7 8]),imshow(A),title('原始载体图像');
    %     subplot(row,col,1),imshow(A),title('原始载体图像');
    [m,n]=size(A);
    B=cell(8,8);%这里的k为你要分成大小为k*k的块
    AA=A;
    myinfor=0;
    for myinter=1:1  %此处设置插值次数

        for i=1:512/8
            for j=1:512/8
                B{i,j}=A((i-1)*8+1:i*8,(j-1)*8+1:j*8);
            end
        end


        %将B化为一维
        c=cell(8,8);
        k=1;
        for i=1:512/8
            for j=1:512/8
                c{k}=B{i,j};
                k=k+1;
            end
        end

        %下面的代码用于生成混沌序列,生成4096个数字,然后排序
        %得到一个位于4096之间的无重复值的混沌序列

        x=linspace(0,0,4096);

        x(1)=0.75+0.001+myinter/10+myouter/1000;
        % 0.73得值获得好结果,其他结果不佳
        t=linspace(0,0,4096);
        m=0;
        n=0;
        for i=1:4095
            x(i+1)=1-2*x(i)*x(i);
            k=k+1;
        end

        [pm,pn]=sort(x);
        %pn为排序后结果,pm为原始数列

        tod=cell(8,8);
        %定义tod为需要处理的图像块
        for  i=1:4096
            tod{i}=c{pn(i)};

            test=tod;    %添加一个测试块,看看问题出现在什么地方
        end
        %对图像进行拼接,显示一下置乱后的图像
        toad=cell(8,8);
        for i=1:4096
            toad{i}=tod{i};
        end
        k=1;
        toyuan=cell(8,8);
        for i=1:64
            for j=1:64
                toyuan{i,j}=toad{k};
                k=k+1;
            end
        end


        toyuan=cell2mat(toyuan);

        %             subplot(row,col,2),imshow(toyuan),title('分块置乱后载体图像');

        %temp=cell(8,8);
        %得到像素值数组xiang
        xiangsu=linspace(0,0,256);
        %对取得的图像快进行分析,找到最大像素值
        for m=1:4096
            temp=tod{i};
            %   temp=cell2mat(temp);
            for i=1:8
                for j=1:8
                    for  n=1:256
                        if temp(i,j)==n
                            xiangsu(n)=xiangsu(n)+1;
                        end
                    end
                end
            end
        end
        %求出最大像素的值
        maxxiangsu=xiangsu(1);
        for i=1:256
            if maxxiangsu
< xiangsu (i)
                maxxiangsu
=xiangsu(i);
                
maxvalueofxiangsu =i;
            
end
        end

        maxvalueofxiangsu;
        %开始对需要嵌入信息的图像快进行移位处理
        for m
=1:4096   %表示需要处理的块数
            temp
=tod{m};
            
for i =1:8
                
for j =1:8
                    
if temp(i,j)<maxvalueofxiangsu
                        %temp(i,j)
=maxvalueofxiangsu-1;
                        
temp(i,j) =temp(i,j)-1;
                    
end
                end

            end
            %tod{m}
=mat2cell(temp);   更改4.28
            tod{m}
=temp;
        
end
        %处理完毕,开始嵌入水印

        %读入水印信息

        b
=imread('e:logo1.bmp');
        
b =im2bw(b);
        
[p,q] =size(b);
        
oo =p*q;   %用来标识水印的总像素数

        %         watermark
=reshape(b,1,oo);

        
watermark =zeros(1,oo);

        
n =1;
        
for i =1:p
            
for j =1:q
                
watermark(n) =b(i,j);
                
n =n+1;
            
end
        end
        %         subplot(row,col,6),imshow(b),title('水印图像');
        watermark;
        waterlogistic
=zeros(1,1600);
        
waterlogistic(1) =0.8;
        
for i =2:1600
            
waterlogistic(i) =1-2*waterlogistic(i-1)*waterlogistic(i-1);
        
end

        for i
=1:1600
            
if  waterlogistic(i) > 0
                waterlogistic(i)=1;
            else
                waterlogistic(i)=0;
            end
        end

        waterlogistic;

        watermark=xor(watermark,waterlogistic);
        n=1;
        for i=1:40
            for j=1:40
                towatermark(i,j)=watermark(n);
                n=n+1;
            end
        end


        %         subplot(row,col,8),imshow(towatermark),title('加密后水印图像');



        yuanwatermark=xor(watermark,waterlogistic);
        n=1;
        for i=1:40
            for j=1:40
                yuanwatermark1(i,j)=yuanwatermark(n);
                n=n+1;
            end
        end

        %         subplot(row,col,10),imshow(yuanwatermark1),title('测试:恢复后水印图像');
        %嵌入方式为,找到最高位,如果水印为0,不发生变化,如果水印为1,最高位减1
        %令tt为嵌入水印循环量,如果t的值超过水印的信息量,则开始进行新的循环。
        t=1;             %用来标识嵌入位
        infor=0;         %用来标识总共可以嵌入的信息
        for m=1:4096
            % temp=cell2mat(toa{m});
            temp=tod{m};
            for i=1:8
                for j=1:8
                    if temp(i,j)==maxvalueofxiangsu
                        if watermark(t)==1   %水印的信息如果是1,则进行原信息的改变
                            temp(i,j)=temp(i,j)-1;  %此处测试一下
                            %  temp(i,j)=256;
                        end
                        t=t+1;
                       if t==1600
                           t=1;
                       end
                        infor=infor+1;
                    end
                end
            end
            %tod{m}=mat2cell(temp);
            tod{m}=temp;
        end
        myinfor=myinfor+infor;

        %对图像进行拼接,显示一下添加水印以后的图像
        toad=cell(8,8);
        for i=1:4096
            toad{i}=tod{i};
        end
        k=1;
        toyuan=cell(8,8);
        for i=1:64
            for j=1:64
                toyuan{i,j}=toad{k};
                k=k+1;
            end
        end
        toyuan=cell2mat(toyuan);
%         subplot(row,col,1),imshow(toyuan),title('添加水印后的置乱图像');
        %对图像进行拼接,显示添加水印后原始图像效果
        toad=cell(8,8);
        for i=1:4096
            toad{pn(i)}=tod{i};
        end
        k=1;
        toyuan=cell(8,8);
        for i=1:64
            for j=1:64
                toyuan{i,j}=toad{k};
                k=k+1;
            end
        end


        toyuan=cell2mat(toyuan);


%         subplot(row,col,2),imshow(toyuan),title('测试:加水印后原始图像');
        % figure,imshow(toyuan);
        %  此处请屏蔽外层循环后开启!!!!!
        A=toyuan;
    end
    %%%%%以下为提取水印过程
        %开始读取水印
    %1 首先将嵌入水印后图像按照加密过程进行置乱,并从中提取嵌入到其中的加密后的水印信息
    %2 对提取出来的加密后的水印与混沌徐序列进行相与操作,得到原始水印图像
    B=cell(8,8);%这里的k为你要分成大小为k*k的块
    AA=A;
    myinfor=0;
    for myinter=1:1  %此处设置插值次数

        for i=1:512/8
            for j=1:512/8
                B{i,j}=A((i-1)*8+1:i*8,(j-1)*8+1:j*8);
            end
        end
        %将B化为一维
        c=cell(8,8);
        k=1;
        for i=1:512/8
            for j=1:512/8
                c{k}=B{i,j};
                k=k+1;
            end
        end
    x=linspace(0,0,4096);

    x(1)=0.75+0.001+myinter/10+myouter/1000;
    % 0.73得值获得好结果,其他结果不佳
    t=linspace(0,0,4096);
    m=0;
    n=0;
    for i=1:4095
        x(i+1)=1-2*x(i)*x(i);
        k=k+1;
    end

    [pm,pn]=sort(x);
    %pn为排序后结果,pm为原始数列

    tod=cell(8,8);
    %定义tod为需要处理的图像块
    for  i=1:4096
        tod{i}=c{pn(i)};

        test=tod;    %添加一个测试块,看看问题出现在什么地方
    end
watermark=zeros(1,1600);
n=1;
 for m=1:4096
            % temp=cell2mat(toa{m});
            temp=tod{m};
            for i=1:8
                for j=1:8
                    if temp(i,j)==maxvalueofxiangsu
                    watermark(n)=0;
                    n=n+1;
                    end
                    if temp(i,j)==maxvalueofxiangsu-1
                        watermark(n)=1;
                        n=n+1;
                    end
                    
                        infor=infor+1;
                    end
                end
            end
            %tod{m}=mat2cell(temp);
            tod{m}=temp;
    end
        towatermark=zeros(40,40);
n=1;
       for i=1:40
            for j=1:40
                towatermark(i,j)=watermark(n);
                n=n+1;
            end
        end

%     subplot(row,col,2),imshow(towatermark),title('测试:加水印后原始图像');

watermark2=zeros(1,1600);
for i=1:1600
    watermark2(i)=watermark(i);
end


towatermark=xor(watermark2,waterlogistic);

        towatermark2=zeros(40,40);

n=1;
       for i=1:40
            for j=1:40
                towatermark2(i,j)=towatermark(n);
                n=n+1;
            end
        end
    subplot(row,col,1),imshow(towatermark2),title('提取水印图像');

    %%%%%  以上为提取水印过程
    %      figure,imshow(toyuan),title('加载了隐藏信息的图片');
    %toyuan
    %上述语句用于显示每次加密后的载体图片
    x=AA;
    x1=toyuan;
    x=double(x);
    x1=double(x1);
    for i=1:256;
        for j=1:256;
            MYa(i,j)=x(i,j)^2;  %after filtering's single
            MYb(i,j)=x(i,j)-x1(i,j);
        end
    end
    d=0;
    e=0;
    for i=1:256;
        for j=1:256;
            d=d+MYa(i,j);
            e=e+MYb(i,j)*MYb(i,j);
        end
    end
    f=log10(d/e);
    g=10*f ;
    %下面开始同时他的信息值和psnr值
    myinforarray(w)=myinfor;
    mypsnrarray(w)=uint8(g);
    w=w+1;


end
%myinter
%for i=1:myouter


%myinforarray
%mypsnrarray
%figure,plot(myinforarray);
%figure,plot(mypsnrarray);


%myinforarray
%mypsnrarray
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 基于Lcmv Gsc算法的语音增强仿真是一种通过代码的操作视频展示的方法,用于展示如何使用该算法来提高语音信号的质量和清晰度。 该算法是一种常见的语音增强技术,主要用于在噪声环境下提取出声音源的信号,并抑制噪声干扰。通过该算法,可以有效地提高语音的可理解度和清晰度,提升用户的听觉体验。 在代码操作视频中,通常会包含以下内容: 1. 环境设置:视频开始时,会展示实验环境的设置,包括音频输入输出设备的连接和设置,以及噪声源的选取和放置等。 2. 程序介绍:视频通过代码演示的方式,逐步展示算法的实现过程。首先会介绍Lcmv Gsc算法的原理和流程,并对其实现进行详细说明。 3. 代码演示:视频中会逐行展示代码的编写和操作过程,包括输入参数设置、信号处理和算法调用等。通过代码的展示,观众可以清晰地了解算法的具体实现细节。 4. 效果对比:视频还会播放实际语音增强效果的对比展示,包括原始语音和增强后语音的播放,以及降噪效果和语音清晰度的对比展示。观众可以通过听觉感知来评估算法的效果和性能。 5. 结果分析:视频结束时,会对算法的实验结果进行分析和总结,包括音频采样率、频谱图、信噪比等参数的分析,并对算法优化和改进提出建议。 通过观看这样的操作视频,观众可以全面了解基于Lcmv Gsc算法的语音增强仿真的过程和方法,掌握相关算法的实现和应用技巧,从而更好地理解和应用这项技术。 ### 回答2: 基于最小共轭差矢量(LCMV)广义旁瓣抑制算法(GSC)的语音增强仿真代码操作视频,可以通过以下步骤进行。 首先,打开集成开发环境(IDE)或文本编辑器,创建一个新的代码文件。选择一种编程语言(如MATLAB或Python)作为实现语音增强算法的工具。 接下来,导入所需的库或模块,例如语音处理或信号处理库,以及计算矩阵运算所需的数学库。 然后,定义并加载输入的语音信号。这可以是一个音频文件,或者直接从麦克风或其他音频采集设备中实时获取的实时音频流。 接着,预处理输入信号。这可以包括去除噪声、滤波或降低增益等步骤,以减少背景噪声对增强效果的影响。 然后,实现LCMV GSC算法。该算法基于最小共轭差矢量(Least Constrained Minimum Variance)的思想,通过重构目标信号和抑制噪声。 算法的关键步骤包括:计算输入信号的自相关矩阵、噪声相关矩阵和最小共轭差矢量。根据最小共轭差矢量,计算权重矩阵,以最小化输出信号的方差。 然后,将输入信号经过LCMV GSC算法进行处理,得到增强的语音信号。 最后,将增强后的语音信号进行输出,可以保存为音频文件,或将其实时播放出来。 在代码操作视频中,可以展示如何实现上述步骤,并通过示例音频进行演示。视频可以包括代码演示、参数设置和效果展示等内容,以帮助观众理解和复现基于LCMV GSC算法的语音增强仿真代码操作。 ### 回答3: 基于LCMV-GSC算法的语音增强仿真代码操作视频主要分为以下几个步骤: 1. 准备工作:准备语音增强仿真所需的代码和相关工具。首先从相关平台或者论文中下载LCMV-GSC算法的代码,确保代码库完整并安装相关依赖项,如MATLAB或Python等。 2. 数据准备:准备语音数据用于仿真。可以在网上下载开源语音数据集,或者自行录制一段语音。确保语音数据集包含清晰的人声信号和背景噪声信号。 3. 代码操作演示:打开MATLAB或Python编辑器,并加载LCMV-GSC算法的代码。首先,输入语音数据,并将其预处理,例如分帧、计算功率谱等。然后,根据LCMV-GSC算法的具体实现,设置算法参数,如麦克风个数、滤波器长度、权重设置等。接下来进行语音增强处理,通过LCMV-GSC算法对语音数据进行处理,去除背景噪声并增强人声信号。 4. 结果展示:通过声音播放工具,播放增强后的语音结果。对比原始语音和增强后的语音,评估增强效果。可以通过指标如信噪比(SNR)来量化评估。 5. 总结和讨论:总结整个操作过程,并讨论LCMV-GSC算法在语音增强中的优点和局限性。进一步思考如何改进算法以提高语音增强的效果。 注意事项: - 在操作视频中,需要清晰地展示代码操作过程和结果展示界面。 - 应确保视频内容流畅,语速适中,可加入文本解说以帮助理解。 - 视频中应给出代码的具体路径和版本信息,以便观众能够获取正确的代码并进行复现。 这是一个大致的步骤说明,具体操作视频的内容可根据LCMV-GSC算法的实现细节和要求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值