2ASK(二進制幅移鍵控)又稱OOK
function askdigital(s,f) % 實現ASK調制 % s——輸入二進制序列;f——載波的頻率,即:一個碼元周期包括f個載波周期 % 調用舉例:askdigital([1 0 1 1 0], 2) t=0:2*pi/99:2*pi; %初始化定義,1*100的矩陣 cp=[];mod=[];bit=[]; for n=1:length(s); % 調制過程 if s(n)==0; bit1=zeros(1,100); % 100是碼元周期 else % s(n)==1; bit1=ones(1,100); end c=sin(f*t); mod=[mod c]; bit=[bit bit1]; end ask=bit.*mod; subplot(2,1,1); plot(bit,'k','LineWidth',1);grid on; ylabel('Binary Signal'); axis([0 100*length(s) -2.5 2.5]); subplot(2,1,2); plot(ask,'k','LineWidth',1);grid on; ylabel('ASK modulation'); axis([0 100*length(s) -2.5 2.5]);
2FSK:‘1’對應頻率為$\omega_1$的載波,‘0’對應頻率為$\omega_2$的載波。
function fskdigital(s,f0,f1) % 實現 FSK 調制 % s——輸入二進制序列 f0,f1——兩個不同頻率的載波 % 調用舉例 (f0 f1 必須是整數) : fskdigital([1 0 1 1 0],1,2) t=0:2*pi/99:2*pi; %初始化定義 cp=[];mod=[];bit=[]; for n=1:length(s); % 調制過程 if s(n)==0; cp1=ones(1,100); c=sin(f0*t); bit1=zeros(1,100); else %s(n)==1; cp1=ones(1,100); c=sin(f1*t); bit1=ones(1,100); end cp=[cp cp1]; mod=[mod c]; bit=[bit bit1]; end fsk=cp.*mod; % fsk = mod; subplot(2,1,1); plot(bit,'k','LineWidth',1);grid on; ylabel('Binary Signal'); axis([0 100*length(s) -2.5 2.5]); subplot(2,1,2); plot(fsk,'k','LineWidth',1);grid on; ylabel('FSK modulation'); axis([0 100*length(s) -2.5 2.5]);
或用Matlab提供的函數fskmod
- 調用格式
y= fskmod(x,M,freq_sep,nsamp);
y=fskmod(x,M,freq_sep,nsamp,Fs);
- 參數說明
x:消息信號
M:表示消息的符號數,必須是2的整數冪,M進制信號(0~M-1)
freq_sep:兩載波之間的頻率間隔,單位Hz
nsamp:輸出信號的采樣數,必須是大於1的正整數
Fs:根據奈奎斯特采樣定理,(M-1)*freq_seq <= Fs
M=2;freqsep=8;nsamp=8;Fs=32; x=randi([0,M-1],1000,1); y=fskmod(x,M,freqsep,nsamp,Fs); ly = length(y); %畫2FSK的信號頻譜 freq= -Fs/2:Fs/ly : Fs/2-Fs/ly; Syy = fftshift(abs(fft(y))); plot(freq,Syy)
PSK
function bpskdigital( s, f ) %實現BPSK % s:輸入二進制序列,f:載波信號的頻率(一個碼元有幾個載波周期) % 調用舉例:bpskdigital([1 0 1 1 0], 2) t = 0:2*pi/99:2*pi; cp = []; mod = []; bit = []; for n=1:length(s) if s(n) == 0 cp1 = -ones(1,100); bit1 = zeros(1,100); else %s(n)==1 cp1 = ones(1,100); bit1 = ones(1,100); end c= sin(f*t); cp = [cp,cp1]; mod = [mod,c]; bit = [bit,bit1]; end bpsk = cp .* mod; subplot(211); plot(bit,'LineWidth',1.5); grid on; ylabel('Binary Signal'); axis([0 100*length(s) -2.5 2.5]); subplot(212); plot(bpsk,'LineWidth',1.5); grid on; ylabel('BPSK modulation'); axis([0 100*length(s) -2.5 2.5]); end