主頁 >  其他 > 【語音隱寫】基于matlab GUI DCT音頻數字水印嵌入提取【含Matlab原始碼 837期】

【語音隱寫】基于matlab GUI DCT音頻數字水印嵌入提取【含Matlab原始碼 837期】

2021-10-21 09:02:59 其他

一、離散小波變換的音頻信號數字水印技術簡介

0 引言
近年來, 數字水印技術的作用越來越重要,數字水印技術是將一些標識資訊直接嵌入數字載體當中, 或間接表示在信號載體中, 且不影響原載體的使用價值,通過隱藏在載體中的這些資訊, 可以判斷資訊是否被篡改, 具有防偽溯源、保護資訊安全、著作權保護等作用,對于廣播轉播臺站而言, 是廣播音頻的中轉站, 在廣播信號發送至千家萬戶之前務必保證信號的安全可靠, 但現在的大部分臺站只是利用人耳的判斷, 以及不同信源之間的比較, 具有較大的局限性,若利用數字水印的特性, 應用于廣播節目中可以有效地防止信號插播, 可靠地保護信號安全, 保障廣播的安全播出,

1 音頻數字水印技術分類
根據數字水印在音頻信號中的處理技術, 可將數字水印分為時域、變換域、壓縮域數字水印,

1.1 時域數字水印
在時域數字水印技術中, 直接將水印資訊嵌入至音頻信號中, 通常會選擇隱藏在信號不重要部位, 以保證其嵌入水印不影響原音頻信號的監聽效果,時域水印技術的實作較為容易且運算量小, 簡單直接, 但是魯棒性差, 容易被破解, 抵抗力較差,

1.2 變換域數字水印
在變換域數字水印中, 音頻信號需經過時域至變換域的轉換, 通常的變換域有離散余弦變換 (DCT, Discrete Cosine Transform) 、離散傅立葉變換 (DFT, Discrete Fourier transform) 、離散小波變換 (DWT, Discrete Wavelet Transform) 等,在變換域中嵌入水印資訊, 通過反變換得到嵌入水印的音頻時域信號,變換域水印技術較時域水印技術復雜, 但變換域嵌入的水印資訊較時域而言, 不可見性更強, 隱蔽性更好, 魯棒性更好,本文的研究主要基于DWT的音頻信號的水印資訊的嵌入與提取,

1.3 壓縮域數字水印
在時域和變換域的水印技術, 都是直接將水印信號嵌入未壓縮的音頻格式中, 但是通常在音頻信號的傳輸或存盤中需要對音頻信號進行壓縮編碼 (例如WMA、MP3等) , 因此壓縮域數字水印也是水印技術也具有較大的實用價值,壓縮域數字水印技術大致可分為三類: (1) 在非壓縮域嵌入水印, 將音頻信號與水印資訊一起壓縮; (2) 在壓縮域中, 直接將水印資訊嵌入壓縮的音頻信號中; (3) 將壓縮后的信號進行解壓縮, 然后嵌入水印資訊, 最后將水印資訊和解壓后的音頻信號一起壓縮,總的來說, 壓縮域水印技術的編解碼系統過于復雜, 受壓縮編碼格式限制大, 壓縮后的音頻信號已經去除了冗余, 因此加入水印的難度大, 壓縮域水印技術有待進一步研究,

二、部分源代碼

function varargout = main(varargin)
% MAIN MATLAB code for main.fig
%      MAIN, by itself, creates a new MAIN or raises the existing
%      singleton*.
%
%      H = MAIN returns the handle to a new MAIN or the handle to
%      the existing singleton*.
%
%      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN.M with the given input arguments.
%
%      MAIN('Property','Value',...) creates a new MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to main_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help main

% Last Modified by GUIDE v2.5 15-Apr-2021 12:58:02

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @main_OpeningFcn, ...
    'gui_OutputFcn',  @main_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to main (see VARARGIN)

