【问题标题】:Delete Frequency in FFT File and create new WAV-File删除 FFT 文件中的频率并创建新的 WAV 文件
【发布时间】:2019-07-16 17:05:01
【问题描述】:

我有一个 wav 格式的 0.25 秒音频文件,我想在其中删除一些频率。

1) 首先我做一个 FFT 得到频谱

2) 然后我输入一些我想删除的频率和一个容差

3) 当我删除了频率后,我会做一个 IFFT 来获得没有删除频率的原始信号

我对 IFFT 后得到的结果有点困惑。我已经删除了所有高于 400Hz 的频率,并且在我的 IFFT x(t) 中的频率比这更高?

从 FFT 的转移中我是否因为它的对称而有什么问题?

https://imggmi.com/full/2019/7/16/4febff13474871261e8c77c2d5e3f63b-full.jpg.html https://cdn1.imggmi.com/uploads/2019/7/16/11687331ba65166480a2ae3d794e4aa1-full.jpg

非常感谢您的帮助! BR马蒂亚斯

   clear all;
   close all;


   %Wav File einlesen und die Daten in data und Abtastrate in Fs
   [data,Fs]=audioread('Mono_120A_v20_02sec.wav');
   %Ermittlung der Arraygröße
   [nSamples,nChannels]=size(data);
   %Länge der Audiodatei ermitteln
   waveFileLength=nSamples/Fs;


   t=[0:length(data)-1] / Fs;

   %Signal darstellen
   subplot(3,2,1)
   plot(t,data)

   title('Audio')
   xlabel('Zeit')
   ylabel('X(t)')


   %FFT des Signal

   y_fft = abs(fft(data));               %Retain Magnitude
   y_fft = y_fft(1:nSamples/2);       %Discard Half of Points
   f = Fs*(0:nSamples/2-1)/nSamples;  %Prepare freq data for plot


   %Plot Sound File in Frequency Domain
   subplot(3,2,2)
   plot(f, y_fft)
   grid on
   xlim([0 20000])
   % ylim([0 200])
   xlabel('Frequency (Hz)')
   ylabel('Amplitude')
   title('Freqenzbereich 70A')


   yy=fft(data);
   yyy=fftshift(yy);
   f=Fs.*(-nSamples/2:nSamples/2-1)/nSamples;
   subplot(3,2,3)
   plot(f,(yyy.*conj(yyy)/(nSamples*nSamples)));
   title('FFT')

   %%%%%%%%%%%%%%%%%%%

   Fdelete = 15000; % Diese Frequenz soll gelöscht werden


   tolerance = 14600; % Toleranz um die Frequenz
   idx_p = find(f>Fdelete-tolerance & f<Fdelete+tolerance); % Löschen                                    der Frequenzen
   idx_n = find(f>(Fs-Fdelete)-tolerance & f<(Fs-Fdelete));
   idx = [idx_p idx_n];
   yyy(idx) = 0;

   Fdelete = -15000;

   tol = 14600; % Toleranz um die Frequenz
   idx_p = find(f>Fdelete-tolerance & f<Fdelete+tolerance); % Löschen        der Frequenzen
   idx_n = find(f>(Fs-Fdelete)-tolerance & f<(Fs-Fdelete));
   idx = [idx_p idx_n];
   yyy(idx) = 0;
   subplot(3, 2, 4)
   % plot(f, yyy); title('After');
   plot(f,(yyy.*conj(yyy)/(nSamples*nSamples)));
   title('After')

   %%%%%%%%%%%%%%%%%%%

   subplot(3, 2, 6)
   plot(t,data)

   title('origin x(t)')
   xlabel('Zeit')
   ylabel('X(t)')


   %%%%%%%%%%%%%%%%%%%

   subplot(3, 2, 5)
   y1=ifft(yyy,'symmetric');

   plot(t,y1),grid on;
   title('IFFT x(t)')

【问题讨论】:

    标签: fft frequency


    【解决方案1】:

    在一般情况下,将 FFT bin 归零不会“删除频率”。

    见:https://dsp.stackexchange.com/questions/6220/why-is-it-a-bad-idea-to-filter-by-zeroing-out-fft-bins/6224#6224

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2016-01-20
      • 2013-06-10
      • 2020-08-07
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      相关资源
      最近更新 更多