d boss 2022-11-18 19:00 采纳率: 0%
浏览 796

使用频域置零法去除音频信号啸叫噪声

什么是频域置零法?
使用matlab进行仿真,使用频域置零法去除音频信号啸叫噪声
下面为频域置零法的代码,不理解为什么这样写?不知道什么是频域置零法?

% (一)画出含噪音乐信号y1的波形
clear
clc
%做FFT的点数
%读入含噪音乐信号yinyue.wav
N1=81920;
fs=8192;
y1=audioread('jinlichao2.wav',[1,81920]); 
sound(y1)%播放y1,监听该音乐信号
pause(3)%暂停1s
%画y1(n)
figure(1);
subplot(221);
plot(real(y1));
grid on;
title('含噪音乐信号频谱y1(n)');

% (二)音乐噪声消除
y1=y1*6;
Y1=fft(y1,N1);        %对y1进行FFT分析
PSD=Y1.*conj(Y1)/N1;%画功率谱PSD(k),单位为:unit^2/Hz代表单位频率上信号的能量,所以是密度谱,幅值代表频段内的有效值平方
fs=8192;%采样频率
f=8192/N1*(0:N1/2-1);%某点n所表示的频率
subplot(222);
plot(f,PSD(1:N1/2));
title('含噪音乐信号的功率谱PSD(k)');
axis([0 5000 0 500]);%x轴为0-5000,y轴为0-500
grid on;
% 1.频域置零法消噪    
case 1             %选择方法1.频域置零法消噪
Y1(38000:44000)=0;%_________对从点数38000到44000范围内的频谱Y1(k)置零____,消除噪声
y11=ifft(Y1,N1);%___修正后的频谱Y1(k)经IFFT重构原音乐信号__
PSD1=Y1.*conj(Y1)/N1;
subplot (224);
plot(f,PSD1(1:N1/2));
axis([0 5000 0 500]);
title('频域置零消噪后的功率谱PSD1(k)');
grid on;
subplot(223);plot(real(y11));title('频域置零消噪后的音乐信号频谱y11(k)');grid on;

  • 写回答

2条回答 默认 最新

  • 鹅毛在路上了 Matlab领域优质创作者 2022-11-18 23:19
    关注

    就是FFT转换到频域后,将噪声所处的的那段频段强行置零后再IFFT,就得到了消噪后的时域信号,关键语句是

    Y1(38000:44000)=0;%_________对从点数3800044000范围内的频谱Y1(k)置零____,消除噪声
    
    

    其余的语句基本是都是在绘制频谱图,不难,再仔细研究一下。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月18日

悬赏问题

  • ¥15 Java与Hbase相关问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥45 工程软件单片机设计课题要求
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)