一、一些Matlab函數
二、2PSK調制解調,性能分析
1、2PSK調制
(1)圖示
(2)Matlab代碼
function [ s_t ,bb_t,bits] = psk2_module( nSym ,Rb,fs,fc,Ac ) %UNTITLED7 此處顯示有關此函數的摘要 % 此處顯示詳細說明 %nSym = 300; % 信息長度 %Rb = 200; % 信息速率 %fs = 48e3; % 采樣率 %fc = 4e3; % 載波頻率 %Ac = 1; % 載波幅度 %s_t % 已調波形 %bb_t % 碼型時域波形 %bb % 碼型 %% %產生信號 % 隨機產生二進制信息 bits = randint(nSym,1); % 產生不歸零碼 bb = 2 * bits - 1; %% %產生碼型 % 每個符號包含的樣點數 sample_bit = fs / Rb; % 時間 t = (0:sample_bit*nSym-1)'/fs; % 產生不歸零碼的時域波形 bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit*nSym, 1); %% %調制 % 產生載波信號 c_t = Ac*cos(2*pi*fc*t); % 調制 s_t = bb_t .* c_t; end
2、2PSK解調
(1)圖示
(2)Matlab代碼
function [ bits,bb_t] = psk2_remodule( Rb,fs,fc,s_t) %UNTITLED11 此處顯示有關此函數的摘要 % 此處顯示詳細說明 % Rb = 200; % 信息速率 % fs = 48e3; % 采樣率 % fc = 4e3; % 載波頻率 % s_t % 調制波形 % bit_s % 抽樣判決之后 % bb_t % 抽樣判決之前 r_t = s_t; % 每個符號包含的樣點數 sample_bit = fs/Rb; % 時間 t = (0:length(r_t)-1)'/fs; % 產生同頻同相載波信號 c_t = cos(2*pi*fc*t); % FIR群延遲,也是階數一半 group_delay = 50; b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占帶寬Rb,這里可以放寬 bb_t = filter(b,1, r_t .* c_t); % 混頻並濾波 % 抽樣點下標 idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); % 取得抽樣點 val_decision = bb_t(idx_decision); % 判決 bits = zeros(length(val_decision),1); bits(val_decision > 0) = 1; end
3、一個demo
clc,clear; nSym = 1000; % 信息長度 Rb = 1e3; % 信息速率 fs = 48e3; % 采樣率 fc = 5e3; % 載波頻率 Ac = 1; % 載波幅度 %% [s_t ,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac ); t = (0 : length(s_t) - 1) / fs' ; %% %繪制已調波形 figure(); plot(t,s_t); title('2PSK時域波形'); xlabel('time(t)'); ylabel('y'); %繪制功率譜 powerF_draw(s_t,fs); %% %發送端碼型變換后的波形 figure(); subplot(2,1,1); plot(t,bb_t); axis([min(t),max(t),-1.2,1.2]); title('發送端碼型波形'); xlabel('time(t)'); ylabel('y'); %接收端抽樣判決前的波形 subplot(2,1,2); [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t); plot(t,rbb_t); title('接收端碼型波形'); xlabel('time(t)'); ylabel('y'); %% %眼圖 eyediagram(rbb_t,4*fs/Rb); %取四個Bit title('無信道噪聲'); %小噪聲 s_pow = sum(s_t.^2) / length(s_t); n_pow = 0.01 * s_pow; n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow); [bits_low_noise,rbb_t_low_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t); eyediagram(rbb_t_low_noise,4*fs/Rb); title('小信道噪聲'); %大噪聲 n_pow = 0.5 * s_pow; n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow); [bits_high_noise,rbb_t_high_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t); eyediagram(rbb_t_high_noise,4*fs/Rb); title('大信道噪聲'); %% %2PSK通信系統評估 snr_i = (-3:1:8)'; % SNR輸入(dB) %計算噪聲功率 n_pow = s_pow ./ (10.^(snr_i ./ 10)); %初始化儲存 number = zeros(1,length(snr_i)); ratio = zeros(1,length(snr_i)); %計算SNR for i=1:length(snr_i) n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i)); [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t); [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1)); end %繪圖 figure(); plot(snr_i,ratio*100); title('誤碼率曲線'); xlabel('snr_i(dB)'); ylabel('誤碼率(%)');
三、2DPSK調制解調
1、2DPSK調制
function [ s_t ,bb_t,bits] = dpsk2_module( nSym ,Rb,fs,fc,Ac ) %UNTITLED7 此處顯示有關此函數的摘要 % 此處顯示詳細說明 %nSym = 300; % 信息長度 %Rb = 200; % 信息速率 %fs = 48e3; % 采樣率 %fc = 4e3; % 載波頻率 %Ac = 1; % 載波幅度 %s_t % 已調波形 %bb_t % 碼型時域波形 %bits % 碼型 %% %產生信號 % 隨機產生二進制信息 bits = randint(nSym,1); %產生差分碼 bits_d = zeros(nSym+1,1); for i=1:length(bits) bits_d(i+1) = mod(bits_d(i) + bits(i),2); end % 產生不歸零碼 bb = 2 * bits_d - 1; %% %產生碼型 % 每個符號包含的樣點數 sample_bit = fs / Rb; % 時間 t = (0:sample_bit*(nSym+1)-1)'/fs; % 產生不歸零碼的時域波形 bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit* (nSym+1), 1); %% %調制 % 產生載波信號 c_t = Ac*cos(2*pi*fc*t); % 調制 s_t = bb_t .* c_t; end
2、2DPSK解調
function [ bits,bb_t] = dpsk2_remodule( Rb,fs,fc,s_t) %UNTITLED11 此處顯示有關此函數的摘要 % 此處顯示詳細說明 % Rb = 200; % 信息速率 % fs = 48e3; % 采樣率 % fc = 4e3; % 載波頻率 % s_t % 調制波形 % bit_s % 抽樣判決之后 % bb_t % 抽樣判決之前 r_t = s_t; % 每個符號包含的樣點數 sample_bit = fs/Rb; % 時間 t = (0:length(r_t)-1)'/fs; % 產生同頻同相載波信號 c_t = cos(2*pi*fc*t); % FIR群延遲,也是階數一半 group_delay = 50; b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占帶寬Rb,這里可以放寬 bb_t = filter(b,1, r_t .* c_t); % 混頻並濾波 % 抽樣點下標 idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); % 取得抽樣點 val_decision = bb_t(idx_decision); % 判決 bits_d = zeros(length(val_decision),1); bits_d(val_decision > 0) = 1; bits = zeros(length(bits_d)-1,1); for i=1:length(bits) bits(i) = mod(bits_d(i) + bits_d(i+1),2); end end
3、一個demo
clc,clear; nSym = 1000; % 信息長度 Rb = 1e3; % 信息速率 fs = 48e3; % 采樣率 fc = 5e3; % 載波頻率 Ac = 1; % 載波幅度 %% 產生2PSK信號 [s_t,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac ); %% 產生2DPSK信號 [s_d_t,bb_d_t,bb_d] = dpsk2_module( nSym ,Rb,fs,fc,Ac ); %% 繪制發送端差分編碼前后的波形 figure() %發送端差分編碼前離散序列 subplot(2,1,1); stem(bb_d); axis([-5,nSym+5,-1.2,1.2]); title('發送端差分編碼前離散序列'); xlabel('time(t)'); ylabel('y'); %發送端差分不歸零編碼后離散序列 subplot(2,1,2); stem(bb_d_t(1:fs/Rb:length(bb_d_t))); axis([-5,nSym+5,-1.2,1.2]); title('發送端差分不歸零編碼后離散序列'); xlabel('time(t)'); ylabel('y'); [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t); %% 2PSK通信系統評估 s_pow = sum(s_t.^2) / length(s_t); snr_i = (-3:1:8)'; % SNR輸入(dB) %計算噪聲功率 n_pow = s_pow ./ (10.^(snr_i ./ 10)); %初始化儲存 number = zeros(1,length(snr_i)); ratio = zeros(1,length(snr_i)); %計算SNR for i=1:length(snr_i) n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i)); [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t); [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1)); end %% 2DPSK通信系統評估 s_d_pow = sum(s_d_t.^2) / length(s_d_t); snr_i = (-3:1:8)'; % SNR輸入(dB) %計算噪聲功率 n_d_pow = s_d_pow ./ (10.^(snr_i ./ 10)); %初始化儲存 number_d = zeros(1,length(snr_i)); ratio_d = zeros(1,length(snr_i)); %計算SNR for i=1:length(snr_i) n_d_t = bandlimit_noise(length(s_d_t),fs,fc,2*Rb,n_d_pow(i)); [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t + n_d_t); [number_d(i),ratio_d(i)] = symerr(bits_d,bb_d(1:nSym-1)); end %繪圖 figure() hold on; plot(snr_i,ratio*100,'b'); plot(snr_i,ratio_d*100,'r'); title('2PSK和2DPSK誤碼率曲線對比'); xlabel('snr_i(dB)'); ylabel('誤碼率(%)'); legend('2PSK','2DPSK');