【发布时间】: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)')
【问题讨论】: