2016-04-19 3 views
1

Я хочу составить график спектра мощности конкретного .wav звуковой файл в диапазоне частот от -2000 до +2000 Гц.Matlab Power Spectrum Plot

Попытка:

Это мой код до сих пор:

[s, Fs] = wavread('chord.wav'); 
Hs=spectrum.periodogram; 
psd(Hs,s,'Fs',Fs) 

Я попытался с помощью алгоритма периодограммного. Но полученный plot варьируется от 0 до 20000 Гц. Итак, как я могу изменить код так, чтобы он был отстроен более чем от -2000 до +2000 Гц?

Любая помощь была бы принята с благодарностью.

+0

может частота быть отрицательным? Если вы просто хотите изменить диапазон осей, посмотрите [здесь] (http://www.mathworks.com/help/signal/ref/dspdata.psd.html) – shamalaia

+1

, вы можете либо изменить диапазон осей, как предлагается A_C, или используйте полосовой фильтр. – GameOfThrows

+0

Что такое 'spectrum.periodogram'? Что такое 'psd()'? Я не думаю, что это стандартные функции/классы MATLAB? – Tom

ответ

0

я изменил один из примеров такой поддержки page

Fs = 32e3; 
    t = 0:1/Fs:2.96; 
    x = cos(2*pi*t*1.24e3)+ cos(2*pi*t*10e3)+ randn(size(t)); 
    nfft = 2^nextpow2(length(x)); 
    Pxx = abs(fft(x,nfft)).^2/length(x)/Fs; 
    Hpsd = dspdata.psd(Pxx(1:length(Pxx)/2),'Fs',Fs); 
    plot(Hpsd) 

enter image description here

figure 
plot(Hpsd) 
axis([9.8 10.2 -90 0]) %change axis range 

enter image description here

+0

Большое вам спасибо за это. Код работал отлично. Хотя график полностью пуст для частот, меньших 0, поэтому я не уверен, почему проблема заключается в том, чтобы рассчитать спектр мощности файла _.wav_ от -2000 до +2000 Гц. – Merin

0

Я написал этот код для принятия FFT любой истории времени вектор, в котором T является вектор шага времени, а S - связанное смещение или любое заданное количество, которое вы надеетесь построить для своего спектра. пс: STfile моя модель история времени перемещения для всех степеней свободы, которую я сохранил его как .mat файл


clc 
clear 

load STfile 

% is your starting vector of time 

data = S(:,12); % vector of data you want to resample 

N = length(T); 

for ii=1:(N-1) 
    DT(ii) = T(ii+1)-T(ii); 
end 

DTS = mean(DT); 


data_TS = timeseries(data,T); % define the data as a timeseries 

new_T = T(1):DTS:T(end); % new vector of time with fixed dt=1/fs 

data_res = resample(data_TS,new_T); % data resampled at constant fs 

plot(data_res) 

y=getdatasamples(data_res,1:N); 

Fs=1./DTS; 
NFFT = 2^nextpow2(N); 
Y = fft(y,NFFT)/N; % the division by N is to scale the amplitude 

freq = Fs/2*linspace(0,1,NFFT/2+1); % vector of frequencies for the plot 
figure() 
plot(freq,2*abs(Y(1:NFFT/2+1)),'r') % multiplicated by 2 to recover the energy related 
% to the negative frequencies since in this way only half spectrum is plotted 
xlabel('Frequency(rad/sec)') 
xlim([0 0.05]) 

example result for this code(time history of heave velocity)