function ber = sim_ASK2(snrIndB,N,flag) % 二进制ASK调制解调仿真程序 % 输入
% snr: 信噪比 % N: 仿真比特数
% flag:绘制调制解调波形标志位 % 输出
% y: 误码率
x = round(rand(1,N));% 产生信号比特
fc = 200; % 载波频率 fs = 2000;% 采样频率 fb = 50; % 比特频率
nSamples = fs/fb;% 每比特采样数
signal_in_one_bit = cos(2*pi*fc*(0:nSamples-1)/fs);% 传号
space_in_one_bit = zeros(1,nSamples); % 空号
limitation = sum(signal_in_one_bit.^2)/2; % 判决门限
sig_ori = reshape(repmat(x,nSamples,1),1,N*nSamples); % 原始信号
%% ASK调制
y=zeros(1,nSamples*N); for i=1:length(x) if(x(i)==1)
y((i-1)*nSamples+1:i*nSamples) = signal_in_one_bit; else
y((i-1)*nSamples+1:i*nSamples) = space_in_one_bit; end end
mod_sig = y;% 调制信号
%% 高斯信号传输
% rec_sig = awgn(mod_sig,snr,0); % 通过高斯信道后的接收信号 snr = 10^(0.1*snrIndB)/(fb/4);sigma = 1/sqrt(snr); rec_sig = awgn_gauss(mod_sig,sigma);
%% ASK解调
bits_judged = zeros(1,N); for i = 1:N % 逐比特处理
rec_seg = rec_sig((i-1)*nSamples+1:(i*nSamples)); sum_rec = rec_seg*signal_in_one_bit'; % 相关累积 if(sum_rec>=limitation) % 判决 bits_judged(i) = 1; else
bits_judged(i) = 0; end end
x_pie = bits_judged;% 接收信号判决值
ber = length(find(x~=x_pie))/N;% 误码率
% 绘制调制解调结果图 if(1==flag)
bits_display = 30;% 绘图显示的比特数 figure;
subplot(411);stem(x(1:bits_display));title('原始数据比特'),xlabel('t') subplot(412);plot(mod_sig(1:bits_display*nSamples));title('调制信号'),xlabel('t')
subplot(413);plot(rec_sig(1:bits_display*nSamples));title('经过信道后的接收信号'),xlabel('t')
subplot(414);stem(x_pie(1:bits_display));title('解调以后的数据比特'),xlabel('t')
%% 计算和绘制信号频谱
[f1,powerIndB1] = getFre(sig_ori,fs); [f2,powerIndB2] = getFre(mod_sig,fs); [f3,powerIndB3] = getFre(rec_sig,fs); figure
subplot(311);plot(f1,powerIndB1); xlim([0 fs/2]);ylim([-80 10]);title('原始数据的功率谱密度');xlabel('频率(Hz)');ylabel('功率谱密度(w/Hz)');
subplot(312);plot(f2,powerIndB2); xlim([0 fs/2]);ylim([-80 10]);title('调制信号的功率谱密度');xlabel('频率(Hz)');ylabel('功率谱密度(w/Hz)');
subplot(313);plot(f3,powerIndB3); xlim([0 fs/2]);ylim([-80 10]);title('经过信道接收信号的功率谱密度');xlabel('频率(Hz)');ylabel('功率谱密度(w/Hz)'); end