clear all;
close all;
%------------------ 系统仿真参数
A = 1;    % 载波振幅
fc = 2;   % 载波频率(Hz)
snr = 5;  % 信噪比dB
N_sample = 8; % 基带信号中每个码元的采样点数
N = 10000;  % 码元数
Ts = 1;   % 码元宽度
df = 0.01; % 频率分辨率
B = 1 / Ts;
f_start = fc - B;
f_cutoff = fc + B;
fs = fc * N_sample; % 系统采样频率,即考虑载波后,一个码元内的采样点数
ts = Ts / fs; % 系统采样间隔
t = 0:ts:N*Ts - ts;
Lt = length(t);

%----------- 画出调制信号波形及功率谱
% 产生二进制信源
d = sign(randn(1, N));
dd = sigexpand((d + 1) / 2, fc * N_sample);
gt = ones(1, fc * N_sample); % NRZ波形
d_NRZ = conv(dd, gt);
d_NRZ1 = d_NRZ(1:Lt);

% 画出单极性NRZ波形及其功率谱
figure(1)
subplot(221); 
plot(t, d_NRZ1);% 画出单极性NRZ信号波形
axis([0 10 0 1.2]);
xlabel('t');
ylabel('单极性信号');
subplot(222); 
[d_NRZ1f, d_NRZ1, ~, f] = T2F(d_NRZ1, ts, df, fs);% 求出单极性NRZ信号功率谱
plot(f, 10*log10(abs(fftshift(d_NRZ1f).^2 / length(f))));% 画出单极性NRZ信号功率谱
axis([-3*B 3*B -50 0]);
xlabel('f');
ylabel('单极性信号PDF');

% 画出双极性NRZ波形及其功率谱
d_sjx = 2 * d_NRZ - 1; % 生成双极性NRZ信号
d_sjx1 = d_sjx(1:Lt);
subplot(223); 
plot(t,d_sjx1); %画出双极性NRZ信号波形
axis([0 10 0 1.2]);
xlabel('t');
ylabel('双极性信号');
subplot(224); 
[d_sjx1f, d_sjx1, ~, f] = T2F(d_sjx1, ts, df, fs); %求出双极性NRZ信号功率谱
plot(f, 10*log10(abs(fftshift(d_sjx1f).^2 / length(f)))); %画出双极性NRZ信号功率谱
axis([-3*B 3*B -50 0]);
xlabel('f');
ylabel('双极性信号PDF');

% 画出调制信号波形及功率谱
% 对数字基带信号进行2ASK调制
ht = A * sin(2*pi*fc*t); %载波
s_2ask = d_NRZ(1:Lt) .* ht; %生成已调信号2ASK
pause %画出已调信号2ASK及其功率谱
figure(2)
subplot(221); 
plot(t, s_2ask); %画出2ASK信号
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2ASK');

% 求2ASK信号功率谱
[s_2askf, s_2ask, ~, f] = T2F(s_2ask, ts, df, fs); %求出2ASK信号功率谱
subplot(222);
plot(f, 10*log10(abs(fftshift(s_2askf).^2 / length(f)))); %画出2ASK信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2ASK信号PDF');

% 对数字基带信号进行2FSK调制
s_2fsk = A * cos(2*pi*fc*t + 2*pi*d_sjx(1:Lt).*t); %生成2FSK信号
pause %画出已调信号2FSK及其功率谱
subplot(223)
plot(t, s_2fsk); %画出2FSK波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2FSK');
subplot(224)
[s_2fskf, s_2fsk, ~, f] = T2F(s_2fsk, ts, df, fs); %求2FSK信号功率谱
plot(f, 10*log10(abs(fftshift(s_2fskf).^2 / length(f))));% 画出2FSK功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2FSK信号PDF');

% 对数字基带信号进行2PSK调制
s_2psk = d_sjx(1:Lt) .* ht;%生成2PSK信号
pause %画出已调信号2PSK及其功率谱
figure(3)
subplot(321)
plot(t, s_2psk); %画出2PSK波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2PSK'); 
subplot(322)
[s_2pskf, s_2psk, ~, f] = T2F(s_2psk, ts, df, fs); %求2PSK信号功率谱
plot(f, 10*log10(abs(fftshift(s_2pskf).^2 / length(f)))); %画出2PSK信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2PSK信号PDF');

