最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matlab實(shí)現(xiàn)簡單擴(kuò)頻語音水印算法詳解

 更新時(shí)間:2021年11月24日 11:24:15   作者:圖圖奇遇記  
本文主要介紹了通過MATLAB設(shè)計(jì)并實(shí)現(xiàn)一種基于音頻的擴(kuò)頻水印算法,從而了解參數(shù)對擴(kuò)頻水印算法性能的影響。代碼具有一定的價(jià)值,感興趣的小伙伴可以關(guān)注一下

一、實(shí)驗(yàn)背景

1.實(shí)驗(yàn)?zāi)康?/h3>

了解擴(kuò)頻通信原理,掌握擴(kuò)頻水印算法的基本原理,設(shè)計(jì)并實(shí)現(xiàn)一種基于音頻的擴(kuò)頻水印算法,了解參數(shù)對擴(kuò)頻水印算法性能的影響。

2.實(shí)驗(yàn)環(huán)境

(1) Windows 11 操作系統(tǒng);

(2) Matlab R2020b 科學(xué)計(jì)算軟件;

(3) WAV音頻文件。

3.原理簡介

①擴(kuò)頻基本原理

擴(kuò)頻是一種能在高噪聲環(huán)境下可靠傳輸數(shù)據(jù)的重要通信技術(shù),其基本原理是:信號在大于所需的帶寬內(nèi)進(jìn)行傳輸,數(shù)據(jù)的帶寬擴(kuò)展是通過一個(gè)與數(shù)據(jù)獨(dú)立的碼字完成的,并且在接收端需要該碼字的一個(gè)同步接收,以進(jìn)行解擴(kuò)和數(shù)據(jù)恢復(fù)。

②擴(kuò)頻通信的特點(diǎn)

占據(jù)頻帶很寬,每個(gè)頻段上的能量很低;

即使幾個(gè)頻段的信號丟失,仍可恢復(fù)信號;

利用相互正交的擴(kuò)頻碼,可以利用這個(gè)優(yōu)點(diǎn)設(shè)計(jì)水印算法。

③實(shí)驗(yàn)算法

本例中設(shè)計(jì)一種簡單的算法:利用正交的PN序列代表0、1信號,并將其疊加到信號DCT域。提取水印時(shí),利用PN序列的正交性可以較為準(zhǔn)確地恢復(fù)水印。

二、基礎(chǔ)知識

1.PN序列

PN序列(Pseudo-noise Sequence),又稱偽噪聲序列,這類序列具有類似隨機(jī)噪聲的一些統(tǒng)計(jì)特性,但和真正的隨機(jī)信號不同,它可以重復(fù)產(chǎn)生和處理,故稱作偽隨機(jī)噪聲序列。

PN序列一般用于擴(kuò)展信號頻譜。PN序列的擴(kuò)頻是指用一個(gè) 序列去乘以一個(gè)信息符號,序列碼片的時(shí)間遠(yuǎn)小于信息符號的時(shí)間,由信號的時(shí)間與頻譜的關(guān)系,我們可以知道擴(kuò)頻后的序列的頻譜是展寬的。

由于PN序列的相關(guān)性很低,只有在發(fā)送的PN序列和接收的PN序列相同,并且其碼片同步時(shí)才能得到一個(gè)相關(guān)峰。當(dāng)發(fā)射時(shí),信號的功率是低于噪聲的功率的,如果不知道PN序列,則較難得知碼片的信息。因此,擴(kuò)頻通信具有一定的加密性。

2.時(shí)域到頻域變換的原因

時(shí)域是信號在時(shí)間軸隨時(shí)間變化的總體概括,頻域是把時(shí)域波形的表達(dá)式做傅立葉變化,得到復(fù)頻域的表達(dá)式,所畫出的波形就是頻譜圖。是描述頻率變化和幅度變化的關(guān)系。將時(shí)域變換到頻域是為了做頻譜分析,即在時(shí)域中我們研究信號的時(shí)間特性,在頻域中我們研究信號的頻率特性,由于信號往往在頻域比在時(shí)域更加簡單、直觀,所以大部分信號分析的工作是在頻域進(jìn)行的。

