基带与载波调制的有关思考+部分matlab画图

基带与载波调制的有关思考+部分matlab画图


最近在做调制信号的模拟,在与现有数据集的对比下发现了很多问题,暴露出自己通信知识的匮乏,切记学以致用。
https://blog.csdn.net/hungry_bug/article/details/49914385
这篇问答文章很有用。

关于matlab中的xxxmod函数

使用pskmod、qammod、mskmod等函数时非常蒙圈,输出的是符号映射,而且并不需要输入采样率(fskmod除外),后来看到这篇文章豁然开朗:
https://www.ilovematlab.cn/thread-84390-1-1.html
A:
设载波为carrier = exp(jwct)
modem.psk输出结果为y
则调制为sig = real(y.*carrier);

y实际上为复包络
y = real(y) + j*imag(y);
I路为real(y)
Q路为imag(y)

real(y)cos(wct)-imag(y)sin(wct) = real(y.*carrier);
两者等价

原来只是进行了对信号的基带调制,相当于用函数做了一个符号映射,并没有上载波!!

频偏

https://www.ilovematlab.cn/thread-543333-1-1.html

iq信号

i路q路分别传送信号的实部与虚部
再发一遍杨学志老师的推导,加深理解。上载波是只需要点乘exp(1i2pifct)即可,其中fc为载波频率,t为采样时间序列(例如:t= 0: 1/fs/99 : 1/fs ;)
在这里插入图片描述

matlab画图

问题

发现radioml数据内class并没有与序号对应,(am信号的iq谱实际上是 fm的iq谱)
应该学习:
传统信号识别方法(高阶矩?)
调制信号fft

有错误请不吝指出!

代码

通过代码,加深了对载波、采样率、调制等的理解。

%功能:生成bpsk调制信号

%生成两张图片,分别是带fc和不带fc的码序列、调制后信号、fft
%感觉还是带载波时fft才会出现两个尖,且调制后才会出现成形波形。
clear all; 
close all;
clc;
%% 载波为fc
max=20; %信源
%g=zeros(1,max);
 g=randi([0 1],1,max);     %长度为max的随机二进制序列
cp=[];
mod1=[];
f=2*pi;                    
fc=900;                  %载波频率
fs=900;                  %采样率
 
 %0-2pi 保证范围是一个三角函数的周期2*pi
t=0:1/fs/99:1/fs;
Sp=length(t);                    
cm=[];mod=[];
%%
%A 作用:展示原始码序列
%B 作用:为了与载波信号点乘所作的扩展
%c 作用:载波信号
%tiaoz 作用:已调信号
for n=1:length(g);
    if g(n)==0; 
        A=zeros(1,Sp);
        B=ones(1,Sp);      %这里的ones是为了点乘一致
        c=cos(f*t*fc);            %载波信号
    else g(n)==1;
        A=ones(1,Sp);  
        B=ones(1,Sp); 
        c=cos(f*t*fc+pi);      %载波信号
    end
    cp=[cp A];
    cm=[cm B];              %s(t)码元宽度
    mod=[mod c];          %与s(t)等长的载波信号
end
tiaoz=cm.*mod;          %e(t)调制
%%

subplot(3,1,1);plot(cp,'LineWidth',1.5);grid on;
title('Binary Signal');
axis([0 Sp*length(g) -2.5 2.5]);
 
subplot(3,1,2);
plot(tiaoz,'LineWidth',1.5);grid on;
title('PSK modulation with fc');
axis([0 Sp*length(g) -2.5 2.5]); 

subplot(3,1,3);
plot(fftshift(abs(fft(tiaoz))),'LineWidth',1.5);grid on;
title('PSK fft with fc');

%% 载波为0 fc=0
fc=0;
cp=[];cm=[];mod=[];
for n=1:length(g);
    if g(n)==0; 
        A=zeros(1,Sp);
        B=ones(1,Sp);      %这里的ones是为了点乘一致
        c=cos(f*t*fc);            %载波信号
    else g(n)==1;
        A=ones(1,Sp);  
        B=ones(1,Sp); 
        c=cos(f*t*fc+pi);      %载波信号
    end
    cp=[cp A];
    cm=[cm B];              %s(t)码元宽度
    mod=[mod c];          %与s(t)等长的载波信号
end
tiaoz=cm.*mod;

figure(2)
subplot(3,1,1);plot(cp,'LineWidth',1.5);grid on;
title('Binary Signal');
axis([0 Sp*length(g) -2.5 2.5]);
 
subplot(3,1,2);
plot(tiaoz,'LineWidth',1.5);grid on;
title('PSK modulation without fc');
axis([0 Sp*length(g) -2.5 2.5]); 

subplot(3,1,3);
plot(fftshift(abs(fft(tiaoz))),'LineWidth',1.5);grid on;
title('PSK fft without fc');

