📄 qpsk_mod_zibian.m
字号:
% 这个函数返回调制以后的qpsk信号;
% 这里的调制考虑了载波发送的问题;
% 编程原则是先写出基本功能,在逐步完善;
function [y_mod]=...
qpsk_mod_ZiBian(x,fc,fs,symbol_t,theta,plot_flag)
% 注意把握好fc,fs,之间的关系,是一个四进制码元内的载波信号点
% symbol_t表示的是一个调制符号的持续时间,
% 对于使用者来说,我知道的只是:载波频率,抽样频率,调制以后的
% 符号持续时间;
% x表示的是输入的二进制序列码,是列向量,
% fc是载波频率,fs是采样频率,
% n是每一个四进制码元下拥有的载波信号采样点数;
% qpsk调制的原理很简单,第一步:完成星座图对应,
% 第二步:用这些星座图上的点乘以载波;
% 画图标志:plot_flag=1,就画图,否则不画图;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<6
error('the input arguments are not complete');
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(x,1)<=size(x,2)
x=x';
else
x=x;
end; % 把x变换成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 时间的设置要注意两点:采样点数和采样间隔;
n=ceil(symbol_t*fs);
t=(0:n-1)/fs;
% 一个四进制码元下的载波:
signal_i=cos(2*pi*fc*t);
signal_q=sin(2*pi*fc*t);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 注意信号的发送方向:------------------x(i+1)--x(i)---->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面是调制部分:
signal_mod=[]; temp=[];
for i=1:2:(size(x,1)-1)
% 首先是完成2,4进制的转换;
if (x(i)==0) & (x(i+1)==0)
signal_symbol=0;
elseif (x(i)==1) & (x(i+1)==0)
signal_symbol=1;
elseif (x(i)==0) & (x(i+1)==1)
signal_symbol=2;
elseif (x(i)==1) & (x(i+1)==1)
signal_symbol=3;
else
error('The input x are not apt to the function need');
end;
% 二进制码元转化为四进制符号;
temp=[temp,signal_symbol];
% 星座图对应;
signal_constellation=pskmod(signal_symbol,4,theta);
% 调制载波;
signal_mod_i=real(signal_constellation).*signal_i;
signal_mod_q=imag(signal_constellation).*signal_q;
signal_mod_temp=signal_mod_i+signal_mod_q;
signal_mod=[signal_mod,signal_mod_temp];
end;
symbol_base=temp;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(signal_mod,1)<=size(signal_mod,2)
signal_mod=signal_mod';
else
signal_mod=signal_mod;
end; % 把signal_mod变换成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 在本函数的返回端得到调制好的信号;
y_mod=signal_mod;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if plot_flag==1
fft_signal_mod=abs(fftshift(fft(signal_mod)));
% 画图;
figure;
subplot(221);
plot((0:size(x)-1)/fs,x); title('基带二进制信号');
xlabel('时间(s)'); ylabel('信号幅度');
subplot(222);
plot((0:size(signal_mod,1)-1)/fs,signal_mod);
title('调制后的信号'); xlabel('时间(s)'); ylabel('信号幅度');
subplot(223);
f_n=size(fft_signal_mod,1);
plot(fs*(-f_n/2:f_n/2-1)/f_n,fft_signal_mod);
title('qpsk调制信号的频谱');
xlabel('频率(Hz)'); ylabel('幅度'); axis tight; grid on;
subplot(224);
plot(fs*(-f_n/2:f_n/2-1)/f_n,20*log10(fft_signal_mod));
title('qpsk调制信号的频谱(单位(dB))');
xlabel('频率(Hz)'); ylabel('幅度(dB)'); grid on;
% 这里对dB图的axis 不作限制;
elseif plot_flag==0
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -