数字调制(ASK、FSK、PSK)

2ASK(二进制幅移键控)又称OOK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function askdigital(s,f)
% 实现ASK调制
% s——输入二进制序列;f——载波的频率,即:一个码元周期包括f个载波周期
% 调用举例:askdigital([1 0 1 1 0], 2)
t=0:2*pi/99:2*pi;                                     %初始化定义,1*100的矩阵
cp=[];mod=[];bit=[];
 
for n=1:length(s);                                   % 调制过程
    if s(n)==0;
        bit1=zeros(1,100);   % 100是码元周期
    else  % s(n)==1;
        bit1=ones(1,100);   
    end
    c=sin(f*t);
    mod=[mod c];   
    bit=[bit  bit1];
end
ask=bit.*mod;
subplot(2,1,1);
plot(bit,'k','LineWidth',1);grid on;       
ylabel('Binary Signal');
axis([0 100*length(s) -2.5 2.5]);
subplot(2,1,2);
plot(ask,'k','LineWidth',1);grid on;
ylabel('ASK modulation');
axis([0 100*length(s) -2.5 2.5]);

  2FSK:‘1’对应频率为ω1的载波,‘0’对应频率为ω2的载波。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function fskdigital(s,f0,f1)
% 实现 FSK 调制
% s——输入二进制序列    f0,f1——两个不同频率的载波
% 调用举例 (f0  f1 必须是整数) : fskdigital([1 0 1 1 0],1,2)
t=0:2*pi/99:2*pi;                              %初始化定义
cp=[];mod=[];bit=[];
 
for n=1:length(s);                            % 调制过程
    if s(n)==0;
        cp1=ones(1,100);
        c=sin(f0*t);
        bit1=zeros(1,100);
    else %s(n)==1;
        cp1=ones(1,100);
        c=sin(f1*t);
        bit1=ones(1,100);   
    end
    cp=[cp cp1];   
    mod=[mod c];   
    bit=[bit bit1];
end
fsk=cp.*mod;
% fsk = mod;
 
subplot(2,1,1);                              
plot(bit,'k','LineWidth',1);grid on;
ylabel('Binary Signal');
axis([0 100*length(s) -2.5 2.5]);
subplot(2,1,2);
plot(fsk,'k','LineWidth',1);grid on;
ylabel('FSK modulation');
axis([0 100*length(s) -2.5 2.5]);

  或用Matlab提供的函数fskmod

  • 调用格式

  y= fskmod(x,M,freq_sep,nsamp);

  y=fskmod(x,M,freq_sep,nsamp,Fs);

  • 参数说明

  x:消息信号

  M:表示消息的符号数,必须是2的整数幂,M进制信号(0~M-1)

  freq_sep:两载波之间的频率间隔,单位Hz

  nsamp:输出信号的采样数,必须是大于1的正整数

  Fs:根据奈奎斯特采样定理,(M-1)*freq_seq <= Fs

1
2
3
4
5
6
7
8
M=2;freqsep=8;nsamp=8;Fs=32;
x=randi([0,M-1],1000,1);
y=fskmod(x,M,freqsep,nsamp,Fs);
ly = length(y);
%画2FSK的信号频谱
freq= -Fs/2:Fs/ly : Fs/2-Fs/ly;
Syy = fftshift(abs(fft(y)));
plot(freq,Syy)

  


PSK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function bpskdigital( s, f )
%实现BPSK
%   s:输入二进制序列,f:载波信号的频率(一个码元有几个载波周期)
%   调用举例:bpskdigital([1 0 1 1 0], 2)
 t = 0:2*pi/99:2*pi;
 cp = [];
 mod = []; bit = [];
 for n=1:length(s)
     if s(n) == 0
         cp1 = -ones(1,100);
         bit1 = zeros(1,100);
     else %s(n)==1
         cp1 = ones(1,100);
         bit1 = ones(1,100);
     end
     c= sin(f*t);
     cp = [cp,cp1];
     mod = [mod,c];
     bit = [bit,bit1];
 end
 bpsk = cp .* mod;
 subplot(211);
 plot(bit,'LineWidth',1.5);
 grid on;
 ylabel('Binary Signal');
 axis([0 100*length(s) -2.5 2.5]);
 subplot(212);
 plot(bpsk,'LineWidth',1.5);
 grid on;
 ylabel('BPSK modulation');
 axis([0 100*length(s) -2.5 2.5]);
 
end

  

 

posted @   htj10  阅读(9270)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
TOP
点击右上角即可分享
微信分享提示