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

このように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 件のコメント

Kaede
Kaede 2020 年 8 月 11 日
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!