【语音处理】使用块反射器的基于DFT的系统中用于旁瓣抑制的正交预编码(Matlab代码实现)

  👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

 🌈4 Matlab代码实现


💥1 概述

基于离散傅里叶变换的系统,如正交频分复用(OFDM)和单载波频分多址(SC-FDMA),特别容易发生带外漏电。尽管已经提出了许多技术来抑制基于DFT的系统中的旁瓣,但计算复杂性和带外功率泄漏之间的令人满意的平衡仍然难以实现。 正交预编码是一种很有前途的线性技术,其中具有正交列的预编码矩阵的零空间旨在抑制旁瓣。特别是,Xu 和 Chen [1]、van de Beek [2] 和 Ma 等人 [3] 提出了产生出色带外抑制的正交预编码器。然而,它们的算术复杂性高---有源子载波数量的二次---这限制了它们的应用。 在本文中发现,如果使用块反射器而不是非结构化的酉变换来执行预编码,则算术复杂度可以变为线性而不是二次。实现的误码率无需支付任何惩罚。通过数值模拟表明,OFDM在峰均功率比方面的损失也非常小。 

在语音处理领域,块反射器和离散傅里叶变换(DFT)结合使用的系统中,通过正交预编码技术可以有效抑制旁瓣,提升信号处理效果。以下是对这一技术的详细介绍:

 基于DFT的块反射器系统

原理
块反射器是一种在频域上操作的装置,可以改变信号的相位和幅度。结合DFT,可以实现信号从时域到频域的转换,便于进行频域上的处理。具体来说,DFT将时域信号转换为频域信号,使其分解为不同频率成分,便于对不同频率分量进行独立处理。

#### 应用
- **语音增强**:利用频域处理的优势,通过块反射器调整频率成分,从而实现对语音信号的增强。
- **噪声抑制**:在频域上进行噪声估计和抑制,提高语音信号的质量。

旁瓣抑制的挑战

旁瓣是指在频域处理过程中,信号在主要频率成分之外的部分能量泄漏。旁瓣的存在会影响信号的处理质量,导致干扰和噪声。尤其在语音处理应用中,旁瓣抑制是一个关键问题。

正交预编码技术

原理
正交预编码技术通过在信号进入DFT处理之前进行预编码,使得经过DFT转换后的频率成分之间相互正交,减少能量泄漏,从而抑制旁瓣。正交预编码的核心思想是利用数学上的正交性,使得频率成分之间的相互干扰最小化。

实施步骤
1. **信号预处理**:对原始语音信号进行分帧和窗函数处理。
2. **预编码矩阵设计**:构建一个正交矩阵,用于对每一帧信号进行预编码。
3. **DFT变换**:将预编码后的信号进行DFT变换,得到频域信号。
4. **频域处理**:在频域上进行噪声抑制和增强处理。
5. **反DFT变换**:将处理后的频域信号通过逆DFT变换回时域。

 优势
- **旁瓣抑制**:有效减少频率成分之间的能量泄漏,提高信号处理质量。
- **信号保真度**:在抑制旁瓣的同时,保持信号的原始特性,避免过多的失真。
- **处理效率**:通过矩阵运算实现预编码,计算复杂度较低,适合实时处理应用。

应用实例

- **语音通信**:在VoIP和移动通信中,通过正交预编码抑制旁瓣,提高语音通话质量。
- **语音识别**:在语音识别系统中,减少旁瓣干扰,提高识别率和准确性。
- **音频处理**:在音乐和音频处理领域,通过频域处理提高音频的清晰度和质量。

未来研究方向

1. **优化预编码矩阵**:进一步研究和优化预编码矩阵的设计,使其在不同应用场景中更加高效。
2. **结合机器学习**:利用机器学习算法,根据不同的噪声环境自适应调整预编码矩阵,提升旁瓣抑制效果。
3. **实时处理优化**:提高正交预编码技术在实时处理系统中的效率和性能,满足更高的实时性要求。

通过正交预编码技术,在基于DFT的块反射器系统中实现有效的旁瓣抑制,可以显著提高语音处理的质量和效果,为各种应用场景提供更优质的解决方案。

📚2 运行结果

 

 部分代码:

figure(2);

PtotdBm = 46; % Total downlink power in dBm
Ptot = 1e-3 * 10^(PtotdBm/10); % same in W
S = [-300:-297, 297:300, -296:-1, 1:296]; % set of active sub-carriers (permuted!)
Psub = Ptot / length(S); % power per subcarrier (W)
Ts = 1e-3/15; % data length (in seconds)
Tg = 9*Ts/128; % cyclic prefix length (s)
T = Ts + Tg;

f = -10e6:0.005e6:40e6; % array of sample frequencies for plotting

