% 设置参数 alpha = 0.2; % 吸收系数 d = 10; % 传播距离 f = 1e6; % 超声波信号频率 fs = 16*f; % 采样率 fc = 4*f; % 载波频率 T = 1/fc; % 周期 t = 0:1/fs:T-1/fs; % 采样时间序列 N = length(t); % 采样点数 A = 1; % 振幅 M = 64; % 星座大小 %生成64QAM调制信号 data = randi([0 M-1], [1, N/2]); constellation = qammod(data, M, 'gray'); signalI = real(constellation); signalQ = imag(constellation); signal = zeros(1, N); signal(1:2:end) = signalI; signal(2:2:end) = signalQ; %超声波信号衰减 attenuation = exp(-alpha*d); signal = signal*attenuation; %正交振幅调制 carrierI = cos(2*pi*fc*t); carrierQ = sin(2*pi*fc*t); modulatedI = signal.*carrierI; modulatedQ = signal.*carrierQ; %解调信号 demodulatedI = modulatedI.*carrierI; demodulatedQ = modulatedQ.*carrierQ; demodulated = demodulatedI + demodulatedQ; %误码率曲线 SNR = -10:2:20; ber = zeros(size(SNR)); for i = 1:length(SNR) noisyI = awgn(modulatedI, SNR(i), 'measured'); noisyQ = awgn(modulatedQ, SNR(i), 'measured'); noisySignal = noisyI.*carrierI + noisyQ.*carrierQ; noisyDemodI = noisySignal.*carrierI; noisyDemodQ = noisySignal.*carrierQ; noisyDemod = noisyDemodI + noisyDemodQ; noisyData = qamdemod(noisyDemod, M, 'gray'); [~, ber(i)] = biterr(data, noisyData); end %星座图 scatterplot(constellation) %调制后波形和解调后与原信号波形曲线对比图 figure subplot(311) plot(t, signal) title('原信号') subplot(312) plot(t, modulatedI) hold on plot(t, modulatedQ) title('正交振幅调制后信号') legend('In-phase', 'Quadrature') subplot(313) plot(t, signal - demodulated) title('解调后信号与原信号的差')data与noisyDatasize不一致怎么解决
时间: 2023-12-14 15:37:52 浏览: 84
在计算误码率时,需要将解调得到的数据与原始数据进行比较,因此需要将解调得到的数据与原始数据的长度保持一致。可以通过以下代码修改:
```
noisyData = qamdemod(noisyDemod, M, 'gray');
noisyData = noisyData(1:length(data)); % 将noisyData的长度截断与data保持一致
[~, ber(i)] = biterr(data, noisyData);
```
这样就可以解决数据长度不一致的问题了。
相关问题
d = LeakyReLU(alpha=0.2)(d)
这行代码使用了 LeakyReLU 激活函数,其中 alpha=0.2 表示负数部分的斜率。LeakyReLU 是一种修正线性单元(ReLU)的变体,它允许负数部分有一个小的斜率,以避免神经元死亡现象。具体而言,当输入小于零时,LeakyReLU 函数的输出为 alpha * 输入,而不是像 ReLU 函数那样输出 0。
LeakyReLU(alpha=0.2)
LeakyReLU是一种修正线性单元(ReLU)的变体,它在输入小于零的区域不是完全的零,而是有一个小的斜率(通常设为0.2),这个斜率被称为Leakage系数。LeakyReLU比ReLU具有更好的性质,可以避免在训练过程中出现神经元“死亡”的情况,即某些神经元在训练过程中一直处于关闭状态,不再参与到后续的计算中。LeakyReLU的数学公式如下:
f(x) = alpha * x (x < 0)
f(x) = x (x >= 0)
其中alpha是Leakage系数,通常取0.2。
阅读全文