% Choose default command line output for main
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
addpath('.\wavelet\')%添加小波變換工具箱
%% 選擇音頻
[file1,pathname]=uigetfile('*.wav','請選擇要識別的樣本');%跳出對話框
fname=fullfile(pathname,file1);%音頻檔案名
[X,fs]=audioread(fname); %讀入音頻檔案
s=get(handles.popupmenu1,'Value'); 

handles.axes1 %選定坐標軸1
subplot(2,2,1); %子視窗
plot(X);     %顯示音頻檔案波形
title('原始音頻信號');
handles.X=X;%保存原始音頻信號
handles.fs=fs;%保存原始音頻信號頻率
handles.s=s;
guidata(hObject, handles);
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%% 選擇水印
[file1,pathname]=uigetfile('*.bmp','請選擇要識別的樣本');%跳出對話框
fname=fullfile(pathname,file1);%選擇圖片
key=35;%密鑰引數
%Arnold置換次數,作為密鑰
Orignalmark=double(imread(fname));  %讀入64*64的水印圖片
[wrow,wcol]=size(Orignalmark);  %影像大小wrow行,wcol列
if wrow~=wcol
    error('wrow~=wcol error');%如果行列不相等則報錯
end
%--- 測驗密鑰key是否超出范圍---------
n=check_arnold(wrow);
if (key+1)>n
    error('arnold key error');
end
s=get(handles.popupmenu1,'Value'); 

subplot(2,2,2); hold on
imshow(Orignalmark),title('原始影像');
handles.Orignalmark=Orignalmark;%保存原始影像
handles.n=n;
handles.s=s;
guidata(hObject, handles);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%% 嵌入水印
%水印嵌入--------------------------------------------------
X=handles.X;%讀取音頻
Orignalmark=handles.Orignalmark;%讀取水印影像
fs=handles.fs;%頻率
s=handles.s;%演算法型別
[wrow,wcol]=size(Orignalmark);
key=35;%密鑰
if s==2
    
    Arnoldw=arnold(Orignalmark,wrow,key); %對水印影像進行Arnold轉化
    [c,l]=wavedec(X,2,'db4'); % 
    ca2=appcoef(c,l,'db4',2); % 
    cd2=detcoef(c,l,2);  %  
    cd1=detcoef(c,l,1);  % 
    lca=length(ca2);  %低頻長度
    blocksize=fix(lca/(wrow*wcol)); %每塊的大小
    water_vector=reshape(Arnoldw,1,wrow*wcol);  %將置亂后的水印轉化為一維的
    wlength=wrow*wcol;  %水印的長度
    a=0.25;  %量化步長
    j=1;
    for i=1:wlength
        Block=ca2(j:j+blocksize-1);
        [U,S,V]=svd(double(Block));
        cc=floor(S(1,1)/a);
        if(Arnoldw(i)==1)           %嵌入奇數倍
            if(mod(cc,2)==0)
                cc=cc+1;
            end
            S(1,1)=a*cc;
        end
        if(Arnoldw(i)==0)            %嵌入偶數倍
            if(mod(cc,2)==1)
                cc=cc+1;
            end
            S(1,1)=a*cc;
        end
        Blockw=U*S*V';          % 還原
        ca2(j:j+blocksize-1)=Blockw;
        j=j+blocksize;
    end
    c1=[ca2',cd2',cd1']';
    MarkedX=waverec(c1,l,'db4');%b為量化嵌入水印后的音頻資料
else
    A=X;
    L = size(A);% 用變數L存盤音頻A的長度
    M=Orignalmark;
    BW = im2bw(M);% 將影像Lena.bmp轉化為二值圖并存入變數BW
    % 計算水印矩陣大小
    [M1,M2] = size(BW);
    % M12為中間變數,避免每次都計算M1*M2
    M12 = M1*M2;
    % 降維,將水印資訊得到的一維序列存入序列C中
    C = reshape(BW,1,M12);
    n = M12;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 對水印信號進行擴頻處理,效果不是很好
    % 擴頻系數為2
    n = M12*2;
    M = zeros(n,1);
    % 產生密鑰序列M
    for k = 1 : n
        if mod(k,4) == 0
            M(k) = 1;
        else
            M(k) = 0;
        end
        % 水印信號序列分別按位與密鑰異或
        l = ceil(k/2);
        S(k) = bitxor(C(l),M(k));
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    % 嵌入一個水印資訊需要的音頻資料為N
    N = 10;
    length1 = n*10;
    % 將原始音頻信號分解為Ae和Ar兩部分
    i = 1 : length1;
    j = [1];
    % 取矩陣A的l到length行構建矩陣Ae
    Ae = A(i,j);
    % Ae(i,j)
    i = length1+1 : L;
    % 取矩陣A的length到L行第一列構建矩陣Ar
    Ar = A(i,j);
    
    
    % 建立元胞B,每個音頻資料段Ae(m)是B的一個元素
    k = 1;
    % 建立M1 x M2行l列的元胞
    B = cell(n,1);
    th = n*N;
    % 當k小于Ae的長度時,矩陣Ae每10行作為一個音頻資料段存入元胞B中
    while ( k < th )
        i = k : k+9;
        m = (k+9)/10;
        B{m,1} = Ae(i,j);
        k = k+10;
    end

三、運行結果

在這里插入圖片描述

四、matlab版本及參考文獻

1 matlab版本
2014a

2 參考文獻
[1]韓紀慶,張磊,鄭鐵然.語音信號處理(第3版)[M].清華大學出版社,2019.
[2]柳若邊.深度學習:語音識別技術實踐[M].清華大學出版社,2019.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328231.html

標籤:其他

上一篇:影像處理——輪廓檢測

下一篇:計算機發展史31-40

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more