kfTs = S' * ones(size(f)) - ones(size(S))' * f * Ts; % k - f Ts
a = sqrt(Psub) * T * exp(j*pi*(1-Tg/Ts)*kfTs) .* sinc((1+Tg/Ts)*kfTs);
% (11) but not forgetting the scaling factors

plot(f, 10*log10(sum(abs(a).^2)/(1e-3*T)), 'DisplayName', 'Standard OFDM');
grid on;
hold on;

M = [-6101, -6099, -5101, -5099, 5099, 5101, 6099, 6101] * 1e3; % nulling frequencies
R = length(M);
kMTs = S' * ones(size(M)) - ones(size(S))' * M * Ts; % k - M Ts
A2 = exp(j*pi*(1-Tg/Ts)*kMTs)' .* sinc((1+Tg/Ts)*kMTs)'; % (15)
% [~, ~, V] = svd(A2); % (7)
Gvdb = blockreflector2(A2');
V = eye(length(S)) - Gvdb*Gvdb';
Go = V(:, (R+1):length(S)); % (8)
plot(f, 10*log10(sum(abs(Go'*a).^2)/(1e-3*T)), ...
    'DisplayName', 'Precoded OFDM (van de Beek)');

% Skipping N-continuous OFDM that was originally a part of Fig. 3(a)...

% Now add the comparison with Ma et al. technique

phi = [-40e6:0.2e6:-5e6, 5e6:0.2e6:40e6]; % spectral leakage frequencies
kpTs = S' * ones(size(phi)) - ones(size(S))' * phi * Ts; % k - phi Ts
C = exp(j*pi*(1-Tg/Ts)*kpTs)' .* sinc((1+Tg/Ts)*kpTs)';
[~, ~, Vma] = svd(C);
Gma = blockreflector2(Vma(:, 1:R));
V = eye(length(S)) - Gma*Gma';
Popt = V(:, (R+1):length(S));

plot(f, 10*log10(sum(abs(Popt'*a).^2)/(1e-3*T)), ...
    'DisplayName', 'Precoded OFDM (Ma et al.)');
hold off;
ylim([-120, -20]);
xlabel('Frequency (Hz)');
ylabel('Power spectral density (dBm/Hz)');
legend(gca, 'show');

  % added for Code Ocean output
  % save the resulting plot to an HTML file using Plotly.js
%  fig2plotly(gcf, 'offline', true, 'filename', 'figure1');

  % finally, save the resulting plot to a PNG file (note the output directory)
  saveas(gcf, 'figure1.fig');

% Figure 3.  Now move on to PAPR calculations.

figure(3);
ie = 4; % use ie = 7 to get the same quality of results as in the paper
numiter = 10^ie; % number of Monte Carlo iterations for PAPR calculations
subsamp = unique(round(numiter+1-10.^(ie:-0.01:0))); % for subsampling
numsub = 2048; % number of subcarriers available
prefix = numsub * Tg / Ts; % number of samples in the cyclic prefix
X = zeros(1, numsub);
papr = zeros(1, numiter);

% Standard OFDM with QPSK

l=8; % oversampling factor for PSD estimation (min value = 2)
Y1 = zeros(1, l*numsub);
Y2 = zeros(1, l*numsub);
Y3 = zeros(1, l*numsub);
Y5 = zeros(1, l*numsub);
Y6 = zeros(1, l*numsub);
Y7 = zeros(1, l*numsub);
timing = zeros(1, 7);

tic;
for i=1:numiter
    d = sqrt(Psub/2) * (2*randi(2, size(S)) + 2*j*randi(2, size(S)) - 3 - 3*j); % QPSK data vector
    X(S+numsub/2) = d;
    x = numsub*ifft(ifftshift(X));
%     Y = [zeros(1, (l/2-1)*numsub/2), X, zeros(1, (l/2-1)*numsub/2)];
%     y = l*numsub*ifft(ifftshift(Y))/2;
%     y1 = [y((l*(numsub-prefix)/2+1):l*numsub/2), y, zeros(1, l*(numsub-prefix)/2)];
%     Y1 = Y1 + 4*Ts^2*abs(fft(y1)/(l*numsub)).^2/(Ts+Tg);
    papr(i) = numsub * max(abs(x).^2) / norm(x)^2;
end;
timing(1) = toc;
Y1 = Y1 / numiter;
papr = sort(papr);
semilogy(10*log10(papr), 1-(1:numiter)/numiter);
papr1 = papr(subsamp);
grid on;
hold on;

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]祁博宇.基于零向波束形成和旁瓣抑制的MIMO—OFDM系统码本设计[J].现代电子技术, 2009, 32(23):4.DOI:10.3969/j.issn.1004-373X.2009.23.025.

[2]雷妍.可见光哈特莱交换OFDM通信系统的性能研究[D].西安理工大学,2019.

 🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值