数字调制(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’对应频率为的载波,‘0’对应频率为的载波。
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 |
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义