SSB信号调制解调滤波法.docx
《SSB信号调制解调滤波法.docx》由会员分享,可在线阅读,更多相关《SSB信号调制解调滤波法.docx(14页珍藏版)》请在冰豆网上搜索。
SSB信号调制解调滤波法
SSB信号调制解调(滤波法)
SSB(滤波法法)调制解调Matlab.m文件源码
%SSB信号调制解调
clear;clc;
f0=1;%信源信号频率(Hz)
E0=1;%信源信号振幅(V)
E=1;%载波分量振幅(V)
fc=10;%载波分量频率(Hz)
t0=1;%信号时长
snr=15;%解调器输入信噪比dB
dt=0.003;%系统时域采样间隔
fs=1/dt;%系统采样频率
df=0.001;%所需的频率分辨率
t=0:
dt:
t0;
Lt=length(t);%仿真过程中,信号长度
snr_lin=10^(snr/10);%解调器输入信噪比
%-------------画出调制信号波形及频谱
%产生模拟调制信号
m=E*cos(2*pi*f0*t);
L=min(abs(m));%包络最低点
R=max(abs(m));%包络最高点
%画出调制信号波形和频谱
clf;
figure
(1);
%%
%画出调制信号波形
subplot(411);
plot(t,m(1:
length(t)));
axis([0,t0,-R-0.3,R+0.3]);%设置坐标范围
xlabel('t');title('调制信号');
set(gca,'YTick',-R:
1:
R);
subplot(412);
[M,m,df1,f]=T2F_new(m,dt,df,fs);%求出调制信号频谱
[Bw_eq]=signalband(M,df,t0);%求出信号等效带宽
f_start_low=fc-Bw_eq;%求出产生下边带信号的带通滤波器的起始频率f_cutoff_low=fc;%求出产生下边带信号的带通滤波器的截止频率f_start_high=fc;%求出产生上边带信号的带通滤波器的起始频率f_cutoff_high=fc+Bw_eq;%求出产生上边带信号的带通滤波器的截止频率
plot(f,fftshift(abs(M)));%画出调制信号频谱%M:
傅里叶变换后的频谱序列
SSB(滤波法法)调制解调Matlab.m文件源码
xlabel('f');title('调制信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(M)+0.3]);
set(gca,'XTick',-10:
10:
10);
set(gca,'XGrid','on');
%%
%载波及其频谱
subplot(413);
c=cos(2*pi*fc*t);%载波
plot(t,c);
axis([0,t0,-E-0.2,E+0.2]);
xlabel('t');title('载波');
subplot(414);%载波频谱
[C,c,df1,f]=T2F_new(c,dt,df,fs);
plot(f,fftshift(abs(C)));%画出载波频谱
xlabel('f');title('载波频谱');
axis([-fc-5*f0,fc+5*f0,0,max(C)+0.3]);
set(gca,'XTick',-10:
10:
10);
set(gca,'XGrid','on');
%%
%已调信号及其频谱
figure
(2);
subplot(321);%画已调信号
u=m(1:
Lt).*c(1:
Lt);
plot(t,u);
axis([0,t0,-max(u)-0.5,max(u)+0.5]);
xlabel('t');title('DSB信号');
set(gca,'YTick',-max(u):
1:
max(u));
subplot(322);
[U,u,df1,f]=T2F_new(u,dt,df,fs);
plot(f,fftshift(abs(U)));%画出已调信号频谱
xlabel('f');title('DSB信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(U)+0.3]);
set(gca,'XTick',-10:
10:
10);
set(gca,'XGrid','on');
%%
%滤波法产生SSB信号
[H_low,f_low]=bp_f(length(u),f_start_low,f_cutoff_low,df1,fs,1);%求滤波法产生下边带需要的带通滤波器
[H_high,f_high]=bp_f(length(u),f_start_high,f_cutoff_high,df1,fs,1);
SSB(滤波法法)调制解调Matlab.m文件源码
%[H,f]=bp_f(length(sam),f_start,f_cutoff,df1,fs,1);
subplot(323);
plot(f_low,fftshift(abs(H_low)));%画出带通滤波器
xlabel('f');title('下边带带通滤波器');
axis([-f_cutoff_low-1,f_cutoff_low+1,-0.05,1.05]);
subplot(324);
plot(f_high,fftshift(abs(H_high)));%画出带通滤波器xlabel('f');title('上边带带通滤波器');
axis([-f_cutoff_high-1,f_cutoff_high+1,-0.05,1.05]);
subplot(325);
plot(f_low,fftshift(abs(H_low)));holdon;%画出带通滤波器
plot(f,fftshift(abs(U)));%画出已调信号频谱axis([-fc-5,fc+5,-0.05,1.05]);
xlabel('f');title('下边带信号');
subplot(326);
plot(f_high,fftshift(abs(H_high)));holdon;%画出带通滤波器
plot(f,fftshift(abs(U)));%画出已调信号频谱axis([-fc-5,fc+5,-0.05,1.05]);
xlabel('f');title('上边带信号');
%%
%----------------经过带通滤波器,产生单边带信号(以上边带信号为例)
samuf=H_high.*U;%滤波器输出信号的频谱
[samu]=F2T_new(samuf,fs);%滤波器输出信号的波形
figure(3);
subplot(321);
plot(t,samu(1:
Lt));
axis([0,t0,-max(samu)-0.3,max(samu)+0.3]);
xlabel('t');title('上边带信号');
%%
[samuf,samu,df1,f]=T2F_new(samu(1:
Lt),dt,df,fs);%上边带信号频谱
subplot(322);
plot(f,fftshift(abs(samuf)));%画出经过理想带通滤波器后信号频谱xlabel('f');title('上边带信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(samuf)+0.1]);
set(gca,'XTick',-10:
10:
10);
set(gca,'XGrid','on');
SSB(滤波法法)调制解调Matlab.m文件源码
%%
%将已调信号送入信道
%先根据所给信噪比产生高斯白噪声
signal_power=power_x(samu(1:
Lt));%已调信号的平均功率
noise_power=(signal_power*fs)/(snr_lin*4*Bw_eq);%求出噪声方差(噪声均值为0)noise_std=sqrt(noise_power);%噪声标准差
noise=noise_std*randn(1,Lt);%产生噪声
%画出信道高斯白噪声波形及频谱,此时,噪声已实现,为确知信号,可求其频谱
subplot(323);
plot(t,noise);
axis([0,t0,-max(noise),max(noise)]);
xlabel('t');title('噪声信号');
subplot(324);
[noisef,noise,df1,f]=T2F_new(noise,dt,df,fs);%噪声频谱
plot(f,fftshift(abs(noisef)));%画出噪声频谱
xlabel('f');title('噪声频谱');
%%
%信道中的信号%叠加了噪声的已调信号频谱
sam=samu(1:
Lt)+noise(1:
Lt);
subplot(325);
plot(t,sam);
axis([0,t0,-max(sam),max(sam)]);
xlabel('t');title('信道中的信号');
subplot(326);
[samf,sam,df1,f]=T2F_new(sam,dt,df,fs);%求出叠加了噪声的已调信号频谱plot(f,fftshift(abs(samf)));%画出叠加了噪声的已调信号频谱xlabel('f');title('信道中信号的频谱');
axis([-fc-5*f0,fc+5*f0,0,max(samf)+0.1]);
set(gca,'XTick',-10:
10:
10);
set(gca,'XGrid','on');
%%
%----------------经过带通滤波器
%经过理想滤波器后的信号及其频谱
DEM=H_high.*samuf;%滤波器输出信号的频谱
[dem]=F2T_new(DEM,fs);%滤波器输出信号的波形
figure(4);
SSB(滤波法法)调制解调Matlab.m文件源码
subplot(321);%经过理想带通滤波器后的信号波形
plot(t,dem(1:
Lt));%画出经过理想带通滤波器后的信号波形
axis([0,t0,-max(dem)-0.3,max(dem)+0.3]);
xlabel('t');title('理想BPF输出信号');
%%
[demf,dem,df1,f]=T2F_new(dem(1:
Lt),dt,df,fs);%求经过理想带通滤波器后的信号频谱subplot(322);
plot(f,fftshift(abs(demf)));%画出经过理想带通滤波器后信号频谱xlabel('f');title('理想BPF输出信号频谱');
axis([-fc-5*f0,fc+5*f0,0,max(demf)+0.1]);
set(gca,'XTick',[-10:
10:
10]);
set(gca,'XGrid','on');
%%
%--------------和本地载波相乘,即混频
subplot(323);
plot(t,c(1:
Lt));
axis([0,t0,-E-0.2,E+0.2]);
xlabel('t');title('本地载波');
subplot(324);%频谱载波
[C,c,df1,f]=T2F_new(c(1:
Lt),dt,df,fs);
plot(f,fftshift(abs(C)));%画出载波频谱
xlabel('f');title('本地载波频谱');
axis([-fc-5*f0,fc+5*f0,0,max(C)+0.3]);
set(gca,'XTick',[-10:
10:
10]);
set(gca,'XGrid','on');
%再画出混频后信号及其频谱
der=dem(1:
Lt).*c(1:
Lt);%混频
%%
subplot(325);%画出混频后的信号
plot(t,der);
axis([0,t0,-R,R]);
xlabel('t');title('混频后的信号');
subplot(326);
[derf,der,df1,f]=T2F_new(der,dt,df,fs);%求出混频后的信号频谱
plot(f,fftshift(abs(derf)));%画出混频后的信号频谱
xlabel('f');title('混频后的信号频谱');
axis([-2*fc-5*f0,2*fc+5*f0,0,max(derf)+0.3]);
SSB(滤波法法)调制解调Matlab.m文件源码
set(gca,'XTick',[-10:
10:
10]);
set(gca,'XGrid','on');
%%
%-----------------经过低通滤波器
%画出理想低通滤波器
figure(5);
[LPF,f]=lp_f(length(der),Bw_eq,df1,fs,1);%求出低通滤波器
subplot(411);
plot(f,fftshift(abs(LPF)));%画出理想低通滤波器
xlabel('f');title('理想LPF');
axis([-f0-Bw_eq,f0+Bw_eq,-0.05,1.05]);
%%
%混频信号经过理想低通滤波器后的频谱及波形
DM=LPF.*derf;%理想低通滤波器输出的频谱
[dm]=F2T_new(DM,fs);%滤波器的输出波形
subplot(412);
plot(t,dm(1:
Lt));%画出经过低通滤波器后的解调波形axis([0,t0,-max(dm)-0.2,max(dm)+0.2]);
xlabel('t');title('恢复信号');
set(gca,'YTick',[-1:
0.5:
1]);
set(gca,'YGrid','on');
subplot(413);
[dmf,dm,df1,f]=T2F_new(dm(1:
Lt),dt,df,fs);%求LPF输出信号的频谱
plot(f,fftshift(abs(dmf)));%画出LPF输出信号的频谱xlabel('f');title('恢复信号频谱');
axis([-fc,fc,0,max(abs(dmf))+0.1]);
set(gca,'XTick',[-10:
10:
10]);
set(gca,'XGrid','on');
%%
subplot(414);
plot(t,m(1:
Lt));%画出调制信号波形
xlabel('t');title('调制信号');
set(gca,'YTick',[-R:
1:
R]);
axis([0,t0,-R-0.3,R+0.3])
xlabel('t');title('调制信号');
SSB(滤波法法)调制解调Matlab.m文件源码
子函数
%序列的傅里叶变换
%各参数含义与子函数T2F中的完全相同,完成序列的傅里叶变换
function[M,m,df]=fftseq(m,ts,df)
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df=fs/n;
end
%计算信号功率
functionp=power_x(x)
%x:
输入信号
%p:
返回信号的x功率
p=(norm(x).^2)./length(x);
end
%将信号从频域转换到时域
function[m]=F2T(M,fs)
%----------------输入参数
%M:
信号的频谱
%fs:
系统采样频率
%----------------输出(返回)函数
%m:
傅里叶逆变换后的信号,注意其长度为2的整数次幂,利用其画波形时,要注意选取m的一部分,选取长度和所给时间序列t的长度要一致,plot(t,m(1:
length(t))),否则会出错m=real(ifft(M))*fs;
end
%将信号从时域转换到频域
function[M,m,df1,f]=T2F(m,ts,df,fs)
SSB(滤波法法)调制解调Matlab.m文件源码
%----------------输入参数
%m:
信号
%ts:
系统时域采样间隔、
%df:
所需的采样频率
%fs:
系统采样频率
%----------------输出(返回)函数
%M:
傅里叶变换后的频谱序列
%m:
输入信号参与傅里叶变换后对应序列,需要注意的是,该序列与输入信号m的区别,其长度是不一样的,输入的m长度不一定是2的整数次幂,而傅里叶变换要求输入信号长度为2的整数次幂,
%故傅里叶变换前需要对m信号进行补零操作,其长度有所增加,估输出参数中的m为补零后的输入信号,其长度与输入参数m不一样,但与M,f的长度是一样的,
%并且,其与时间序列t所对应的序列m(1:
length(t))与输入参数中的m是一致的。
%df1:
返回的频率分辨率
%f:
与M相对应的频率序列
[M,m,df1]=fftseq(m,ts,df);
f=[0:
df1:
df1*(length(m)-1)]-fs/2;
M=M/fs;
End
%低通滤波器
function[H,f]=lp_f(n,f_cutoff,df1,fs,p)
%低通滤波器函数输入设计的滤波器参数,产生低通滤波器频率特性函数H和频率向量f%------------输入参数
%n低通滤波器的输入信号长度
%f_cutoff低通滤波器截止频率
%df1频率分辨率
%fs抽样频率
%p滤波器振幅
%------------输出(返回)函数
%H低通滤波器频率响应
%f频率向量
%滤波器设计
n_cutoff=floor(f_cutoff/df1);
f=[0:
df1:
df1*(n-1)]-fs/2;
H=zeros(size(f));
H(1:
n_cutoff)=p*ones(1,n_cutoff);
H(length(f)-n_cutoff+1:
length(f))=p*ones(1,n_cutoff);
end
%带通滤波器
SSB(滤波法法)调制解调Matlab.m文件源码
function[H,f]=bp_f(n,f_start,f_cutoff,df1,fs,p)
%带通滤波器函数,输入设计的滤波器参数,产生带通滤波器频率特性函数H和频率向量f%------------输入参数
%n带通滤波器的输入信号长度
%f_start通带起始频率
%f_cutoff带通滤波器截止频率
%df1频率分辨率
%fs抽样频率
%p滤波器振幅
%------------输出(返回)函数
%H带通滤波器频率响应
%f频率向量
%滤波器设计
n_cutoff=floor(f_cutoff/df1);
n_start=floor(f_start/df1);
f=[0:
df1:
df1*(n-1)]-fs/2;
H=zeros(size(f));
H(n_start+1:
n_cutoff)=p*ones(1,n_cutoff-n_start);
H(length(f)-n_cutoff+1:
length(f)-n_start)=p*ones(1,n_cutoff-n_start);
end
function[Bw_eq]=signalband(sf,df,T)
%计算信号等效带宽
%sf:
信号频谱
%df:
频率分辨率
%T:
信号持续时间
sf_max=max(abs(sf));
Bw_eq=sum(abs(sf).^2)*df/T/sf_max.^2;