国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - Matlab實現(xiàn)簡單擴(kuò)頻語音水印算法詳解

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

2022-03-02 14:53圖圖奇遇記 C/C++

本文主要介紹了通過MATLAB設(shè)計并實現(xiàn)一種基于音頻的擴(kuò)頻水印算法,從而了解參數(shù)對擴(kuò)頻水印算法性能的影響。代碼具有一定的價值,感興趣的小伙伴可以關(guān)注一下

一、實驗背景

1.實驗?zāi)康?/h3>

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

2.實驗環(huán)境

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

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

(3) WAV音頻文件。

3.原理簡介

①擴(kuò)頻基本原理

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

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

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

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

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

③實驗算法

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

 

二、基礎(chǔ)知識

1.PN序列

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

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

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

2.時域到頻域變換的原因

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

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

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

DWT:離散小波變換,對短時間(瞬間)信號的動態(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);

 

四、運行測試

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

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

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

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

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

③最后提取水印,并計算誤碼率

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

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

(wav->mp3->wav)

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

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

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

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

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

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

原文鏈接:https://blog.csdn.net/weixin_46447549/article/details/121460482

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當(dāng)程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進(jìn)行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現(xiàn)電腦關(guān)機(jī)程序

    C語言實現(xiàn)電腦關(guān)機(jī)程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)電腦關(guān)機(jī)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
主站蜘蛛池模板: 久久久久久久久久久久久av | 精品一区二区在线观看 | 亚洲精品视频一区二区三区 | 久久亚洲欧美日韩精品专区 | 天堂俺去俺来也www久久婷婷 | 欧美日韩一区二区三区在线电影 | 国产成人在线播放 | 一级a性色生活片久久毛片 国产精品久久久久久久久久免费看 | 一区二区三区高清 | 99成人在线视频 | 久久久777| 91精品国产综合久久久久久丝袜 | 草草视频在线观看 | 一区国产精品 | 久久夜色精品国产 | 人人爱超碰 | 欧美黑人一级爽快片淫片高清 | 91亚洲日本aⅴ精品一区二区 | 国产精品高清在线观看 | 一级成人av | 免费三片在线观看网站 | 国产精品123 | 在线观看国产二区 | 精品人成| 欧美在线不卡 | 一区二区中文 | 在线观看中文字幕 | 欧美日韩国产在线 | 91免费观看视频 | 成人不卡在线观看 | 日韩欧美国产一区二区 | 三级电影网址 | 99精品欧美一区二区蜜桃免费 | 久久视频在线 | 特一级毛片 | 日日操狠狠操 | 午夜在线小视频 | 日本一区二区高清不卡 | 69久久| 欧美中文字幕一区 | 日韩成人在线播放 |