# fskdemod
频移键控解调
函数库: TyCommunication
# 语法
z = fskdemod(y, M, freq_sep, nsamp)
z = fskdemod(y, M, freq_sep, nsamp, Fs)
z = fskdemod(y, M, freq_sep, nsamp, Fs, symorder)
# 说明
z = fskdemod(y, M, freq_sep, nsamp) 对用频移键控调制的复包络y信号进行非相干解调。
z = fskdemod(y, M, freq_sep, nsamp, Fs) 指定采样频率的单位为 Hz。示例
z = fskdemod(y, M, freq_sep, nsamp, Fs, symorder) 指定了函数如何将二进制赋值给相应的整数。
# 示例
AWGN中FSK信号的调制和解调
通过 AWGN 信道传递一个 FSK 调制信号并估计其产生的误码率(BER)。将估计的误码率(BER)与理论值进行比较。
设置函数参数:
using TyCommunication
using TyMath
rng = MT19937ar(1234)
M = 2 # Modulation order
k = log2(M) # Bits per symbol
EbNo = 5 # Eb/No (dB)
Fs = 16 # Sample rate (Hz)
nsamp = 8 # Number of samples per symbol
freqsep = 10 # Frequency separation (Hz)
生成随机的符号数据:
data = randi(rng, [0 M - 1], 5000, 1)
频移键控调制:
txsig = fskmod(data,M,freqsep,nsamp,Fs)
通过AWGN信道传递信号:
rxSig = awgn(rng, txsig, EbNo + 10 * log10(k) - 10 * log10(nsamp), "measured")
解调接收的信号:
dataOut = fskdemod(rxSig,M,freqsep,nsamp,Fs)
计算误码率:
num,BER = biterr(data,dataOut)
确定理论误码率,并与估计的误码率进行比较。如果示例使用的是随机数,误码率的值可能会有所不同。
BER_theory, = berawgn(EbNo,"fsk",M,"noncoherent")
(BER, BER_theory)
BER = 0.1096
BER_theory = 0.10287033054190721
# 输入参数
y - FSK调制输出信号向量 | 矩阵
FSK调制信号的复基带表示,指定为复数的向量或矩阵。y 的列表示独立的信道。如果 y 是一个多行多列的矩阵,fskdemod 将独立处理这些列。
数据类型:Float64
支持复数:是
M - 调制阶数 2 的整数次幂
调制阶数,指定为 2 的整数次幂。
例如: 2 | 4 | 16
数据类型:Float64
freq_sep - 频率间的期望间隔 正标量
频率间的期望间隔,单位为赫兹(Hz)。
当 M=2 时,利用 z = fskdemod(y,M,freq_sep,nsamp) 时,freq_sep<=1;利用 z = fskdemod(y,M,freq_sep,nsamp,Fs) 时,freq_sep<=Fs。
当 M>2 时,利用 z = fskdemod(y,M,freq_sep,nsamp) 时,freq_sep 必须满足 (M-1)*freq_sep<=1;利用 z = fskdemod(y,M,freq_sep,nsamp,Fs) 时,freq_sep 必须满足 (M-1)*freq_sep<=Fs。
数据类型:Float64
nsamp - 输出符号的样本数 大于 1 的正标量
输出符号的样本数,指定为大于 1 的正标量。
数据类型:Float64
Fs - 采样频率 1Hz(默认) | 正标量
采样频率,指定为正标量。
数据类型:Float64
symorder - 符号顺序 "bin"(默认) | "gray"
符号顺序,指定为"bin"或"gray"。此参数指定函数如何将二进制向量赋值给相应的整数。
如果 symorder 指定为 "bin",则该函数使用自然的二进制编码排序。
如果 symorder 指定为 "gray",则该函数使用格雷编码排序。
数据类型:String
# 输出参数
z - 输出信号 向量 | 矩阵
输出信号,指定为一个正整数向量或矩阵。x 的元素的值必须在 [0,M - 1] 的范围内。
例如:rand(rng, 0:3,100,1)
数据类型:Float64