已知 FM调制信号为;SFM = A*cos(2*pi*fc*t+Kf*Am/2/pi/fm.*sin(2*pi*fm*t)); 加入高斯白噪声后的信号为:SNR = 10; SFM_noisy = awgn(SFM, SNR, 'measured');求绘制眼图的代码
时间: 2023-12-18 13:29:21 浏览: 120
绘制眼图的代码如下:
```
% 设置参数
fc = 1000; % 载波频率
fm = 100; % 调制信号频率
Am = 1; % 调制信号幅度
Kf = 50; % 调频系数
SNR = 10; % 信噪比
% 生成调制信号
t = 0:0.0001:0.1; % 时间序列
SFM = A*cos(2*pi*fc*t+Kf*Am/2/pi/fm.*sin(2*pi*fm*t)); % FM调制信号
% 加入高斯白噪声
SFM_noisy = awgn(SFM, SNR, 'measured');
% 绘制眼图
eyediagram(SFM_noisy, 2*length(t), length(t));
```
其中,`eyediagram` 函数用于绘制眼图,第一个参数为信号,第二个参数为每个眼图周期的长度,第三个参数为每个眼图周期的偏移量。在本例中,我们将每个周期的长度设置为原始信号长度的两倍,偏移量设置为原始信号长度。
相关问题
clear all; close all; clc; M=10; L=100; Ts=1; Rb=1/Ts; dt=Ts/L; fs=1/dt; TotalT=M*Ts; t=0:dt:TotalT-dt; wave=randint(1,M); fz=ones(1,L); x1=wave(fz,:); dnrz=reshape(x1,1,L*M); fc=2*Rb; kf=0.3; sfm=modulate(dnrz,fc,fs,'fm',kf); subplot(121); plot(t,dnrz); axis([0 TotalT -0.1 1.1]); subplot(122); plot(t,sfm);
这段代码实现了一个随机数据生成的FM数字调制信号,并绘制了时域波形。其中,代码的基本思路是:首先生成随机数据,然后将数据转换为数字调制信号。具体实现包括以下几个步骤:
1. 清空工作区、关闭所有图形窗口以及清空命令窗口,以避免变量或者图形的干扰。
2. 设置调制方式参数:M 表示数据比特数,L 表示每个比特的采样数,Ts 表示每个比特的持续时间,Rb 表示比特率,dt 表示采样时间间隔,fs 表示采样率,TotalT 表示信号持续时间,t 表示时间序列。
3. 生成随机数据。这里使用 `randint` 函数生成 M 个随机比特数据。
4. 将比特数据转换为数字调制信号。这里使用 `modulate` 函数实现数字调制,其中参数包括比特数据、载波频率、采样率、调制方式以及调制指数等。
5. 绘制数字调制信号时域波形。这里使用 `subplot` 函数将图像分成两个部分,分别绘制随机数据和FM数字调制信号的时域波形。
需要注意的是,这段代码中使用的是频率调制(FM)数字调制方式,与之前提到的幅度调制(AM)和相位调制(PM)不同。对于不同的数字调制方式,需要针对性地选择合适的调制算法和参数。
请具体解释以下代码的功能:frame_overlap= dft_length/ 2; freq_val = (0:Fs/dft_length:Fs/2)'; half_lsb = (1/(2^nbits-1))^2/dft_length; freq= freq_val; thresh= half_lsb; crit_band_ends = [0;100;200;300;400;510;630;770;920;1080;1270;... 1480;1720;2000;2320;2700;3150;3700;4400;5300;6400;7700;... 9500;12000;15500;Inf]; imax = max(find(crit_band_ends < freq(end))); abs_thr = 10.^([38;31;22;18.5;15.5;13;11;9.5;8.75;7.25;4.75;2.75;... 1.5;0.5;0;0;0;0;2;7;12;15.5;18;24;29]./10); ABSOLUTE_THRESH = thresh.abs_thr(1:imax); OFFSET_RATIO_DB = 9+ (1:imax)'; num_bins = length(freq); LIN_TO_BARK = zeros(imax,num_bins); i = 1; for j = 1:num_bins while ~((freq(j) >= crit_band_ends(i)) & ... (freq(j) < crit_band_ends(i+1))), i = i+1; end LIN_TO_BARK(i,j) = 1; end spreading_fcn = zeros(imax); summ = 0.474:imax; spread = 10.^((15.81+7.5.summ-17.5.sqrt(1+summ.^2))./10); for i = 1:imax for j = 1:imax spreading_fcn(i,j) = spread(abs(j-i)+1); end end EX_PAT = spreading_fcn LIN_TO_BARK; DC_GAIN = spreading_fcn ones(imax,1); C = EX_PAT Sx; [num_bins num_frames] = size(Sx); k = 1/num_bins; SFM_dB = 10.log10((prod(Sx).^k)./(k.sum(Sx)+eps)+ eps); alpha = min(1,SFM_dB./-60); O_dB = OFFSET_RATIO_DB(:,ones(1,num_frames)).... alpha(ones(length(OFFSET_RATIO_DB),1),:) + 5.5; T = C./10.^(O_dB./10); T = T./DC_GAIN(:,ones(1,num_frames)); T = max( T, ABSOLUTE_THRESH(:, ones(1, num_frames))); M= LIN_TO_BARK' T;
这段代码的功能是对音频信号进行心理声学分析,以计算出不同频段的听觉门限和掩蔽阈值。具体步骤如下:
1. 根据采样率 Fs 和离散傅里叶变换(DFT)的长度 dft_length,计算出每个频率点的频率值 freq_val,并将频率范围分割成若干个听觉临界带(crit_band_ends)。
2. 根据量化比特数(nbits)计算出量化噪声的半个最小量化单位(half_lsb)。
3. 计算出每个听觉临界带的绝对阈值(abs_thr)和相对偏移量(OFFSET_RATIO_DB)。
4. 将频率值转换为巴克(Bark)刻度下的位置(LIN_TO_BARK)。
5. 计算出掩蔽阈值的传播函数(spreading_fcn)。
6. 对输入信号进行短时傅里叶变换(Sx),并计算出短时频谱的几何平均值(prod(Sx))和平均值(k.sum(Sx))。
7. 根据短时频谱的几何平均值和平均值计算出信号的声音场的度量指数(SFM_dB),并根据该指数计算出相对阈值的比例因子(alpha)。
8. 根据相对阈值的比例因子和偏移量计算出绝对阈值(O_dB)。
9. 根据传播函数、绝对阈值和直流增益计算出掩蔽阈值(T)。
10. 将掩蔽阈值限制在绝对阈值和最大可能值之间,并将结果转换为巴克刻度下的矩阵(M)。
最终得到的 M 矩阵可以用于音频压缩、信号增强等处理,以提高音频质量和减少噪音。
阅读全文