全データのフーリエ変換について

このように2つの.wavファイルをフーリエ変換することによって周波数特性を見たいのですが,Nを1024というデータの特定部分だけをみるようなfftしかわかりません.
全データに対してフーリエ変換する方法を教えていただきたいです.
久しぶりにMATLABを触り忘れてしまっている部分がありますので初歩的な質問で申し訳ございません.
clear;
[p1,fs]=audioread('40kph_RN.wav');
[p2,fs]=audioread('2000rpm_Knock.wav');
fs=44100;
N=1024;
p2(448512,[1 2]) = [0,0];
smix=p1+p2;
%soundsc(smix,fs)
p1_fft=fft(p1,N);
p2_fft=fft(p2,N);
A=zeros(1,N/2+1);
B=zeros(1,N/2+1);
frequency=zeros(1,N/2+1);
for k=1:N/2+1;
A(k)=abs(p1_fft(k));
B(k)=abs(p2_fft(k));
frequency(k)=(k-1)*fs/N;
end
dB_A=mag2db(A);
dB_B=mag2db(B);
plot(frequency,dB_A);
hold on
plot(frequency,dB_B);
hold off
legend('roadnoise','2000rpm.knock');

3 个评论

clear;
[p1,fs]=audioread('40kph_RN.wav');
[p2,fs]=audioread('2000rpm_Knock.wav');
fs=44100;
p2(448512,[1 2]) = [0,0];
smix=p1+p2;
%soundsc(smix,fs)
Lch_p1=p1(:,1);
Rch_p1=p1(:,2);
Lch_p2=p2(:,1);
Rch_p2=p2(:,2);
fft_p1L=fft(Lch_p1);
dB_p1L=mag2db(abs(fft_p1L));
fft_p1R=fft(Rch_p1);
dB_p1R=mag2db(abs(fft_p1R));
fft_p2L=fft(Lch_p2);
dB_p2L=mag2db(abs(fft_p2L));
fft_p2R=fft(Rch_p2);
dB_p2R=mag2db(abs(fft_p2R));
f = (0:length(fft_p1L)-1)*fs/length(fft_p1L);
figure
semilogx(f,dB_p1L)
xlim([0 fs/2])
xlabel('frequency[Hz]')
ylabel('Magnitude[dB]')
hold on
semilogx(f,dB_p2L)
grid on, hold off
legend('roadnoise','2000rpm.knock');
このような形で修正してみました.いかがでしょうか.
Naoya
Naoya 2020-8-11
fft関数は2つめの引数を省略する場合、信号の点数でfftをしますので、上記で良さそうです。
Kaede
Kaede 2020-8-12
確認いただきありがとうございます.

请先登录,再进行评论。

回答(0 个)

类别

帮助中心File Exchange 中查找有关 フーリエ解析とフィルター処理 的更多信息

产品

提问:

2020-8-9

评论:

2020-8-12

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!