3.三種時(shí)域到頻域變換的區(qū)別

FTP: 離散傅里葉變換,對于連續(xù)信號的靜態(tài)變換;

DWT:離散小波變換,對短時(shí)間(瞬間)信號的動態(tài)變換;

DCT:離散余弦變換,對連續(xù)信號的動態(tài)變換。

三、算法源碼

1.PN產(chǎn)生函數(shù)

function out =pn_gen(g,init,shift)
format=1;
out_len = 0;
in_len= 0;
out=[];
%check parameter fomat, ether g2 =[100000101]or g1 = [820]
tp = max(g);
if tp==1
    format = 2;% format of parameter
    in_len = length(g) -1;
else
    fommat = 1;
    in_len= g(1);
end
out_len= 2^in_len-1; % length of output 
out = zeros(1, out_len);
for n = 1:out_len
    out(n) = init(in_len);
    if fommat==1
        tp=0;
        for m=2:length(g)
           tp = mod((tp+init(g(m) + 1)), 2);%caculate new init(1)
           tp = mod((tp + init(in_len- g(m))),2); %caculate new init(1)
        end
    else
        tp= init .* g(2 : (in_len+1));
        tp = mod(sun(tp), 2);
    end
    init=[tp init(1 : (in_len-1))];  
end
for n = (shift- 1):-1:0
    out = [out(2 : out_len),out(1)];
end

2.隱藏算法

function o = hide_ds(fragment, data, s, atten, pn0, pn1)
[row, col] = size(s);
if(row> col)
    s=s';
end
i =1;
n = min( floor(length(s) / fragment), length(data));
o = s;
len = length(pn0);
base = fragment -len + 1;
for i=1 : n
    st =(i- 1) *fragment+1;
    ed = i*fragment;
    tmp = dct(s(st:ed));
    attenl = atten *max(abs(tmp));
    if data(i) == 1
        tmp(base:fragment)=tmp( base:fragment)+ attenl*pn1;
    else
        tmp(base:fragment) = tmp(base:fragment) + attenl*pn0;
    end
    o(st : ed) = idct( tmp);
end

3.提取算法

function out = dh_ds(fragment, in, pn0, pnl)
[row, col] = size(in);
if(row> col)
    in = in';
end
i=1;
len = floor(length(in) / fragment);
out =[];
len_pn = length( pn0);% length of pn
base = fragment - len_pn+1;
for i = 1:len
    st = (i-1) *fragment +1;
    ed = i *fragment;
    p = dct(in(st: ed));
    t0 = sum( p(base:fragment).* pn0);
    t1 = sum( p(base:fragment).* pnl);
    if t1>t0
        out(i) = 1;
    else
        out(i) = 0;
    end
end

4.測試腳本

% 1 select cover audio
[fname, pname] = uigetfile(' *.wav','Select cover audio');
sourcename = strcat(pname, fname) ;
s = audioread( sourcename)';
s_len = length(s);
% 2 generate msg to be embedded
frag = 256;
msg_len = floor(s_len / frag);
msg = randsrc(1, msg_len, [0 1]);
% 3 generate PN
degree = 7;
pn0 = 2*pn_gen([degree 6 0], [zeros(1, degree - 1) 1],0) - 1;
pn1 = 2*pn_gen([degree 6 0],[zeros(1, degree - 1) 1],1) - 1;
%4 embed msg
atten = 0.005;
bld = hide_ds(frag, msg, s, atten, pn0, pn1);
% 5 save the stegoed-audio
audiowrite('hide.wav', bld, 8e+3);
% 6 select stegoed-audio
[fname, pname] = uigetfile('*.wav','Select stegoed-audio');
sourcename = strcat(pname, fname);
steg = audioread(sourcename)' ;
% 7 extract msg
out = dh_ds(frag, steg, pn0, pn1);
% 8 compute ebr
fid = 1;
ebr = sum( abs(msg -out)) / s_len;
fprintf(fid, 'ebr;%f\n', ebr);