在这里插入图片描述
在这里插入图片描述
其实这里漏掉了一步:应该在基带符号映射后加根升余弦滤波器进行信号成形!以后我会后续讲这部分内容。

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基带信号是指没有经过频率调制的信号,而BPSK调制是一种基带调制技术。在MATLAB中,我们可以使用一些函数和语句来生成和调制基带信号。 首先,我们可以使用MATLAB的linspace函数生成一组基带信号的采样点。假设要生成的基带信号是一个正弦波,可以使用以下语句生成: t = linspace(0, 1, 1000); % 生成从0到1的1000个等间隔采样点 baseband_signal = sin(2*pi*10*t); % 生成频率为10Hz的正弦波 接下来,我们可以使用MATLAB的randi函数生成一组随机的二进制比特序列,用于BPSK调制。假设比特序列的长度是N,可以使用以下语句生成: N = 100; % 比特序列的长度 binary_sequence = randi([0, 1], 1, N); % 生成长度为N的随机二进制比特序列 然后,我们可以使用MATLAB的pskmod函数对基带信号进行BPSK调制。假设基带信号的采样频率是Fs,可以使用以下语句进行调制: Fs = 1000; % 基带信号的采样频率 modulated_signal = pskmod(binary_sequence, 2, pi); % 进行BPSK调制 最后,我们可以使用MATLAB的plot函数将生成的基带信号和调制后的信号绘制在时域上,以便进行可视化分析。可以使用以下语句进行绘制: plot(t, baseband_signal); % 绘制基带信号 hold on; plot(t, modulated_signal); % 绘制调制后的信号 xlabel('时间'); ylabel('幅度'); legend('基带信号', '调制信号'); ### 回答2: MATLAB是一种流行的编程和数值计算软件,常用于信号处理和通信系统设计。基带信号是指未经过调制的信号,而BPSK调制是一种二进制相移键控调制技术。 在MATLAB中,可以使用信号处理工具箱来生成和调制基带信号。首先,可以使用sin函数生成信号的载波波形。例如,可以使用以下代码生成一个频率为f的正弦波: t = 0:0.001:1; % 生成时间序列 f = 10; % 设置载波频率 carrier = sin(2*pi*f*t); % 生成载波波形 然后,可以使用二进制数字序列来表示要传输的数据。BPSK调制将二进制0和1映射到载波的不同相位,通常将二进制0映射为0度相位,将二进制1映射为180度相位。 例如,可以使用以下代码生成一个随机的二进制数字序列: data = randi([0,1],1,100); % 生成100个随机二进制数字 接下来,可以使用上述生成的载波波形和二进制数字序列进行BPSK调制。代码如下: bpsk_signal = zeros(size(t)); % 创建空的BPSK信号向量 for i = 1:length(data) if data(i) == 0 bpsk_signal = bpsk_signal + carrier; % 映射二进制0到正弦波 else bpsk_signal = bpsk_signal - carrier; % 映射二进制1到正弦波 end end 最后,可以通过绘制波形图来查看BPSK调制后的信号。代码如下: plot(t, bpsk_signal); xlabel('Time'); ylabel('Amplitude'); title('BPSK Modulated Signal'); 这样,就可以使用MATLAB生成和调制基带信号进行BPSK调制。 ### 回答3: MATLAB是一种广泛使用的科学计算软件,可以用于各种工程和科学领域的数据处理和模拟。基带信号是指没有经过频率变换或调制的信号,在MATLAB中可以通过数字信号处理工具箱来生成和处理基带信号。 BPSK(Binary Phase Shift Keying)是一种调制技术,用于将数字信息转换为模拟信号。BPSK调制的基本思想是将数字信号划分为一系列的比特,并根据每个比特的值生成对应的相位。在MATLAB中,可以使用脉冲幅度调制函数(PAM)来生成二进制信号,然后使用正弦函数生成相应的相位调制信号。 以下是一个简单的MATLAB代码示例,用于生成和调制BPSK信号: ```matlab % 生成二进制信息信号 info = [0 1 1 0 1 0 1 0 1 1 0 0 1]; % 将二进制信号转换为BPSK信号 bpsk = 2 * info - 1; % 设置采样频率和持续时间 fs = 100; % 采样频率 t = 0:(1/fs):(length(info)-1)/fs; % 时间向量 % 生成载波信号 fc = 10; % 载波频率 carrier = cos(2*pi*fc*t); % BPSK调制 modulated_signal = bpsk .* carrier; % 显示结果 subplot(2,1,1); plot(t, info, 'o-'); xlabel('时间'); ylabel('信号幅度'); title('二进制信息信号'); subplot(2,1,2); plot(t, modulated_signal, 'r'); xlabel('时间'); ylabel('调制信号幅度'); title('BPSK调制信号'); % 播放声音(可选) sound(modulated_signal, fs); ``` 这段代码首先生成了一个二进制信息信号`info`,然后将其转换为BPSK信号`bpsk`。接下来,代码设置了采样频率`fs`和时间向量`t`,用于生成载波信号`carrier`。最后,BPSK信号和调制信号进行相乘得到最终的调制信号`modulated_signal`。运行代码后,可以通过绘图显示二进制信息信号和BPSK调制信号的波形,并通过可选的声音播放函数听到调制后的信号。 通过该代码示例,可以对MATLAB中BPSK调制的基本实现有一个基础的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值