赞
踩
[wave, fs] = audioread("exp.wav");
N = 8192;%FFT点数 M = 32; SampLen = M*N; wave = wave(1:SampLen,1).'; L = length(wave); time = L/fs; for jamming_index = 1:3 InitPhase = rand; Fj = (randi(N/2)-1)*fs/N; jamming(jamming_index,:) = cos(2*pi*(Fj/fs*[0:SampLen-1]+InitPhase)); end jamming = sum(jamming); wave_jammed = wave+jamming; sound(wave_jammed,fs); %画出频谱图 figure('Name','添加多音干扰 频谱图'); subplot(311); plot([-L/2:L/2- 1]/time,abs(fftshift(fft(transpose(wave)))),'linewidth',1.5); title('原音频'); xlabel('频率/Hz'); grid on; subplot(312); plot([-L/2:L/2- 1]/time,abs(fftshift(fft(transpose(jamming)))),'linewidth',1.5); title('三种频率的噪声'); xlabel('频率/Hz'); grid on; subplot(313); plot([-L/2:L/2- 1]/time,abs(fftshift(fft(transpose(wave_jammed)))),'linewidth',1.5); title('添加噪声后的音频'); xlabel('频率/Hz'); grid on;
分析频谱图可知,生成了742.896Hz、7800.4Hz和16925.1Hz三种频率的噪声。
wave_groups = reshape(wave_jammed,N,M);
wave_groups_fft = fft(wave_groups);
figure('Name','分组合并检测干扰 三维曲面图');
mesh(abs(wave_groups_fft));
combined_spectrum = sum(abs(wave_groups_fft),2);
jammed_index = find(combined_spectrum>2000*M);
对三维曲面图分析可知,共有8个平面,每个平面有32条竖直方向的线。其中有6个平面的高度远高于剩下的两个面,高度约为4096。
对wave_groups的频谱进行合并,生成频谱图。可以看出有6种远高于其它频率的信号。使用find函数找到幅值大于2000×32Hz的信号,在下一步中予以删除。
wave_groups_fft(jammed_index,:) = 0;
figure('Name','干扰删除 三维曲面图');
mesh(abs(wave_groups_fft));
wave_antijammed = reshape(ifft(wave_groups_fft),1,[]);
sound(wave_antijammed,fs);
分析三维曲面图可知,上一步中较高的6个平面已经消失,说明干扰信号删除成功。
[wave,fs] = audioread("exp.wav");
wave = transpose(wave);
t_scale = 0:1/fs:(10-1/fs);
f_t = 10000*abs(1-mod(t_scale,2))+100;
figure('Name','扫频干扰 时域图');
plot(t_scale,f_t,'linewidth',2);
title('扫频干扰'); xlabel('时间/s'); grid on;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。