Tôi đã kết hợp EQ âm thanh đa băng tần bằng các bộ lọc biquad. Tôi đang nhận được các hệ số bằng các phương pháp từ sách dạy nấu ăn RBJ .
Bây giờ tôi muốn vẽ đường cong cho thấy phản ứng cường độ. Tôi đang sử dụng một phương trình từ nguồn này
Đây là chức năng của tôi để có được các hệ số và nhận được phản hồi cường độ tại các điểm quan tâm.
void GetCoefficients (double samplerate = 44100.0) {
//from the rbj biquad coefficient cookbook by Robert Bristow-Johnson
long double SR = (long double)samplerate;
long double A = powl(10.0L, dBGain/40.0L);
long double W0 = 2.0L * PI * Center / SR;
long double alpha = sinl(W0)*sinhl( LN2/2.0L * WidthInOctaves * W0/sinl(W0));
if (Type == "peaking") {
b0 = 1.0L + alpha * A;
b1 = -2.0L * cosl(W0);
b2 = 1.0L - alpha * A;
a0 = 1.0L + alpha / A;
a1 = -2.0L * cosl(W0);
a2 = 1.0L - alpha / A;
}
long double w;
long double numerator;
long double denominator;
long double magnitude;
for (int i = 0; i < 59; ++ i) {
w = 2.0L*PI*FreqPoints[i] / SR;
numerator = b0*b0 + b1*b1 + b2*b2 + 2.0L*(b0*b1 + b1*b2)*cosl(w) + 2.0L*b0*b2*cosl(2.0L*w);
denominator = 1.0L + a1*a1 + a2*a2 + 2.0L*(a1 + a1*a2)*cosl(w) + 2.0L*a2*cosl(2.0L*w);
magnitude = sqrtl(numerator / denominator);
FrequencyResponse[i] = magnitude;
}
}
Bộ lọc của tôi nghe có vẻ đúng, nhưng đường nối âm mưu của tôi sai. Ví dụ: khi tôi đã tính các hệ số cho bộ lọc tạo đỉnh có chiều rộng là quãng tám, tập trung tại , với thu được; đáp ứng cường độ của tôi bằng cách sử dụng các hệ số đó tại nói về .
Tôi phải làm điều gì đó sai, nhưng tôi không thể tìm ra nó.
FreqPoints
mảng hoặc PI
hằng số.