四、運(yùn)行測試

1.無攻擊(誤碼率0.000976):

① 運(yùn)行test.m,選擇提前準(zhǔn)備好的wav文件(載體音頻):

② 得到攜帶水印的音頻hide.wave, 可利用音頻處理軟件對音頻進(jìn)行攻擊,觀察攻擊后水印的恢復(fù)情況。

③最后提取水印,并計(jì)算誤碼率

2.AU格式轉(zhuǎn)換(誤碼率0.001921):

(wav->mp3->wav)

3.壓縮與解壓縮(誤碼率0.002029):

到此這篇關(guān)于Matlab實(shí)現(xiàn)簡單擴(kuò)頻語音水印算法詳解的文章就介紹到這了,更多相關(guān)Matlab 擴(kuò)頻語音水印算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入解析C++中的mutable關(guān)鍵字

    深入解析C++中的mutable關(guān)鍵字

    在C++中,mutable也是為了突破const的限制而設(shè)置的。被mutable修飾的變量,將永遠(yuǎn)處于可變的狀態(tài),即使在一個(gè)const函數(shù)中
    2013-10-10
  • 深入探索C++中stack和queue的底層實(shí)現(xiàn)

    深入探索C++中stack和queue的底層實(shí)現(xiàn)

    這篇文章主要介紹了C++中的stack和dequeue的底層實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • vscode終端中打不開conda虛擬包管理的解決

    vscode終端中打不開conda虛擬包管理的解決

    本文主要介紹了vscode終端中打不開conda虛擬包管理的解決,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 詳解_beginthreadex()創(chuàng)建線程

    詳解_beginthreadex()創(chuàng)建線程

    這篇文章主要介紹了詳解_beginthreadex()創(chuàng)建線程,使用_beginthreadex(),需要的頭文件支持#include <process.h> 下面我們就來看看具體的實(shí)現(xiàn)吧
    2022-01-01
  • C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式

    C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式

    這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    strcpy和memcpy都是標(biāo)準(zhǔn)C庫函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過本文重點(diǎn)給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • C++ 輸入scanf()和輸出printf()的操作

    C++ 輸入scanf()和輸出printf()的操作

    這篇文章主要介紹了C++ 輸入scanf()和輸出printf()的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 一文徹底搞懂IO底層原理

    一文徹底搞懂IO底層原理

    我們今天要給大家講的底層的IO看上去簡單,實(shí)則抽象。并且在它之上衍生出了語言層面用于實(shí)戰(zhàn)的技術(shù),比如我們熟悉的java語言中的NIO或者像Netty這樣的框架
    2021-06-06
  • Qt編譯OpenCV的實(shí)現(xiàn)步驟

    Qt編譯OpenCV的實(shí)現(xiàn)步驟

    本文主要介紹了Qt編譯OpenCV的實(shí)現(xiàn)步驟,通過詳細(xì)的步驟和說明,幫助開發(fā)者在Qt環(huán)境中成功集成并編譯OpenCV,從而為各類計(jì)算機(jī)視覺項(xiàng)目提供強(qiáng)大的支持,感興趣的可以了解一下
    2024-01-01
  • C++中多態(tài)的定義及實(shí)現(xiàn)詳解

    C++中多態(tài)的定義及實(shí)現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于C++中多態(tài)的定義及實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論

吉隆县| 大石桥市| 隆昌县| 瓦房店市| 鹤峰县| 康乐县| 长春市| 东港市| 西乌珠穆沁旗| 科技| 太原市| 文化| 紫云| 宁强县| 贵阳市| 阳谷县| 新巴尔虎右旗| 滦平县| 鄂温| 伊吾县| 安多县| 马关县| 凤凰县| 尚志市| 泰来县| 曲靖市| 京山县| 西贡区| 吉水县| 承德市| 普洱| 十堰市| 凤山市| 洛阳市| 六枝特区| 呼和浩特市| 正宁县| 鄄城县| 札达县| 黄龙县| 沾化县|