就是最簡單的實現乙個2fsk,先不管這種調製方法的性質
其實就是太懶了不想學
rb=100;%設定碼元速率
sample=randbinary(n);%生成隨機二進位制序列
%設定傳送波形引數
f1=8000;
f0=12000;
%傳送波形取樣
fs=48000;
send=modulation_2fsk(sample,[f0 f1],rb,fs);
%傳送sound(send,fs);
plot(send);
附:
自定義函式說明:
產生隨機二進位制序列
function [ seq ] = randbinary( n )
% 輸入需要生成序列的長度n
% 產生乙個隨機01序列,長度為n
%% 如生成乙個長度為1000的隨機二進位制序列
% sample=randbinary(1000);
seq=zeros(1,n);
for i=1:n
ele=ceil(rand()*10);
seq(i)=mod(ele,2);
endend
對單極性不歸零序列進行2fsk調製
採用鍵控法,碼元為1或0時將傳送其對映的波形
function [ send ] = modulation_2fsk( sample,f,rb,fs )
% 2fsk調製
% 輸入待調製的單極性不歸零序列sample和碼元速率rb
% 傳送頻率[f0 f1]
tb=1/rb;
ts=1/fs;
temp=[0];
send=[0];
n=length(sample);
for i=1:n
temp=i*tb:ts:(i+1)*tb-ts/10;
if sample(i)
send=[send cos(2*pi*f(2)*temp)];
else
send=[send cos(2*pi*f(1)*temp)];
endend
send=send(2:end);
end
然後是對接收訊號進行解調.以下為解調的超理想模式,通道完全無雜訊無衰減!其實根本沒傳輸
因為沒有雜訊不用提取載波,只要對訊號平方在通過lpf即可恢復序列
function [ ] = demodulation_2fsk( rcv,f,fs )
% 2fsk解調函式
% 輸入接收訊號rcv和傳送頻率[f0 f1]
% fs為接收訊號的取樣頻率
% 輸出恢復01序列(暫無),顯示抽樣判決前波形
ts=1/fs;
len=length(rcv);
t=0:ts:(len-1)*ts;
%恢復載波
aid1=cos(2*pi*f(2)*t);
aid0=cos(2*pi*f(1)*t);
%定義濾波器(fpass=500,fstop=2k)
lpf=[-0.000155833996394978,-8.13831647659670e-05,-9.20002718367755e-05,-9.34081381696587e-05,-8.07905288388760e-05,-4.82295684201173e-05,1.10503665725242e-05,0.000104811978995989,0.000241591960167609,0.000430822839276432,0.000682264219483239,0.00100598263039256,0.00141205216632109,0.00191075149567522,0.00251102822992922,0.00322157539693270,0.00404950826762152,0.00500032696122431,0.00607774423655064,0.00728301069263170,0.00861503729572713,0.0100699084385198,0.0116408437704915,0.0133180094004704,0.0150886733499124,0.0169371703821178,0.0188450158385386,0.0207913578208965,0.0227530878451301,0.0247053521313381,0.0266220811202588,0.0284763137354778,0.0302410586230369,0.0318896464873665,0.0333964895832343,0.0347376010424772,0.0358912330554356,0.0368383387237662,0.0375630659622750,0.0380532056874610,0.0383003706934961,0.0383003706934961,0.0380532056874610,0.0375630659622750,0.0368383387237662,0.0358912330554356,0.0347376010424772,0.0333964895832343,0.0318896464873665,0.0302410586230369,0.0284763137354778,0.0266220811202588,0.0247053521313381,0.0227530878451301,0.0207913578208965,0.0188450158385386,0.0169371703821178,0.0150886733499124,0.0133180094004704,0.0116408437704915,0.0100699084385198,0.00861503729572713,0.00728301069263170,0.00607774423655064,0.00500032696122431,0.00404950826762152,0.00322157539693270,0.00251102822992922,0.00191075149567522,0.00141205216632109,0.00100598263039256,0.000682264219483239,0.000430822839276432,0.000241591960167609,0.000104811978995989,1.10503665725242e-05,-4.82295684201173e-05,-8.07905288388760e-05,-9.34081381696587e-05,-9.20002718367755e-05,-8.13831647659670e-05,-0.000155833996394978];
%濾除高頻部分,保留低頻分量
rcv1=filter(lpf,1,rcv.*aid1);
rcv0=filter(lpf,1,rcv.*aid0);
%歸一化
rcv1=rcv1/max(abs(rcv1));
rcv0=rcv0/max(abs(rcv0));
figure
plot(t,abs(rcv1),'-r');
grid on
hold on
plot(t,abs(rcv0),'-g');
title('接受恢復');xlabel('秒/s');
legend('1接收','0接收')
end
在解調的過程中,我們要注意由於通道的隨機衰減,可能導致針對某部分頻譜分量的大量衰減,從而不能分辨.為了應對這種情況,我們就需要對經過lpf後的訊號進行歸一化,從而消除因幅度不同而導致的誤差.不能在接收訊號後就進行歸一化,因為訊號中只有部分頻率分量是衰減的,對整個訊號進行歸一化後並不能使衰減訊號恢復到正常值. Vue資料驅動模擬實現2
一 前言 在隨筆 模擬vue之資料驅動1 結尾處,我們說到如果監聽的屬性是個物件呢?那麼這個物件中的其他屬性豈不就是監聽不了了嗎?如下 倘若user中的name age屬性變化,如何知道它們變化了呢?今兒,就來解決這一問題。通過走讀vue原始碼,發現他是利用observer建構函式為每個物件建立乙個...
模擬實現Spring IOC
通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...
模擬實現strcmp
函式簡介 原型 int strcmp const char s1,const char s2 所在標頭檔案 string.h 功能 比較字串s1和s2。一般形式 strcmp 字串1,字串2 說明 當s1注意不是 1 當s1 s2時,返回值 0 當s1 s2時,返回正數 注意不是1 如下 int m...