% 将2PSK信号送入信道进行传输,先生成信道加性高斯白噪声噪声
snr_lin = 10^(snr/10); %换算成倍数
signal_energy = 0.5 * A^2 * Ts; %求出接收信号平均能量
noise_power = (signal_energy * fs) / (snr_lin * 4); %求出噪声方差(噪声均值为0)
noise_std = sqrt(noise_power); %求出噪声均方差
noise = noise_std .* randn(1, Lt);%以噪声均方差作为幅度产生高斯白噪声

% 将已调信号送入信道
pause %画出信道中的高斯白噪声及其功率谱
figure(4)
subplot(323)
plot(t,noise(1:Lt)); %画出噪声
xlabel('t');
ylabel('信道噪声');
axis([0 10 -3 3]);
[noisef, noise, ~, f] = T2F(noise, ts, df, fs); %求信道噪声功率谱
subplot(324)
plot(f, 10*log10(abs(fftshift(noisef).^2 / length(f)))); %画出信道噪声功率谱
axis([-fs/2-2 fs/2+2 -50 0]);
xlabel('f');
ylabel('信道噪声PDF');

r = s_2psk(1:Lt) + noise(1:Lt); %叠加了噪声的已调信号,相当于将已调信号送入理想信道
pause %画出加噪后的已调信号2PSK及其功率谱
subplot(325)
plot(t, r); %画出加噪后的已调信号2PSK
xlabel('t');
ylabel('加噪2PSK信号');
axis([0 10 -3 3]);
[rf, r, df1, f] = T2F(r, ts, df, fs); %求加噪后的已调信号2PSK功率谱
subplot(326) %画出加噪后已调信号的功率谱
plot(f, 10*log10(abs(fftshift(rf).^2 / length(f)))); %画出已调信号2PSK功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('加噪2PSK信号PDF');

% 进行解调
pause %画出带通滤波器
[H, f] = bp_f(length(rf), f_start, f_cutoff, df1, fs, 1); %经过理想带通滤波器
figure(5)
subplot(322)
plot(f, abs(fftshift(H))); %画出理想带通滤波器
axis([-fc-3*B fc+3*B -0.2 1.2]);
xlabel('f');
ylabel('理想BPF');

DEM = H .* rf;      %滤波器输出的频谱
[dem] = F2T(DEM, fs);%滤波器的输出波形 
dem1 = dem(1:Lt);
pause %经过理想带通滤波器后的信号波形及功率谱
subplot(323)%经过理想带通滤波器后的信号波形
plot(t, dem1)%画出经过理想带通滤波器后的信号波形
axis([0 10 -4 4]);
xlabel('t');
ylabel('理想BPF输出信号');
[demf1, dem1, ~, f] = T2F(dem1, ts, df, fs);%求经过理想带通滤波器后信号功率谱
subplot(324)
plot(f, 10*log10(abs(fftshift(demf1).^2 / length(f))));%画出经过理想带通滤波器后信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('理想BPF输出信号PDF');
%-----将理想BPF输出信号抽样判决
dem = dem(1:Lt);
panjue = zeros(1, N);%建立存储判决值的矩阵
%抽样判决,规则:大于等于0判1,小于0判-1
for i = 1:N
    if dem(fc * N_sample * (i - 1) + fc * N_sample / 2 + 1) >= 0%抽样判决时刻
        panjue(i) = 1;
    else
        panjue(i) = -1;
    end
end
%----画出判决出的基带信号波形,并和调制信号比较
rr = sigexpand(panjue, fc * N_sample);
rrt = ones(1, fc * N_sample); % NRZ波形
huifu_NRZ = conv(rr, rrt);
pause%观察调制信号和解调信号波形
figure(6)
%-------这个图为figure(6)--------%
subplot(224)
plot(t, d_sjx(1:Lt));%调制信号波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('调制信号');
subplot(223)
plot(t, huifu_NRZ(1:Lt));%解调信号波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('解调信号');
%-------------------统计误码数
numoferr = sum(abs(panjue-d)/2)/N;  %计算出错误码元数

在修改过的代码中,我去掉了 echo on;,并进行了一些细微的修正,使其更加符合MATLAB的语法规范。

请注意,由于代码中包含了较多的绘图操作,建议在运行代码前确保MATLAB的图形窗口处于打开状态,这样才能正确显示绘图结果。

希望以上修改的代码能够帮助您进行2ASK调制解调中信号波形及功率谱的分析!


原文地址: https://www.cveoy.top/t/topic/o5D 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录