2ASK调制与解调(包含maltab代码)
生活随笔
收集整理的這篇文章主要介紹了
2ASK调制与解调(包含maltab代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗原理
實驗代碼
信噪比為20db時代碼:
clear all; close all; %%%%%%% parameter settings %%%%% Rb = 1000;%比特率 Rs = 1000;%符號率 Fs = 10000;%采樣頻率 N = 100000;%原始消息信號的長度 UpSampleRate = Fs/Rs; % 一個符號周期內采樣點數 RollOff = 0.25; Span = 6; Sps = UpSampleRate; SNR = 20; fc= 2000; %%%% 信源 %%%%% %%% 隨機信號 src_bit = randi([0,1],1,N); src_sym= src_bit; %升采樣 src_upsamp_sym = zeros(1,N*UpSampleRate); src_upsamp_sym(1:UpSampleRate:end) = src_sym; %脈沖成形 h_rcos = rcosdesign(RollOff,Span,Sps,'sqrt'); rcos_src_sym =conv(h_rcos,src_upsamp_sym); %上載波 time = [1:length(rcos_src_sym)]/Fs; rcos_src_sym_carrier = rcos_src_sym.*cos(2*pi*fc.*time); % 頻域觀察 fft_rcos_src_sym= abs(fft(rcos_src_sym))/Fs; fft_rcos_src_sym_carrier= abs(fft(rcos_src_sym_carrier))/Fs; Ds = Fs/length(rcos_src_sym);%頻率分辨率 f_s = -Fs/2:Ds:Fs/2-Ds; %只關注前20個符號 figure(1); stem(src_bit(1:20)); title("原始消息序列"); figure(2); subplot(2,1,1); plot(rcos_src_sym(1:230)); title("升余弦滾降脈沖成形"); subplot(2,1,2); plot(f_s,fftshift(fft_rcos_src_sym)); axis([-Fs/2,Fs/2,0,1]); title("升余弦滾降脈沖成形頻域觀察"); figure(3); subplot(2,1,1); plot(time(1:230),rcos_src_sym_carrier(1:230)); title("2ASK調制后的波形"); subplot(2,1,2); plot(f_s,fftshift(fft_rcos_src_sym_carrier)); axis([-Fs/2,Fs/2,0,1]); title("2ASK調制后的波形頻域觀察"); %信道 rcos_src_sym_carrier_noise = awgn(rcos_src_sym_carrier,SNR); %接收端 %相干解調 rcos_src_sym_noise = rcos_src_sym_carrier_noise.*cos(2*pi*fc.*time); LPF_fir128=fir1(128,0.2);%生成低通濾波器 rcos_src_sym_LP = 2*conv(LPF_fir128,rcos_src_sym_noise); %匹配濾波 h1_rcos = rcosdesign(RollOff,Span,Sps,'sqrt'); rcos_src_sym_MF =conv(h1_rcos,rcos_src_sym_LP ); %抽樣判決 delay = Sps*Span+64; rcos_src_sym_MF_option= rcos_src_sym_MF(delay:UpSampleRate:end);%抽樣值中前N個值為有效值 rcos_src_sym_MF_option = rcos_src_sym_MF_option(1:N); rcos_src_sym_MF_option_judge = [abs(rcos_src_sym_MF_option)>0.5]; figure(4); subplot(3,1,1); plot(rcos_src_sym_MF(1:delay+200)); title("匹配濾波后的波形"); subplot(3,1,2); stem(rcos_src_sym_MF_option(1:20)); title("抽樣后的結果"); subplot(3,1,3); stem(rcos_src_sym_MF_option_judge(1:20)); title("判決后的結果");繪制誤碼率曲線代碼:(設置不同的信噪比,使用for循環求出不同信噪比條件下的誤碼率)
%誤碼率曲線的繪制 clear all; close all; %%%%%%% parameter settings %%%%% Rb = 1000;%比特率 Rs = 1000;%符號率 Fs = 10000;%采樣頻率 N = 100000;%原始消息信號的長度 UpSampleRate = Fs/Rs; % 一個符號周期內采樣點數 RollOff = 0.25; Span = 6; Sps = UpSampleRate; SNR = 20; fc= 2000; %%%% 信源 %%%%% %%% 隨機信號 src_bit = randi([0,1],1,N); src_sym= src_bit; %升采樣 src_upsamp_sym = zeros(1,N*UpSampleRate); src_upsamp_sym(1:UpSampleRate:end) = src_sym; %脈沖成形 h_rcos = rcosdesign(RollOff,Span,Sps,'sqrt'); rcos_src_sym =conv(h_rcos,src_upsamp_sym); %上載波 time = [1:length(rcos_src_sym)]/Fs; rcos_src_sym_carrier = rcos_src_sym.*cos(2*pi*fc.*time); % 頻域觀察 fft_rcos_src_sym= abs(fft(rcos_src_sym))/Fs; fft_rcos_src_sym_carrier= abs(fft(rcos_src_sym_carrier))/Fs; Ds = Fs/length(rcos_src_sym);%頻率分辨率 f_s = -Fs/2:Ds:Fs/2-Ds; %只關注前20個符號 figure(1); stem(src_bit(1:20)); title("原始消息序列"); figure(2); subplot(2,1,1); plot(rcos_src_sym(1:230)); title("升余弦滾降脈沖成形"); subplot(2,1,2); plot(f_s,fftshift(fft_rcos_src_sym)); axis([-Fs/2,Fs/2,0,1]); title("升余弦滾降脈沖成形頻域觀察"); figure(3); subplot(2,1,1); plot(time(1:230),rcos_src_sym_carrier(1:230)); title("2ASK調制后的波形"); subplot(2,1,2); plot(f_s,fftshift(fft_rcos_src_sym_carrier)); axis([-Fs/2,Fs/2,0,1]); title("2ASK調制后的波形頻域觀察"); snr_db_tab = 1:100; SER = zeros(size(snr_db_tab));%實際誤碼率 for index = 1:length(snr_db_tab) %信道 SNR = snr_db_tab(index); rcos_src_sym_carrier_noise = awgn(rcos_src_sym_carrier,SNR); %接收端 %相干解調 rcos_src_sym_noise = rcos_src_sym_carrier_noise.*cos(2*pi*fc.*time); LPF_fir128=fir1(128,0.2);%生成低通濾波器 rcos_src_sym_LP = 2*conv(LPF_fir128,rcos_src_sym_noise); %匹配濾波 h1_rcos = rcosdesign(RollOff,Span,Sps,'sqrt'); rcos_src_sym_MF =conv(h1_rcos,rcos_src_sym_LP ); %抽樣判決 delay = Sps*Span+64; rcos_src_sym_MF_option= rcos_src_sym_MF(delay:UpSampleRate:end);%抽樣值中前N個值為有效值 rcos_src_sym_MF_option = rcos_src_sym_MF_option(1:N); rcos_src_sym_MF_option_judge = [abs(rcos_src_sym_MF_option)>0.5]; %計算誤碼率 [num,ratio]=biterr(src_sym,rcos_src_sym_MF_option_judge); SER(index) = ratio; end figure(4); subplot(3,1,1); plot(rcos_src_sym_MF(1:delay+200)); title("匹配濾波后的波形"); subplot(3,1,2); stem(rcos_src_sym_MF_option(1:20)); title("抽樣后的結果"); subplot(3,1,3); stem(rcos_src_sym_MF_option_judge(1:20)); title("判決后的結果"); figure(5); semilogy(snr_db_tab,SER); title("誤碼率曲線");運行結果
信噪比為20db時運行結果:(載波頻率為2000hz,只繪制了前20個碼元)
計算誤符號率: %計算誤碼率,由于是2ask誤符號率與誤比特率一樣 [num,ratio]=biterr(src_sym,rcos_src_sym_MF_option_judge); num; ratio;Snr=20db時,10萬個符號錯138個,誤符號率為0.0014,可以接受.
誤碼率曲線的繪制:
總結
以上是生活随笔為你收集整理的2ASK调制与解调(包含maltab代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双栈共享存储空间(C++代码实现)
- 下一篇: 线性表之顺序表