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。